2011-11-18 104 views
54

JavaでSeleniumを使用して、Webアプリケーションのチェックボックスのチェックをテストしています。ここでは、コードです:Seleniumチェックボックスの属性が "checked"

private boolean isChecked; 
private WebElement e; 

私はeを宣言し、チェックボックスがあるエリアに割り当てます。奇妙である何

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

getAttribute("checked")戻りnullやチェックボックスのためのHTMLではのでNullPointerException

は、表示なしchecked属性が存在しないことです。しかし、すべてのinput要素にchecked = "true"という要素があるので、このコードは機能するはずですか?

答えて

91

Webdriverを使用している場合は、探しているアイテムが選択されています。

多くの場合、チェックボックスのレンダリングでは、指定されていない限り属性が実際に適用されません。

それであなたはセレンwebdriverをして​​探しますしてもwebdriverをJava APIの選択が存在しないとして、次のように、上記のコードがあるべきこの

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

です:

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

P.S.を使用私は、Javaのselenium apiと同等のものに慣れていないので、いくつかのメソッドの名前が若干異なる場合があります。

+0

これは実際には問題にはなりません。チェックボックスが選択されているかどうかを判断しようとしています。したがって、ブール型のisSelectedです。私は選択されているチェックボックスを検索しようとしていません。とにかく 'NullPointerException'で' try'と 'catch'を使って' isSelected'を囲んで回避策を使用しています。 – jamesfzhang

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

たぶん、また、あなたが選択したいと思い、そこから複数のチェックボックスがあるイベントのために;-)

+0

これは質問に答えません。チェックされたチェックボックスを検索する方法は問題ではありませんでした。問題は、チェックボックスがオンになっているかどうかです。 – Elmue

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

を助けること/いくつかの選択を解除するには、Chromeドライバの次の作業(IEドライバでは何らかの形で失敗しました)を行ってください:

注:私のチェックボックスにはIDが関連付けられていませんaドキュメンテーションに従ってください。ステートメントの冒頭に記号!があることに注意してください。

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. ラジオボタンのcheckedプロパティを格納します。
  3. if条件があります。

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

} 
else 
{ 

} 

とさせて頂きます。この答えはあなたのために役立つことを願っています。 CSharp Selenium Webドライバの説明がある場合は、私に教えてください。

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

isSelected()メソッドを使うことをお勧めします。しかし、あなたのコードは直接質問に答えません。トップポストのコードと一致するように変更した場合や、推奨する変更を英語で説明していただければ幸いです。 –

+0

要素は、関数を呼び出す際に送信するxpathです。 戻り値はチェックボックスの状態になります。 –

関連する問題