Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何根据测试环境在nightwatch中动态加载不同的页面对象?_Javascript_Nightwatch.js_E2e Testing - Fatal编程技术网

Javascript 如何根据测试环境在nightwatch中动态加载不同的页面对象?

Javascript 如何根据测试环境在nightwatch中动态加载不同的页面对象?,javascript,nightwatch.js,e2e-testing,Javascript,Nightwatch.js,E2e Testing,我想为我的应用程序添加一个涉及付款的测试。在my apps本地环境中,它使用存根支付页面,您只需单击按钮即可失败或授权支付,在所有其他环境中,它显示需要填写卡详细信息的表单 我目前有测试设置来检查我们是否需要在每个命令中使用真实或存根支付 function isRealPayment(page) { return !page.api.globals.stubbedPayment; } module.exports = { commands: { verifyLoaded: fu

我想为我的应用程序添加一个涉及付款的测试。在my apps本地环境中,它使用存根支付页面,您只需单击按钮即可失败或授权支付,在所有其他环境中,它显示需要填写卡详细信息的表单

我目前有测试设置来检查我们是否需要在每个命令中使用真实或存根支付

function isRealPayment(page) {
  return !page.api.globals.stubbedPayment;
}

module.exports = {
  commands: {
    verifyLoaded: function() {
      if (isRealPayment(this)) {
        return this.waitForElementVisible('@orderSummaryContainer');
      }
      return this.waitForElementVisible('@stubbedAuthorisedForm');
    },

    fillInPaymentDetails: function() {
      if (isRealPayment(this)) {
        this
          .setValue('@cardNumber', '4444333322221111')
          .setValue('@name', 'John Doe')
          .setValue('@expiryMonth', '12')
          .setValue('@expiryYear', '25')
          .setValue('@securityCode', '123');
      }
    },

    submitPayment: function() {
      if (isRealPayment(this)) {
        return this.click('@submitButton');
      }
      return this.click('@stubbedSubmitButton');
    }
  },

  elements: {
    orderSummaryContainer: '#orderSummaryDetailsTop',
    cardNumber: '#cardNumber',
    name: '#cardholderName',
    expiryMonth: '#expiryMonth',
    expiryYear: '#expiryYear',
    securityCode: '#securityCode',
    submitButton: '#submitButton',

    stubbedAuthorisedForm: '.frm-AUTHORISED',
    stubbedSubmitButton: '.frm-AUTHORISED > input[type="submit"]'
  }
};
如果我能够定义两个不同的页面对象,并根据
stubbedPayment
global选择要导出的页面对象,我会更愿意这样做。 e、 g


但我找不到一种方法来访问全局变量,而不是在页面命令中。这可能吗?或者是否有其他方法可以根据测试环境加载不同的页面对象?

当然可以。示例解决方案:

首先让我们创建
Global.js
文件

将路径添加到nightwatch.json内的文件:

"globals_path": "Global.js"
在Global.js define before方法中(在任何测试之前执行一次):

现在,在测试中,您可以使用此变量:

if (browser.globals.environment == 'Test') {
   // do something
} else if (browser.globals.environment == 'Prod') {
  // do something else
}
var self = module.exports = {
    environment: undefined,
    before: function (done) {
       // parseArgumentsAndGetEnv is function you need to implement on your own to find your env param
        self.environment = parseArgumentsAndGetEnv(process.argv);
        console.log("Run against: " + self.environment);

        done();
    }
};
if (browser.globals.environment == 'Test') {
   // do something
} else if (browser.globals.environment == 'Prod') {
  // do something else
}