- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想为我的应用添加一个涉及收款的测试。在我的应用程序本地环境中,它使用 stub 支付页面,您只需点击一个按钮即可失败或授权支付,在所有其他环境中,它会显示一个需要填写卡详细信息的表单。
我目前有测试设置来检查我们是否需要在每个命令中使用真实或 stub 付款。
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
全局选择要导出的对象,我会更喜欢它。例如
let realPaymentPage = {
commands: {
verifyLoaded: function() {
return this.waitForElementVisible('@orderSummaryContainer');
},
fillInPaymentDetails: function() {
this
.setValue('@cardNumber', '4444333322221111')
.setValue('@name', 'John Doe')
.setValue('@expiryMonth', '12')
.setValue('@expiryYear', '25')
.setValue('@securityCode', '123');
},
submitPayment: function() {
return this.click('@submitButton');
}
},
elements: {
orderSummaryContainer: '#orderSummaryDetailsTop',
cardNumber: '#cardNumber',
name: '#cardholderName',
expiryMonth: '#expiryMonth',
expiryYear: '#expiryYear',
securityCode: '#securityCode',
submitButton: '#submitButton'
}
};
let stubbedPaymentPage = {
commands: {
verifyLoaded: function() {
return this.waitForElementVisible('@authorisedForm');
},
fillInPaymentDetails: function() {
// Do nothing
},
submitPayment: function() {
return this.click('@submitButton');
}
},
elements: {
authorisedForm: '.frm-AUTHORISED',
submitButton: '.frm-AUTHORISED > input[type="submit"]'
}
};
if (browser.globals.stubbedPayment) {
module.exports = stubbedPaymentPage;
} else {
module.exports = realPaymentPage;
}
但是当不在页面命令中时,我找不到访问全局变量的方法。这可能吗?或者是否有其他方法可以根据测试环境加载不同的页面对象?
最佳答案
当然是。示例解决方案:
首先让我们创建 Global.js
文件。
在 nightwatch.json 中添加文件路径:
"globals_path": "Global.js"
在 Global.js 中定义 before 方法(它在任何测试之前执行一次):
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
}
关于javascript - nightwatch中如何根据测试环境动态加载不同的页面对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55531312/
nightwatch.conf.BASIC.js 和nightwatch 框架中的 nightwatch.conf.js。 设置守夜人框架的基本要求是什么 Node js 和 Selenium 最佳答
你如何在 nightwatch 中检查背景图像?如何确保正确加载背景图像?背景图像是使用 css 加载的。 最佳答案 希望这可以帮助: browser.waitForElementVisible('.
我使用 Nightwatch 编写了浏览器自动化测试用例。我还为 headless 测试用例实现了“phantomjs-prebuilt”。当我设置时,我能够为我的所有测试用例创建一个报告'test_
我正在尝试测试待办事项应用程序是否具有正确数量的元素。 文档似乎几乎只处理单个元素,所以我不得不使用 Selenium 协议(protocol)函数。这是否是测试匹配选择器计数的正确方法(在这种情况下
目前在我的 nightwatch.json 中,我已设置好在我的 mac 上运行: { "src_folders" : ["specs"], "output_folder" : "tests/
我正在使用 Nightwatch 并希望监控我的 nightwatch 步骤生成的 http 请求。有没有办法监听发送的请求和收到的响应。我不需要修改它们。 谢谢 马特 最佳答案 是的,有办法。 为了
我想暂停每个测试。 我创建了这个函数: afterEach:function(browser){ browser.pause(2000); }, 但是当我运行测试时,我会得到错误: TypeEr
从这个answer FirefoxProfile firefoxProfile = new FirefoxProfile(); firefoxProfile.setPreference("browse
我使用 Nightwatch for e2e,我发现这两个命令有点困惑 给出它们附带的名称和解释。 .waitForElementVisible: 在执行任何其他命令或断言之前,等待给定时间(以毫秒为
我使用 Nightwatch.js 设置了一个简单的 smoketest。他们在本地通过,但在 CircleCI 上失败。 源代码: const WAIT = 1000; const NODE_POR
我有六个测试用例需要运行,但任何时候只有三个测试用例可以在测试目标环境中处于事件状态。当我运行测试时,我想检查是否针对特定情况正确设置了环境。如果没有,我想将测试标记为已跳过。如何在 nightwat
如何贴在床头柜上?我尝试了以下命令: browser.keys([browser.Keys.COMMAND, browser.Keys.v]) 但是该命令不起作用。 理想情况下,我希望可以将复制的文本
我正在尝试在测试中使用launch_url属性,并在将浏览器发送到该URL之前为其添加相对路径。 我知道browser.init();将浏览器发送到launch_url中的地址,但是我想知道是否可以在
我想在(非全屏)模式对话框下方的全屏 div 上执行单击。但是,单击事件似乎自动定位到我的背景 div 的中心,从而触摸了该 div 顶部的内容(模态对话框本身)。 如何指定点击应该发生的位置? 这是
如何在 NightwatchJS 中编写简单的 if/else?如果元素存在,请单击此元素,否则 - 单击另一个元素。 'Test2: click login button': function(cl
我的每个 Nightwatch.js 测试都需要身份验证才能运行,目前我无法通过 cookie 进行身份验证(当然,如果测试填写用户名和密码,它就会登录,但需要时间是这样的) 我有一个工作 PHPSE
我在自动测试和设置 Nightwatch 方面相当陌生,但我已经知道我的自定义命令文件夹迟早会变得笨拙。我看过一些示例 nightwatch.json 文件,这些文件使用数组作为自定义命令路径,但我似
我尝试向 Nightwatch 提供测试数据,但我不知道如何提供。如何为 Nightwatch 测试提供动态测试数据? 我不想将值硬编码到代码中。我想从文件中提供它。 编辑: .setValue('s
在浏览器实际启动之前,我有很多脚本首先运行的测试,这有时会导致测试运行不正确。实际上导致我出现问题的最新情况是 try/catch 表达式,它并没有真正捕捉到某些元素不存在的事实(尽管预计不会存在)。
我正在尝试在 nightwatch 中创建一个自定义命令,该命令在 Postgres 数据库上运行查询并返回结果。查询运行得很好并将结果输出到控制台,但测试的执行随后停止。我不明白回调是如何工作的。如
我是一名优秀的程序员,十分优秀!