Nightwatch 通用步骤定义,无需复制页面对象中的元素

Nightwatch generic step definitions without duplicationg elements in pageobjects

我有一个问题:我有一个这样的步骤:

this.Then(/^I click "([^"]*)" element$/, (browser, btn) => {
    var main = browser.page.main_page();

    main
      .waitForElementVisible('@' + btn, 3000)
      .assert.visible('@' + btn)
      .click('@' + btn)
});

我不想为其他页面对象模型复制相同的步骤定义。当我 运行 测试或使此页面对象包含所需元素而不输入它时,是否有可能 create/build 一个大页面对象在不同的​​页面对象模型文件中乘以时间。

解决方案 1:

this.Then(/^I click "([^"]*)" element from "([^"]*)"$/, (browser, btn, page_name) => {
    var page_obj = browser.page[page_name]();

    page_obj
      .waitForElementVisible('@' + btn, 3000)
      .assert.visible('@' + btn)
      .click('@' + btn)
});

解决方案 2:

创建给定的步骤定义和步骤如下:

this.Given(/^I use the "([^"]*)" page object$/, function(browser, page) {

    var p = browser.page[page] 
    if (p) {
      browser.__page = p();
    }
});

this.Then(/^I click "([^"]*)" element$/, (browser, btn) => {
    var main = browser.__page;

    main
     .waitForElementVisible('@' + btn)
     .assert.visible('@' + btn)
     .click('@' + btn)
});