2011-11-18 12 views
54

Używam Selenium w Javie, aby przetestować sprawdzanie pola wyboru w aplikacji internetowej. Oto kod:Atrybut checkbox Selenium "sprawdzony"

private boolean isChecked; 
private WebElement e; 

Oświadczam e i przypisać go do obszaru, gdzie pole jest.

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

Co jest dziwne jest to, że getAttribute("checked") powraca null a więc NullPointerException

W HTML do wyboru, nie ma checked atrybut wyświetlany. Jednak nie jest tak, że wszystkie elementy input mają checked = "true", więc ten kod powinien zadziałać?

Odpowiedz

91

Jeśli korzystasz z aplikacji Webdriver, szukany element jest zaznaczony.

Często w renderowaniu tego pola wyboru faktycznie nie jest sprawdzany atrybut, chyba że określono inaczej.

Więc czego można szukać w selen Webdriver jest to

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

Ponieważ nie ma wybranego w WebDriver Java API, powyższy kod powinien wyglądać następująco:

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

Terrific! Nie mogę uwierzyć, że nie widziałem metody "isSelected()" w interfejsie API. Zasadniczo próbowałem napisać własną metodę, gdy już istniała. Dziękuję Ci. – jamesfzhang

0

Mechanizm ramach selenu:

Tutaj selen uczynić żądanie do swojego serwera i pobrać pierwszy podelement z wejściem zmiennej

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

Niż próbować odbierać atrybut na tym elemencie

object attribute = e.getAttribute("checked") 

Tak więc użyj

findElement(By.attribute("checked") 

lub użyj

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

PS: Nie jestem zaznajomiony z odpowiednikiem selenu w java, więc niektóre metody mogą być nazwane nieco inaczej.

+0

To naprawdę nie rozwiązać problem. Próbuję określić, czy pole wyboru jest zaznaczone, stąd boolean 'isSelected'. Nie próbuję znaleźć zaznaczonego pola wyboru. W każdym razie po prostu używam obejścia otaczającego 'isSelected' z' try' i 'catch' na' NullPointerException' – jamesfzhang

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

Możesz także dodać instrukcję and, aby upewnić się, że zaznaczone jest prawdziwe.

4

zrobiłbym to z 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']")); 

Może to również pomaga ;-)

+0

To nie odpowiada na pytanie. Nie chodziło o szukanie zaznaczonego pola wyboru. Pytanie brzmiało, czy pole wyboru jest zaznaczone, czy nie. – Elmue

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

Dla przypadku, gdy istnieje wiele pól wyboru z którego chcesz wybrać/odznacz tylko kilka, następującą pracę ze sterownikiem Chrome (jakoś nie udało się sterownikowi IE):

UWAGA: Moje pola wyboru nie miały powiązanego identyfikatora, który byłby najlepszym sposobem ich identyfikacji za zgodnie z Dokumentacją.Zwróć uwagę na znak ! na początku wyciągu.

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. Zadeklaruj zmienną.
  2. Przechowywać sprawdzone nieruchomości dla przycisku radiowego.
  3. Mieć warunek if.

Załóżmy

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

} 
else 
{ 

} 

nadzieję, że ta odpowiedź będzie pomocne dla Ciebie. Daj mi znać, jeśli masz jakieś wyjaśnienia w sterowniku CSharp Selenium.

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

Dobrym pomysłem jest użycie metody 'isSelected()'. Jednak twój kod nie odpowiada bezpośrednio na pytanie. Byłoby dobrze, gdybyś go zmienił, aby pasował do kodu w górnym poście lub wyjaśnił (po angielsku), jakie zmiany polecasz. Element –

+0

jest ścieżką xpath, która byłaby wysyłana podczas wywoływania funkcji. wartością zwracaną będzie stan pola wyboru. –