2015-11-03 66 views
12

我使用的是守夜「0.8.6」。每個頁面上的文檔,我創建了一個pages/login.js文件和目錄與添加到配置文件:在Nightwatch中使用頁面對象JS

module.exports = { 
    url: function() { 
    return this.launchUrl; 
    } 
}; 

說明文檔中提到this.api,但那不是客戶端/瀏覽器的性能。然而,this.launchUrl顯然是可用的。

我改變現有的測試使用它:

module.exports = { 
    'Login page has a login button' : function (browser) { 
    browser 
     .url(browser.page.login().url()) 
     .waitForElementVisible('body', 10000) 
     .assert.containsText('button', 'SIGN IN') 
     .end(); 
    } 
} 

測試現在失敗。 .url試圖打開硒data:,,而不是this.launchUrl,這是localhost:3000的值。

頁面對象顯然是在登錄測試的上下文中進行評估的,所以在頁面對象中應該有this.launchUrl。潛入源中,我發現在某種程度上,混合中還有頁面包裝器對象。

如何在0.8.6中正確創建和使用頁面對象?

回答

6

我想你可以嘗試添加一個var來調用login.js頁面。 這樣的:

module.exports = { 
    'Login page has a login button' : function (browser) { 

    var LoginPage = browser.page.login(); 
     LoginPage.navigate(); 

     LoginPage 
     .waitForElementVisible('body', 10000) 
     .assert.containsText('button', 'SIGN IN') 
     .end(); 
    } 
} 
+0

我只是能夠回到th秒。不知道它是否授予你賞金,如果不讓我知道,我會弄清楚是怎麼做到的 –

1

所以根據您的文檔: - 「每個頁面對象應設在一個單獨的文件,位於一個指定的文件夾Nightwatch讀取該文件夾的頁面對象(或文件夾)在page_objects_path配置屬性中指定。「

你配置了你的page_objects_path目錄嗎?

一旦你做到了這一點,你可以在文件夾中創建一個js文件,如:

module.exports = function(client) { 
    return { 
    gotoUrl: function() { 
     return client 
     .url(client.launchUrl); 
    }, 
    }; 
}; 

然後,你可以寫你的測試,如:

module.exports = { 
    'Login page has a login button': (browser) => { 
    browser.page.pagescriptname() 
     .gotoUrl() 
     .waitForElementVisible('body', 10000) 
     .assert.containsText('button', 'SIGN IN') 
     .end(); 
    } 
} 

請確保您有在你的nightwatch.js文件中配置了launch_url(或者這可以通過nightwatch.conf.js文件動態地改變(我已經爲我的項目完成了)