2011-11-18 22 views
54

Estoy usando Selenium en Java para probar la comprobación de una casilla de verificación en una aplicación web. Aquí está el código:Selenio checkbox attribute "checked"

private boolean isChecked; 
private WebElement e; 

Declaro e y asignarlo a la zona en la que la casilla de verificación es.

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

Lo que es raro es que getAttribute("checked") vuelve null y por lo tanto un NullPointerException

En el código HTML de la casilla de verificación, no hay checked atributo que se muestra. Sin embargo, ¿no es cierto que todos los elementos input tienen un checked = "true" por lo que este código debería funcionar?

Respuesta

91

Si está utilizando Webdriver, el elemento que está buscando está Seleccionado.

Muchas veces en el procesamiento de la casilla de verificación no se aplica realmente el atributo marcado a menos que se especifique.

Lo que habría que buscar en selenio WebDriver es este

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

Como no hay Seleccionado en la API WebDriver Java, el código debe ser como sigue:

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

¡Terrific! No puedo creer que no haya visto el método 'isSelected()' en la API. En esencia, estaba tratando de escribir mi propio método cuando ya existía. Gracias. – jamesfzhang

0

El mecanismo del marco de selenio:

Aquí selenio hacer una petición a la de su servidor y Recuperar la primera subelemento con la entrada tagname

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

Que intentar recibir atributo en ese elemento

object attribute = e.getAttribute("checked") 

O bien use

findElement(By.attribute("checked") 

o utilizar

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

P. S. No estoy familiarizado con el equivalente de java de selenio api por lo que algunos métodos pueden llamarse ligeramente diferentes.

+0

Esto realmente no resuelve el problema. Estoy tratando de determinar si se ha seleccionado una casilla de verificación, de ahí el booleano 'isSelected'. No estoy tratando de encontrar una casilla de verificación que esté seleccionada. De todas formas, solo utilizaré una solución rodeando 'isSelected' con' try' y 'catch' en' NullPointerException' – jamesfzhang

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

También puede agregar una declaración and para asegurarse de que esté marcada como verdadera.

4

lo haría con 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']")); 

Tal vez eso también ayuda ;-)

+0

Esto no responde la pregunta. No era la pregunta de cómo buscar una casilla marcada. La pregunta era si alguna casilla de verificación está marcada o no. – Elmue

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

Para el evento en el que hay múltiples casillas de las que le gustaría para seleccionar/deseleccione solo algunos, el siguiente trabajo con el controlador Chrome (error de alguna manera para el controlador IE):

NOTA: Mis casillas de verificación no tenían una ID asociada, que sería la mejor manera de identificarlas un de acuerdo con la Documentación.Tenga en cuenta el signo ! al comienzo de la declaración.

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. declara una variable.
  2. Almacene la propiedad marcada para el botón de opción.
  3. Tienen una condición if.

Asumamos

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

} 
else 
{ 

} 

Esperanza esta respuesta será de ayuda para usted. Avísame si tienes alguna aclaración en el controlador web de CSharp Selenium.

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

Es una buena idea usar el método 'isSelected()'. Sin embargo, su código no responde directamente la pregunta. Sería bueno si lo cambió para que coincida con el código en la publicación superior o explique (en inglés) qué cambios recomienda. El elemento –

+0

es el xpath que estarías enviando al llamar a la función. el valor de retorno será el estado de la casilla de verificación. –

Cuestiones relacionadas