【问题标题】:How do you tell if a checkbox is selected in Selenium for Java?如何判断 Selenium for Java 中是否选中了一个复选框?
【发布时间】:2012-01-01 12:47:25
【问题描述】:

我在 Java 中使用Selenium 来测试对 web 应用程序中复选框的检查。代码如下:

private boolean isChecked;
private WebElement e;

我声明e并将其分配给复选框所在的区域。

isChecked = e.findElement(By.tagName("input")).getAttribute("checked").equals("true");

奇怪的是getAttribute("checked") 返回null,因此返回NullPointerException

在复选框的 HTML 中,没有显示 checked 属性。但是,不是所有的input 元素都有一个checked = "true",所以这段代码应该可以工作吗?

【问题讨论】:

    标签: java selenium attributes checkbox nullpointerexception


    【解决方案1】:

    如果您使用的是 Webdriver,那么您要查找的项目是 Selected。

    通常在复选框的渲染中,除非指定,否则实际上不会应用选中的属性。

    所以你会在 Selenium Webdriver 中寻找的是这个

    isChecked = e.findElement(By.tagName("input")).Selected;
    

    由于WebDriver Java API中没有Selected,所以上面的代码应该如下:

    isChecked = e.findElement(By.tagName("input")).isSelected();
    

    【讨论】:

    • 太棒了!我不敢相信我没有在 API 中看到 isSelected() 方法。当它已经存在时,我基本上是在尝试为它编写自己的方法。谢谢。
    • 恕我直言,API 中的命名约定实际上并不好 - “选择”表明有一个可供选择的内容列表,例如 HTML Select 标记。复选框是二进制的,检查与否。
    【解决方案2】:
    if ( !driver.findElement(By.id("idOfTheElement")).isSelected() )
    {
         driver.findElement(By.id("idOfTheElement")).click();
    }
    

    【讨论】:

      【解决方案3】:
       if(checkBox.getAttribute("checked") != null) // if Checked 
          checkBox.click();                         //to Uncheck it 
      

      您还可以添加and 语句来确定检查是否为真。

      【讨论】:

        【解决方案4】:

        我会用 cssSelector 来做:

        // for all checked checkboxes
        driver.findElements(By.cssSelector("input:checked[type='checkbox']"));
        // for all notchecked checkboxes
        driver.findElements(By.cssSelector("input:not(:checked)[type='checkbox']"));
        

        也许这也有帮助 ;-)

        【讨论】:

        • 这没有回答问题。这不是如何搜索选中复选框的问题。问题是是否选中了任何复选框。
        【解决方案5】:

        如果存在多个复选框,而您只想选择/取消选择其中的几个,请使用 Chrome 驱动程序执行以下操作(IE 驱动程序不知何故失败):

        注意:我的复选框没有关联的 ID,这是根据文档识别它们的最佳方法。请注意语句开头的! 符号。

        if(!driver.findElement(By.xpath("//input[@type='checkbox' and @name='<name>']")).isSelected()) 
        {
          driver.findElement(By.xpath("//input[@type='checkbox' and @name= '<name>']")).click();
        }
        

        【讨论】:

          【解决方案6】:
          1. 声明一个变量。
          2. 存储单选按钮的选中属性。
          3. 有一个 if 条件。

          假设

          private string isChecked; 
          private webElement e; 
          isChecked =e.findElement(By.tagName("input")).getAttribute("checked");
          if(isChecked=="true")
          {
          
          }
          else 
          {
          
          }
          

          希望这个答案对您有所帮助。如果对 CSharp Selenium Web 驱动程序有任何澄清,请告诉我。

          【讨论】:

            【解决方案7】:
            public boolean getcheckboxvalue(String element)
                {   
                    WebElement webElement=driver.findElement(By.xpath(element));
                    return webElement.isSelected();
                }
            

            【讨论】:

            • 使用isSelected() 方法是个好主意。然而你的代码并没有直接回答这个问题。如果您更改它以匹配顶部帖子中的代码或解释(英文)您推荐的更改,那将是很好的。
            • element 是您在调用函数时发送的 xpath。返回值将是复选框的状态。
            【解决方案8】:

            selenium框架的机制:

            这里 selenium 向其服务器发出请求并使用标记名输入获取第一个子元素

            WebElement e = e.findElement(By.tagName("input"));
            

            比你尝试接收该元素的属性

            object attribute = e.getAttribute("checked")
            

            所以要么使用

            findElement(By.attribute("checked")
            

            或使用

            findElement(By.xpath("\\input[@checked='true']")
            

            附:我不熟悉 java 的 selenium api 等价物,因此某些方法的名称可能略有不同。

            【讨论】:

            • 这并不能真正解决问题。我正在尝试确定是否选中了一个复选框,因此是布尔值isSelected。我不想找到选中的复选框。无论如何,我将使用一种解决方法,将isSelectedtrycatch 放在NullPointerException
            猜你喜欢
            • 2011-06-22
            • 2019-07-24
            • 2018-01-15
            • 2016-10-31
            • 2018-07-20
            • 2013-02-03
            • 2013-01-04
            • 2012-12-12
            • 2021-09-09
            相关资源
            最近更新 更多