您如何判断Selenium for Java中是否选中了一个复选框?


75

我正在Java中使用Selenium来测试Webapp中复选框的检查。这是代码:

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",这样的代码应该工作吗?

Answers:


133

如果您使用的是Webdriver,则正在寻找的项目已选中。

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

所以您在Selenium Webdriver中寻找的是

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

由于WebDriver Java API中没有“选定内容”,因此上面的代码应如下所示:

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

了不起!我不敢相信我没有isSelected()在API中看到该方法。实际上,我已经在尝试为它编写自己的方法了。谢谢。
jamesfzhang

1
恕我直言,API中的命名约定实际上并不好-“选择”表示存在可供选择的内容列表,例如HTML Select标签。复选框是二进制的,是否选中。
克里斯·凯平斯基

15
if ( !driver.findElement(By.id("idOfTheElement")).isSelected() )
{
     driver.findElement(By.id("idOfTheElement")).click();
}

9
 if(checkBox.getAttribute("checked") != null) // if Checked 
    checkBox.click();                         //to Uncheck it 

您还可以添加一条and语句,以确保是否选中true。


7

我会用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']"));

也许这也有帮助;-)


这不能回答问题。这不是如何搜索选中的复选框的问题。问题是是否选中了任何复选框。
Elmue 2015年

2

对于有多个复选框,您只希望从中选择/取消选择几个复选框的情况,以下可与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();
}

1
  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驱动程序中有任何澄清。


1
public boolean getcheckboxvalue(String element)
    {   
        WebElement webElement=driver.findElement(By.xpath(element));
        return webElement.isSelected();
    }

1
使用该isSelected()方法是一个好主意。但是您的代码无法直接回答问题。如果您将其更改为与顶部文章中的代码匹配,或者以英语解释您建议的更改,那将是很好的。
Dmitri Chubarov

element是您在调用函数时要发送的xpath。返回值将是复选框的状态。
akhilesh gulati

0

硒框架的作用机理:

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

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

比您尝试在该元素上接收属性

object attribute = e.getAttribute("checked")

所以要么使用

findElement(By.attribute("checked")

或使用

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

PS我不熟悉java的硒api,因此某些方法的命名可能略有不同。


这并不能真正解决问题。我试图确定是否已选中一个复选框,因此为boolean isSelected。我不是要查找选中的复选框。反正我就可以用一种变通方法通过周围isSelectedtrycatchNullPointerException
jamesfzhang
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.