Использование объектов страниц в Nightwatch JS

Я использую nightwatch "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:, вместо значения this.launchUrl, который является localhost: 3000.

Объект страницы, по-видимому, оценивается в контексте теста входа в систему, поэтому этот объект страницы должен иметь этот .launchUrl. Дайвинг в источник, который я вижу, также есть объекты обертки страницы в миксе.

Как правильно использовать создание и использование объекта страницы в 0.8.6?

Ответ 1

Я думаю, вы можете попробовать добавить один 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();
  }
}

Ответ 2

Итак, согласно документам, вы должны: - "Каждый объект страницы должен располагаться в отдельном файле, расположенном в выделенной папке. 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();
  }
}

Убедитесь, что вы сконфигурировали launch_url в вашем файле nightwatch.js(или это можно изменить динамически (что я сделал для моего проекта) через файл nightwatch.conf.js.