2011-11-18 53 views
54

我在Java中使用Selenium来测试web应用程序中复选框的检查。下面的代码:Selenium复选框属性“选中”

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

回答

91

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

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

你能看到在硒的webdriver那么,什么是这个

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

,因为在webdriver的Java API的没有选择的,上面的代码应该如下:

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

太棒了!我不敢相信我没有看到API中的isSelected()方法。我基本上试图在它已经存在的时候为自己编写自己的方法。谢谢。 – jamesfzhang

0

硒框架的机制:

这里硒使请求的服务器,并取得与标记名输入

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

第一个子元素比你尝试接收该元素的属性

object attribute = e.getAttribute("checked") 

所以要么使用

findElement(By.attribute("checked") 

或使用

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

附:我不熟悉java的等效的硒API,所以有些方法可能会被命名为稍有不同。

+0

这并没有真正解决这个问题。我试图确定是否选择了复选框,因此布尔型“isSelected”。我没有试图找到选中的复选框。无论如何,我只是通过在'NullPointerException'上围绕'isSelected'使用'try'和'catch'来使用一个解决方法。 – jamesfzhang

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

您还可以添加and语句以确保选中的结果为true。

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

也许这也有助于;-)

+0

这不回答问题。这不是如何搜索复选框的问题。问题是如果任何复选框被选中或没有。 – Elmue

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

对于事件,其中有来自您想选择多的复选框/取消选择只有几个,下面的工作与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(); 
} 
0
  1. 声明一个变量。
  2. 存储单选按钮的选中属性。
  3. 有if条件。

让我们假设

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

} 
else 
{ 

} 

希望这个答案将是对你的帮助。让我知道,如果在CSharp Selenium网络驱动程序中有任何澄清。

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

使用'isSelected()'方法是一个好主意。然而你的代码并不直接回答这个问题。如果您将其更改为与顶部帖子中的代码相匹配,或者解释(英文)您推荐的更改,那就太好了。 –

+0

元素是您在调用函数时发送的xpath。 返回值将是复选框的状态。 –