【问题标题】:Select checkbox if not selected with Protractor如果未使用量角器选中,请选中复选框
【发布时间】:2017-11-29 22:31:28
【问题描述】:

我尝试在量角器中执行以下场景:

  1. 查找复选框
  2. 检查是否被选中
    • 如果是 - 更进一步
    • 如果没有 - 选择它并继续前进

由于某种原因,isSelected() 功能不适用于我的复选框,但我找到了一些解决方案。下面的代码可以正常工作:

expect(checkbox.getAttribute('aria-checked')).toEqual('false')

它检查一些复选框属性,如果未选中则为“假”,如果选中则为“真”。 (但作为一个字符串)

现在是主要问题。如何编写 'if / else' 语句使其生效?

我尝试过类似的方法:

if (expect(checkbox.getAttribute('aria-checked')).toEqual('false')) {
    checkbox.click();
}

但它总是点击复选框,无论它是否被选中。我也试过了:

if (checkbox.getAttribute('aria-checked').toEqual('false')) {
    checkbox.click();
} 

但是有一个错误提示“这不是一个函数”。

有人可以帮我吗?

【问题讨论】:

    标签: javascript if-statement checkbox protractor


    【解决方案1】:

    您可以使用以下方法解决问题。

    在点击任何复选框之前,检查aria-checked 属性的值,如果它为真,则不执行任何操作。否则点击它。

    checkBoxElement.getAttribute("aria-checked").then(function(isChecked){
       if(isChecked == "false") { //getAttribute will return the value as string.
           checkBox.click();
        }
    })
    

    【讨论】:

    • 它对我不起作用,现在它在两种情况下都不会点击。我认为这是因为“aria-checked”是字符串值。 (不是布尔值?)但我可能错了。
    • 例如checkbox.getAttribute("aria-checked").then(function(isChecked){ expect(isChecked).toEqual('true'); }) 工作正常。但是当我改变 toEqual(true);然后我收到一个错误,“预期 'true' 等于 true。”
    • 我的坏。 getAttribute 将返回一个字符串值。代替if(!isChecked),使用if(isChecked == 'false')
    【解决方案2】:

    你可以尝试做一些辅助函数:

    function setCheckBoxTo(locator, value){
        var checkbox = element(locator);
        checkbox.isChecked().then(function(selected){
            if(selected !== value){
                checkbox.click();
            }
        }
    }
    

    在哪里[value is true/false]

    【讨论】:

      猜你喜欢
      • 2021-09-18
      • 2013-12-06
      • 2018-06-05
      • 2016-10-15
      • 1970-01-01
      • 2018-02-09
      • 2021-11-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多