在Nightwatch JS中使用pages对象

时间:2015-11-03 00:15:09

标签: javascript nightwatch.js

我正在使用夜班“0.8.6”。根据页面上的文档,我创建了一个pages/login.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:,打开selenium,而不是this.launchUrl的值,即localhost:3000。

页面对象显然是在登录测试的上下文中进行评估的,因此页面对象中的页面对象应该具有this.launchUrl。潜入源代码我看到混合中还有页面包装器对象,不知何故。

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

2 个答案:

答案 0 :(得分: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();
  }
}

答案 1 :(得分:1)

所以根据你需要的文件: - “每个页面对象应位于指定文件夹中的单独文件中.Watchwatch从mail_create: path: /homePage defaults: { _controller: "YodaHomeBundle:Home:contact" } requirements: { _method: post } [...] <form action="{{ path('mail_create') }}" method="post"> {{ form_start(form) }} {{ form_widget(form) }} {{ form_end(form) }} </form> [...] 配置属性中指定的文件夹(或文件夹)中读取页面对象。”

您是否配置了page_objects_path目录?

完成此操作后,您可以在该文件夹中创建一个js文件,例如:

page_objects_path

然后你可以写下你的测试:

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

确保您在nightwatch.js文件中配置了module.exports = { 'Login page has a login button': (browser) => { browser.page.pagescriptname() .gotoUrl() .waitForElementVisible('body', 10000) .assert.containsText('button', 'SIGN IN') .end(); } } (或者可以通过launch_url文件动态更改(我已为项目完成)。