Wie können Sie feststellen, ob in Selenium für Java ein Kontrollkästchen aktiviert ist?

74

Ich verwende Selenium in Java, um das Aktivieren eines Kontrollkästchens in einer Webanwendung zu testen. Hier ist der Code:

private boolean isChecked;
private WebElement e;

Ich deklariere eund ordne es dem Bereich zu, in dem sich das Kontrollkästchen befindet.

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

Was seltsam ist, dass das getAttribute("checked")zurückkehrt nullund daher aNullPointerException

Im HTML für das Kontrollkästchen wird kein checkedAttribut angezeigt. Ist es jedoch nicht so, dass alle inputElemente eine haben, checked = "true"sodass dieser Code funktionieren sollte?

jamesfzhang
quelle

Antworten:

130

Wenn Sie Webdriver verwenden, ist das gesuchte Element Ausgewählt.

Oft wird beim Aktivieren des Kontrollkästchens das aktivierte Attribut nur angewendet, wenn es angegeben ist.

Was Sie also in Selenium Webdriver suchen würden, ist dies

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

Da in der WebDriver-Java-API keine Ausgewählte vorhanden ist, sollte der obige Code wie folgt lauten:

isChecked = e.findElement(By.tagName("input")).isSelected();
CBRRacer
quelle
Umwerfend! Ich kann nicht glauben, dass ich die isSelected()Methode in der API nicht gesehen habe. Ich habe im Wesentlichen versucht, meine eigene Methode dafür zu schreiben, als es sie bereits gab. Vielen Dank.
Jamesfzhang
1
IMHO ist die Namenskonvention in der API eigentlich nicht gut - "Auswählen" deutet darauf hin, dass es eine Liste von Dingen gibt, aus denen man auswählen kann, wie zum Beispiel für das HTML Select-Tag. Das Kontrollkästchen ist binär, aktiviert oder nicht.
Chris Kepinski
15
if ( !driver.findElement(By.id("idOfTheElement")).isSelected() )
{
     driver.findElement(By.id("idOfTheElement")).click();
}
ShutterSoul
quelle
9
 if(checkBox.getAttribute("checked") != null) // if Checked 
    checkBox.click();                         //to Uncheck it 

Sie können auch eine andAnweisung hinzufügen , um sicherzustellen, dass diese Option aktiviert ist.

Aditya
quelle
7

Ich würde es mit cssSelector machen:

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

Vielleicht hilft das auch ;-)

Tarken
quelle
Dies beantwortet die Frage nicht. Es war nicht die Frage, wie man nach einem aktivierten Kontrollkästchen sucht. Die Frage war, ob ein Kontrollkästchen aktiviert ist oder nicht.
Elmue
2

Für den Fall, dass es mehrere Kontrollkästchen gibt, aus denen Sie nur einige aktivieren / deaktivieren möchten, funktionieren die folgenden Funktionen mit dem Chrome-Treiber (für IE-Treiber irgendwie fehlgeschlagen):

HINWEIS: Mit meinen Kontrollkästchen war keine ID verknüpft. Dies ist der beste Weg, um sie gemäß der Dokumentation zu identifizieren. Beachten Sie das !Zeichen am Anfang der Anweisung.

if(!driver.findElement(By.xpath("//input[@type='checkbox' and @name='<name>']")).isSelected()) 
{
  driver.findElement(By.xpath("//input[@type='checkbox' and @name= '<name>']")).click();
}
user2196798
quelle
1
  1. Deklarieren Sie eine Variable.
  2. Speichern Sie die aktivierte Eigenschaft für das Optionsfeld.
  3. Haben Sie eine Wenn-Bedingung.

Angenommen

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

}
else 
{

}

Hoffe, diese Antwort wird Ihnen helfen. Lassen Sie mich wissen, wenn Sie Erläuterungen zum CSharp Selenium-Webtreiber haben.

Balaji
quelle
1
public boolean getcheckboxvalue(String element)
    {   
        WebElement webElement=driver.findElement(By.xpath(element));
        return webElement.isSelected();
    }
Akhilesh Gulati
quelle
1
Es ist eine gute Idee, die isSelected()Methode zu verwenden. Ihr Code beantwortet die Frage jedoch nicht direkt. Es wäre gut, wenn Sie es so ändern würden, dass es mit dem Code im oberen Beitrag übereinstimmt, oder (auf Englisch) erklären, welche Änderungen Sie empfehlen.
Dmitri Chubarov
Element ist der xpath, den Sie beim Aufrufen der Funktion senden würden. Der Rückgabewert ist der Status des Kontrollkästchens.
Akhilesh Gulati
0

Der Mechanismus des Selengerüsts:

Hier stellt Selen eine Anfrage an seinen Server und ruft das erste Unterelement mit der Eingabe des Tagnamens ab

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

Dann versuchen Sie, ein Attribut für dieses Element zu erhalten

object attribute = e.getAttribute("checked")

Also entweder verwenden

findElement(By.attribute("checked")

oder verwenden

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

PS Ich bin nicht mit Javas Äquivalent zu Selenium API vertraut, daher kann eine Methode etwas anders benannt werden.

VMykyt
quelle
Dies behebt das Problem nicht wirklich. Ich versuche festzustellen, ob ein Kontrollkästchen aktiviert ist, daher der Boolesche Wert isSelected. Ich versuche nicht, ein Kontrollkästchen zu finden, das aktiviert ist. Wie auch immer, ich werde nur eine isSelectedtrycatchNullPointerException
Problemumgehung verwenden