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;
    }