Nightwatch页面对象持久性

时间:2016-05-18 20:56:02

标签: nightwatch.js

使用Nightwatch的页面对象功能,我可以定义页面的所有元素及其URL。在导航到页面(例如,page.navigate())之后,代码等待其中一个元素可见,然后在单击离开页面的另一个元素之前记录几个元素的值。我希望通过等待不显示相同的元素来确保不再显示页面,但是第二次等待总是超时并且我被迫寻找不在该页面上的元素验证我已离开页面。例如,

module.exports.command = function (settings) 
{   var page = this.page.settings()
    page.navigate()
        .waitForElementVisible('@firstName',3000)
        .getValue('@firstName',     function(r) {settings.firstName = r.value})
        .getValue('@lastName',      function(r) {settings.lastName = r.value})
        .waitForElementVisible('@firstName',3000)
        .click('@dashboard')
        .waitForElementNotVisible('@firstName',3000) // this times out
    this.verify.visible('#AvailableProcedures')      // but this works
}

我的问题是:一旦页面不再显示,页面对象是否会失效?

1 个答案:

答案 0 :(得分:3)

'离开页面',这是否意味着导航到另一个网址?如果是,您应该检查元素是否“存在”,而不是“可见或不存在”

    module.exports.command = function (settings) 
{   var page = this.page.settings()
    page.navigate()
        .waitForElementVisible('@firstName',3000)
        .getValue('@firstName',     function(r) {settings.firstName = r.value})
        .getValue('@lastName',      function(r) {settings.lastName = r.value})
        .waitForElementVisible('@firstName',3000)
        .click('@dashboard')
        .waitForElementNotPresent('@firstName',3000,false,
           function(),'Element is not there');
}

例如,当我尝试登录时:

loginPage = client.page.login();
loginPage
   .navigate()
   .waitForElementVisible('@username',5000,false)
   .setValue('@username',username)
   .setValue('@password',password)
   .click('@submit')
   .waitForElementNotPresent('@username,5000,false)