Nightwatch如何从一个函数使用局部变量到另一个函数

时间:2019-02-17 10:02:59

标签: nightwatch.js magellan-nightwatch

我想使用传递给另一个函数的局部变量或与任何变量进行比较。示例:

browser
    .waitForElementVisible("//div[@class='col-xs-7 alignR uppercase']//strong", 5000, function () {
      browser
      .pause(500)
      .getText("//div[@class='col-xs-7 alignR uppercase']//strong", function(result){
        console.log('++++++++++++++',result.value);
        let numb1 = result.value;
        numb = numb1.match(/\d/g);
          numb = numb1.join("");
          console.log("value=", numb1);
          return numb1;
  })
    })

.element('xpath', "(//div[@class='row']//div[@class='col-xs-7 alignR'])[1]", function (present) {
  console.log(present);
  if (present.status == 0) {
    //arrange 
    browser
    .pause(500)
    .getText("(//div[@class='row']//div[@class='col-xs-7 alignR'])[1]", function (result) {
      console.log("string", result.value);
      let numb = result.value;
      numb = numb.match(/\d/g);
      numb = numb.join("");
      console.log("value=", numb);
      return numb;
      })


  }

})

我想比较numb / numb1或获取两者的总数。

1 个答案:

答案 0 :(得分:0)

好吧,如果您想保持测试结构不变(非常可疑!),那为什么不声明一些测试文件全局变量呢?

let numb, numb1;

browser
  .waitForElementVisible("//div[@class='col-xs-7 alignR uppercase']//strong", 5000, function () {
    browser.pause(500)
      .getText("//div[@class='col-xs-7 alignR uppercase']//strong", function(result) {

        numb1 = result.value;
        // > do more stuff here if necessary <
      });
    })
  .element('xpath', "(//div[@class='row']//div[@class='col-xs-7 alignR'])[1]", function (present) {
    console.log(present);

    if (present.status == 0) {
      browser.pause(500)
        .getText("(//div[@class='row']//div[@class='col-xs-7 alignR'])[1]", function (result) {

        numb = result.value;
        console.log(`numb & numb1 values: ${numb} & ${numb1}`);
        // > do more stuff with num & numb1 if necessary <
      });
    }
  });

话虽如此... 一种更好的方法是分解您的重要步骤并将逻辑提取到单一功能中,因此您可以使用:

考虑到您当前的设置,我们考虑添加以下自定义命令来提取num1

❒getNumb1.js (应位于test/custom_commands/中):

exports.command = function(callback) {
  this.perform((done) => {
    this.api.waitForElementVisible("//div[@class='col-xs-7 alignR uppercase']//strong", 5000, () => {
      this.api.pause(500);
      this.api.getText("//div[@class='col-xs-7 alignR uppercase']//strong", (result) => {
        let numb1 = result.value;
        // > do some other stuff here if necessary <
        callback(numb1);
      });
    });
  });
};

类似地,添加另一个自定义命令文件( getNumb.js ),该文件将返回numb的值。 然后 ,请在测试文件中使用二者,并根据需要进行数据处理或数据检查(断言)

let numb = browser.getNumb();
let numb1 = browser.getNumb1();

// > do something with numb & numb1 here <
  

!注意: 上面给出的示例纯粹是有教义的!我不建议   创建包含测试特定逻辑的custom_commands。仅通用和/或实用程序方法(例如: closeGDPR addCookie getHttpCode 等)应位于custom_commands文件夹中。

因此 ,在当前设置中,最好在getNumb和getNumb1之类的命令>页面对象的“命令” 部分。