我正在使用nightwatch.js对应用程序进行端到端测试,但无法验证复选框的状态。
我正在使用attributeEquals()
验证是否选中了复选框:
module.exports = {
"Checkbox is checked" : function (client) {
client
.url(client.launch_url)
.useCss()
.waitForElementVisible("body", 1000)
.verify.attributeEquals('#a_checkbox', 'checked', 'true') // quotes necessary
.end();
}
};
但我还需要确认复选框未选中。
为此,我尝试再次使用attributeEquals()
,并有各种期望:
module.exports = {
"Checkbox is not checked" : function (client) {
client
.url(client.launch_url)
.useCss()
.waitForElementVisible("body", 1000)
.verify.attributeEquals('#b_checkbox', 'checked', null)
.verify.attributeEquals('#b_checkbox', 'checked', 'null')
.verify.attributeEquals('#b_checkbox', 'checked', 'false')
.verify.attributeEquals('#b_checkbox', 'checked', false)
.verify.attributeEquals('#b_checkbox', 'checked', '')
.end();
}
};
但它们都失败了,并显示一条消息,指出checked
属性不存在:
Running: Checkbox is not checked
✔ Element <body> was visible after 68 milliseconds.
✖ Testing if attribute checked of <#b_checkbox> equals "null". Element does not have a checked attribute. - expected "null" but got: null
✖ Testing if attribute checked of <#b_checkbox> equals "null". Element does not have a checked attribute. - expected "null" but got: null
✖ Testing if attribute checked of <#b_checkbox> equals "false". Element does not have a checked attribute. - expected "false" but got: null
✖ Testing if attribute checked of <#b_checkbox> equals "false". Element does not have a checked attribute. - expected "false" but got: null
✖ Testing if attribute checked of <#b_checkbox> equals "". Element does not have a checked attribute. - expected "" but got: null
该消息是正确的,没有checked
属性,但缺少属性意味着未选中复选框,因此我希望测试通过。
如何实现这一目标?
如果那是重要的话,我正在使用夜班v0.5.36。
答案 0 :(得分:9)
您可以尝试:browser.expect.element('#b_checkbox').to.not.be.selected;
答案 1 :(得分:4)
我是使用css断言完成的,例如:
module.exports = {
"Checkbox is not checked" : function (client) {
client
.url(client.launch_url)
.useCss()
.waitForElementVisible("body", 1000)
.verify.elementPresent('#b_checkbox')
.verify.elementNotPresent('#b_checkbox:checked')
.end();
}
};
答案 2 :(得分:2)
我不是Nightwatch.js的专家。但这看起来很有希望。
module.exports = {
tags: ['checkbox'],
'Demo test select a checkbox' : function (client) {
client
.url('your-domain.tld')
.verify.visible('input[id="your_checkbox"]', 'Checkbox is visible')
.click('input[id="your_checkbox"]')
.pause(1000)
.element('id', 'your_checkbox', function(response) {
client.assert.ok(response.value.ELEMENT, 'Checkbox response is OK');
client.elementIdSelected(response.value.ELEMENT, function(result){
client.verify.ok(result.value, 'Checkbox is selected');
});
})
.end();
}
};
请参阅此 Page
答案 3 :(得分:1)
我有类似的问题。我想检查一个复选框的状态。如果未选中它,我希望我的代码选择它,如果它已被选中,我希望代码取消选择它。这就是我通过遵循vinoth-s评论和他在答案中提到的链接来解决它的方法:
client.element('id', 'elements_css_id', (response) => {
client.elementIdSelected(response.value.ELEMENT, (result) => {
if(result.value == true) {
client.click('elements_css_id');
};
});
});
答案 4 :(得分:1)
您可以尝试抓取并测试是否可见任何与您的ID匹配的复选框,并且也会进行检查。我使用cucumberjs执行此任务和页面对象,因此这将适用于我的项目。但是我觉得nightwatch独立会做类似的事情。
browser.assert.visible('#b_checkbox:checked');
未检查
browser.assert.visible('#b_checkbox:not(:checked)');
答案 5 :(得分:0)
你的考试没问题。我查看了错误并看到了一个简单的问题@
测试&lt;#b_checkbox&gt;的属性是否已检查等于“null”。元素没有checked属性。 - 期望“null”但得到:null 您正在通过.assert.attributeEquals('#b_checkbox', 'checked', null)
传递.assert.attributeEquals('#b_checkbox', 'checked', 'null')
null
作为字符串'null'
希望这是有道理的。
答案 6 :(得分:0)
如果没有属性
,您可以使用elementNotPresent
而不是使用它
.verify.attributeEquals('#b_checkbox', 'checked', 'null')
你可以用它
.assert.elementNotPresent('#b_checkbox[checked]')
答案 7 :(得分:0)
我用过这个:
client.expect.element('@your_checkbox_input').to.not.have.attribute('checked');
如果你想检查价值:
client.getAttribute('@your_checkbox_input', 'checked', result => {
// do something
});
答案 8 :(得分:0)
这可能会让人感到困惑,因为已检查的元素和未检查的元素就像苹果和橙子。我将展示命令,然后解释......
检查是否已检查...
browser.assert.attributeEquals('<element>', 'checked', 'true');
检查是否未选中
browser.expect.element('<element>').to.not.be.selected;
为什么这不起作用?
browser.assert.attributesEquals('<element>','checked','false')
如果运行该命令,您将失败,结果显示
"Element does not have a checked attribute."
转到控制台并查看html标记,并将选中的代码与未选中的代码进行比较。当标签被禁用时,您将获得类似......
的内容<input ... checked=checked />
如果未选中,则检查的标签会消失。
<input .../>
attributeEquals函数正在寻找&#34;已检查&#34;属性,当元素未被选中时不再存在,因此您会得到错误,即&#34;元素没有已检查的属性&#34;。由于此属性不再存在,因此您无法再使用函数attributeEquals。
答案 9 :(得分:0)
当我陷入负面测试时,我在nightwatch.js中没有像我想要的那样工作,我只是否定了自己的积极测试。由于验证不会导致测试失败,如果不是真的,我会使用肯定的断言。
这样的事情:
"Checkbox is not checked" : function (client) {
if !(client
.url(client.launch_url)
.useCss()
.waitForElementVisible("body", 1000)
.verify.attributeEquals('#a_checkbox', 'checked', 'true');){
browser.expect.element('body').to.not.be.present;
}