86 votes

Comment savoir si une case à cocher est sélectionnée dans Selenium for Java ?

J'utilise Sélénium en Java pour tester la vérification d'une case à cocher dans une application Web. Voici le code :

private boolean isChecked;
private WebElement e;

Je déclare e et l'affecter à la zone où se trouve la case à cocher.

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

Ce qui est bizarre, c'est que getAttribute("checked") renvoie à null et donc un NullPointerException

Dans le HTML pour la case à cocher, il n'y a pas de checked attribut affiché. Cependant, n'est-il pas vrai que tous les input Les éléments ont un checked = "true" Ce code devrait donc fonctionner ?

148voto

CBRRacer Points 2463

Si vous utilisez Webdriver, l'élément que vous recherchez est Selected.

Souvent, dans le rendu de la case à cocher, l'attribut coché n'est pas réellement appliqué, sauf si cela est spécifié.

Donc ce que vous recherchez dans Selenium Webdriver est le suivant

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

Comme il n'y a pas de Selected dans l'API Java de WebDriver, le code ci-dessus devrait être le suivant :

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

0 votes

C'est génial ! Je n'arrive pas à croire que je n'ai pas vu le isSelected() dans l'API. J'essayais essentiellement d'écrire ma propre méthode pour cette méthode alors qu'elle existait déjà. Merci.

1 votes

À mon avis, la convention d'appellation de l'API n'est pas bonne - "selecting" suggère qu'il y a une liste de choses à sélectionner, comme pour la balise HTML Select. Checkbox est binaire, coché ou non.

16voto

PRB Points 339
if ( !driver.findElement(By.id("idOfTheElement")).isSelected() )
{
     driver.findElement(By.id("idOfTheElement")).click();
}

11voto

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

Vous pouvez également ajouter un and pour être sûr que le contrôle est vrai.

9voto

Tarken Points 831

Je le ferais avec 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']"));

Peut-être que cela aide aussi ;-)

0 votes

Cela ne répond pas à la question. La question n'était pas de savoir comment rechercher une case à cocher cochée. La question était de savoir si une case à cocher était cochée ou non.

2voto

user2196798 Points 11

Dans le cas où il y a plusieurs cases à cocher parmi lesquelles vous souhaitez sélectionner/désélectionner seulement quelques-unes, la procédure suivante fonctionne avec le pilote Chrome (elle a échoué avec le pilote IE) :

NOTE : Mes cases à cocher n'avaient pas d'ID associé, ce qui serait la meilleure façon de les identifier selon la documentation. Notez le ! au début de la déclaration.

if(!driver.findElement(By.xpath("//input[@type='checkbox' and @name='<name>']")).isSelected()) 
{
  driver.findElement(By.xpath("//input[@type='checkbox' and @name= '<name>']")).click();
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X