Selenium Nightwatch.js-如何声明未选中复选框?
我正在使用它对应用程序进行一些端到端测试,但在验证复选框的状态时遇到问题 我正在使用Selenium Nightwatch.js-如何声明未选中复选框?,selenium,selenium-webdriver,nightwatch.js,Selenium,Selenium Webdriver,Nightwatch.js,我正在使用它对应用程序进行一些端到端测试,但在验证复选框的状态时遇到问题 我正在使用attributeEquals()验证复选框是否已选中: module.exports={ “复选框已选中”:功能(客户端){ 客户 .url(client.launch\u url) .useCss() .waitForElementVisible(“主体”,1000) .verify.attributeEquals(“#a#u复选框”、“选中”、“true”)//必要的引号 .end(); } }; 但我还
attributeEquals()
验证复选框是否已选中:
module.exports={
“复选框已选中”:功能(客户端){
客户
.url(client.launch\u url)
.useCss()
.waitForElementVisible(“主体”,1000)
.verify.attributeEquals(“#a#u复选框”、“选中”、“true”)//必要的引号
.end();
}
};
但我还需要验证复选框是否未选中
为此,我再次尝试使用attributeEquals()
,期望值各不相同:
module.exports={
“未选中复选框”:功能(客户端){
客户
.url(client.launch\u url)
.useCss()
.waitForElementVisible(“主体”,1000)
.verify.attributeEquals(“#b#u复选框”,“选中”,null)
.verify.attributeEquals(“#b#u复选框”、“选中”、“空”)
.verify.attributeEquals(“#b#u复选框”、“选中”、“false”)
.verify.attributeEquals(“#b#u复选框”,“选中”,false)
.verify.attributeEquals(“#b#u复选框”、“选中”和“”)
.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
运行:未选中复选框
✔ 元素在68毫秒后可见。
✖ 测试是否检查了等于“null”的属性。元素没有选中的属性。-应为“null”,但得到:null
✖ 测试是否检查了等于“null”的属性。元素没有选中的属性。-应为“null”,但得到:null
✖ 测试属性检查是否等于“false”。元素没有选中的属性。-应为“false”,但得到:null
✖ 测试属性检查是否等于“false”。元素没有选中的属性。-应为“false”,但得到:null
✖ 测试是否检查了等于“”的属性。元素没有选中的属性。-应为“”,但得到:null
该消息是正确的,没有选中的属性,但是缺少该属性意味着没有选中复选框,因此我希望测试通过
如何做到这一点
我使用的是nightwatch v0.5.36,如果这很重要的话。您的测试很好。我查看了错误,发现了一个简单的问题@ 测试是否检查了等于“null”的属性。元素没有选中的属性。-应为“null”,但得到:null您正在传递
。assert.attributeEquals(''b#u checkbox','checked',null)
它应在哪里。assert.attributeEquals('b#u checkbox','checked','null')
作为字符串null
希望这是有意义的。我在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();
}
};
请参阅此我使用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();
}
};
您可以尝试:
browser.expect.element(“#b_复选框”).to.not.be.selected代码>我也有类似的问题。我想检查复选框的状态。如果未选中,我希望代码选中它,如果已选中,我希望代码取消选中它。这就是我如何通过遵循vinoth-s的评论和他在回答中提到的链接来解决的:
client.element('id', 'elements_css_id', (response) => {
client.elementIdSelected(response.value.ELEMENT, (result) => {
if(result.value == true) {
client.click('elements_css_id');
};
});
});
如果没有属性,可以使用elementNotPresent
而不是用这个
.verify.attributeEquals(“#b#u复选框”、“选中”、“空”)
你可以用这个
.assert.elementNotPresent(“#b#u checkbox[checked]”)
您可以尝试提取和测试与您的id匹配的任何复选框(如果可见)并已选中。我使用cucumberjs来完成这个任务和页面对象,这样我的项目就可以完成了。但我想《独立夜表》也会做类似的事情
browser.assert.visible('#b_checkbox:checked');
而且没有检查
browser.assert.visible('#b_checkbox:not(:checked)');
browser.expect.element('<element>').to.not.be.selected;
我用了这个:
client.expect.element('@your_checkbox_input').to.not.have.attribute('checked');
如果要检查值:
client.getAttribute('@your_checkbox_input', 'checked', result => {
// do something
});
这可能会让人很困惑,因为选中元素和未选中元素就像苹果和桔子一样。我将显示命令,然后解释
要检查是否已检查
browser.assert.attributeEquals('<element>', 'checked', 'true');
转到控制台,查看html标记并将代码从选中状态与未选中状态进行比较。当标签被禁用时,您将得到类似于
<input ... checked=checked />
未选中时,选中的标记将消失
<input .../>
attributeEquals函数正在查找“checked”属性,当元素未选中时,该属性不再存在,因此您会得到“元素没有checked属性”的错误信息。由于该属性已不存在,因此您不能再使用函数attributeEquals。当我在nightwatch.js中遇到一个无法正常工作的否定测试时,我会自己否定这个肯定测试。因为verify不会导致测试退出,所以如果不是true,我将使用肯定断言
大概是这样的:
"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;
}
你能在选中复选框后提供html吗?谢谢,但是我试图断言复选框没有被选中。它在服务器的HTML中未选中。来自服务器的HTML看起来是这样的:重要的一点是没有checked
属性,这是表示“unchecked”状态的完全有效的HTML。。。但是nightwatch.js的attributeEquals()
方法抛出了一个错误,因为它找不到运行比较的属性。感谢您的帮助。你核实了吗?我在问题中列出的所有值都有一个错误,包括'null'
。我已经更新了问题以使其更清楚。.assert.attributeEquals(“#b#u checkbox”,“checked”,“null”)
上面的方法不起作用。我发现错误元素没有禁用的属性。-预期为“null”,但得到了:“null”
此解决方案不适用于我,因为我仍然收到完全相同的错误消息:元素没有禁用的属性。-预期为“null”,但得到“null”I u
<input .../>
"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;
}