Как передать экземпляр объекта страницы между его блоками в nightwatch? - PullRequest
0 голосов
/ 12 января 2020

Я использую "BDD описать", чтобы написать свой тест пользовательского интерфейса в Nightwatch. Одна из проблем, с которыми я сталкиваюсь, заключается в том, что я не могу использовать один и тот же экземпляр объекта страницы между блоками "it". Я должен повторить одну и ту же строку кода в каждом блоке "it", чтобы запустить тест. Я повторяю ниже код

const loginTest = browser.page.loginPage();

Есть ли способ избежать избыточности? , Вот мой тест. Обратите внимание, что nightwatch не позволяет мне создавать экземпляр под блоком описания.

describe('Login Cases', function() {

beforeEach (browser => browser.url(browser.launchUrl)

it('Verify login is successful', async function (browser) {

  const loginTest = browser.page.loginPage();

  await loginTest.waitForElementVisible('@body')
  await loginTest.setValue('@emailInput',browser.globals.Username)
  await loginTest.setValue('@passwordInput',browser.globals.Password)
  await loginTest.click('@submitBtn')
  await loginTest.expect.element('@myAccountBtn').to.be.visible;
});

it('Verify incorrect login', async function (browser) {

  const loginTest = browser.page.loginPage();

  await loginTest.waitForElementVisible('@body')
  await loginTest.setValue('@emailInput','incorrectusername')
  await loginTest.setValue('@passwordInput','incorrectpwd')
  await loginTest.click('@submitBtn')
  await loginTest.expect.element('@myAccountBtn').to.not.be.present;
});

   afterEach (browser => browser.end());
});

This is how i wrote for before block to instantiate the login page object.  
its returning loginTest is not defined.  

beforeEach(async function(browser) {
const loginTest = browser.page.loginPage();
browser => browser.url(browser.launchUrl)

});

Я решил проблему с помощью этого ключевого слова при создании экземпляра объекта страницы.

beforeEach(async function(browser) {
  this.loginTest = await browser.page.loginPage()
  await this.loginTest.loginSuccess(browser.globals.Username,browser.globals.Password)
  this.myAccounttest = await browser.page.myAccountPage();
});

1 Ответ

0 голосов
/ 13 января 2020
 beforeEach(async function(browser) {
  this.loginTest = await browser.page.loginPage()
  await this.loginTest.loginSuccess(browser.globals.Username,browser.globals.Password)
  this.myAccounttest = await browser.page.myAccountPage();
});

с помощью ключевого слова this , когда мы инициируем объект страницы, решает проблему.

Подробную документацию можно найти здесь - https://nightwatchjs.org/guide#using - bdd - описывают-бета-

...