2011-11-18 89 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。 返回值將是複選框的狀態。 –