Javascript 在Nightwatch JS中使用pages对象

Javascript 在Nightwatch JS中使用pages对象,javascript,nightwatch.js,Javascript,Nightwatch.js,我用的是夜视“0.8.6”。根据pages上的文档,我创建了一个pages/login.js文件,并使用以下内容将目录添加到配置文件中: module.exports = { url: function() { return this.launchUrl; } }; 文档中提到了this.api,但这不是客户机/浏览器的属性此.launchUrl显然是可用的 我更改了现有测试以使用它: module.exports = { 'Login page has a login b

我用的是夜视“0.8.6”。根据pages上的文档,我创建了一个
pages/login.js
文件,并使用以下内容将目录添加到配置文件中:

module.exports = {
  url: function() {
    return this.launchUrl;
  }
};
文档中提到了
this.api
,但这不是客户机/浏览器的属性<代码>此.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尝试使用
数据:,
打开selenium,而不是使用this.launchUrl的值,该值为localhost:3000

页面对象显然是在登录测试的上下文中进行计算的,因此页面对象中的这个应该有this.launchUrl。深入到源代码中,我看到混合中也有页面包装器对象


如何在0.8.6中正确使用创建和使用页面对象?

我认为您可以尝试添加一个变量来调用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();
  }
}

因此,根据文件,您必须: -每个页面对象都应位于指定文件夹中的单独文件中。Nightwatch从
page\u objects\u path
配置属性中指定的文件夹中读取页面对象

您是否配置了
页面对象\u路径
目录

完成此操作后,您可以在该文件夹中创建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\u url
(或者可以通过
nightwatch.conf.js
文件动态更改(我已经为我的项目做了更改)。

我刚刚能够回到这里。不确定它是否给了你奖金,如果不让我知道,我会想办法的