代码之家  ›  专栏  ›  技术社区  ›  belatry

Nightwatch js在所有步骤中使用页面对象作为变量

  •  1
  • belatry  · 技术社区  · 8 年前

    我有一些带有代码的页面对象文档:

    var gmailItemClicks = {
        composeClick: function () {
            return this.section.leftToolbarSection.click('@compose');
        }
    };
    module.exports = {
        commands: [gmailItemClicks],
        sections: {
            leftToolbarSection: {
                selector: '.nH.oy8Mbf.nn.aeN',
                elements: {
                    compose: { selector: '.T-I.J-J5-Ji.T-I-KE.L3' },
                }
            },
    };
    

    测试文件包含许多步骤,如下所示:

    module.exports = {    
        '1st step': function (client) {
            gmail.composeClick();
        },
        '2d step': function (client) {
            gmail.composeClick();
        }
    }
    

    如果每个步骤都是这样的,我可以使用“gmail”变量:

    module.exports = {    
        '1st step': function (client) {
            var gmail = client.page.gmail();
            gmail.composeClick();
        },
        '2d step': function (client) {
            var gmail = client.page.gmail();
            gmail.composeClick();
        }
    }
    

    但是我想在步骤中将这个var与测试代码分离。我试着用

    const gmail = require('./../pages/gmail');
    

    在测试前模块中。导出blok,我尝试使用globals。js文件具有相同的语法,但我得到错误“TypeError:gmail.composeClick不是函数”。
    现在我只有一个大函数,其中所有步骤都是在func中声明一次的使用变量,但测试日志看起来很难看,我看不到一个步骤是何时开始的,在哪里停止的。
    我错过了什么?

    1 回复  |  直到 8 年前
        1
  •  1
  •   TheBay0r    8 年前

    可以在before块中创建对象。下面是我的代码中的情况:

    (function gmailSpec() {
      let gmailPage;
      function before(client) {
        gmailPage = client.page.gmail();
        gmailPage.navigate()
      }
      function after(client) {
        client.end();
      }
    
      function firstStep() {
        gmailPage.composeClick()
      }
    
      function secondStep() {
        gmailPage.composeClick()
      }
    
      module.exports = {
        before,
        after,
        '1st step': firstStep,
        '2nd step': secondStep
      }
    }());
    

    希望对您有所帮助:)