2016-06-20 15 views
0

Ich verwende Selenium, um Aktion auf einer HTML-Seite zu testen. Der, an dem ich gerade arbeite, enthält mehrere Kontrollkästchen. Mein Selen Skript Sie die folgenden Aktionen: -Klick auf der Dropdown-Liste das Kontrollkästchen Liste auf alle KontrollkästchenSelen, stellen Sie sicher, dass alle Kontrollkästchen aktiviert sind

-Klick auf der Dropdown-Liste schließen Sie das Kontrollkästchen Liste

-Click anzuzeigen

-Repeat für die nächste Liste

das Problem ist, dass somtimes das Skript für den Browser zu schnell geht und etwas Box wird nicht überprüft, es passiert wirklich oft, da ich mehr Test zu beheben mein Problem, das ich versuchte zu machen zu machen eine Methode, die überprüft, ob die Checkbox ist aktiviert, wenn nicht, klicke ich erneut, aber es funktioniert nicht und es erhöht die Zeit meines Tests. Hier ist mein Code so weit:

public void clickClearanceListBox(int numberInList) throws InterruptedException { 
    int iteration = countTheNumberOfElement("//div[5]/div["+numberInList+"]/div[2]"); 

    for(int i = 1; i <= iteration; i++) { 
     String xpathBox ="//div["+numberInList+"]/div[2]/div["+i+"]/div/div/label/span/span[2]";//xpath de la checkbox 
     String xpathInput = "//div["+numberInList+"]/div[2]/div["+i+"]/div/div/label/input"; 

     clickTheDOMbyJs(xpathBox); 

     while(!checkBoxChecked(xpathInput)) { 
      Thread.sleep(200); 
      clickTheDOMbyJs(xpathBox); 
     } 
    } 
} 

Oder:

public void clickClearanceListBox(int numberInList) throws InterruptedException { 
    int iteration = countTheNumberOfElement("//div[5]/div["+numberInList+"]/div[2]"); 

    for(int i = 1; i <= iteration; i++) { 
     String xpathBox ="//div["+numberInList+"]/div[2]/div["+i+"]/div/div/label/span/span[2]";//xpath de la checkbox 
     String xpathInput = "//div["+numberInList+"]/div[2]/div["+i+"]/div/div/label/input"; 

     clickTheDOMbyJs(xpathBox); 

     while(!checkBoxChecked(xpathInput)) { 
      Thread.sleep(200); 
     } 
    } 
} 
+0

Können Sie bitte –

+1

die Methode Implementierung von checkBoxChecked liefere ich glaube nicht, dass Sie die Seite mit uns teilen können? Ich würde es mir gerne ansehen. Weißt du wie viele Checkboxen es sein soll oder ist die Nummer dynamisch? Sie müssen einen Weg finden, um zu bestimmen, wann die gesamte Liste angezeigt wird, auf diesen Auslöser warten und dann alle Kästchen ankreuzen. – JeffC

+0

ich kann es nicht teilen isn 'online sry, die anzahl der checkbox ist dynamisch, aber ich kann die nummer haben werde ich versuchen, was du sagtest jeffC, der code von checkBoxChecked einfach zurück wahr oder falsch, wenn das feld überprüft ist nein muss es zur Verfügung stellen, es ist nicht aufschlussreich. –

Antwort

0

Ich schaffe es, indem ich überprüfe, ob das Attribut "Wert" meiner Checkbox den Wert "wahr" hat. Während der Attributwert falsch ist, bedeutet dies, dass das Kontrollkästchen für den Browser immer noch nicht aktiviert ist, also warte ich ... Das ist extrem langsam, aber zumindest funktioniert es jedes Mal. Nachdem das Skript auf die Checkbox geklickt ich dies tun:

while(!getAnElementAttribute(xpathInput, "value").equals("true")) { 

} 
1

Es sieht aus wie Sie WebDriverWait hier verwenden müssen. Warten Sie zunächst, bis die Dropdown-Liste vollständig geladen ist, und warten Sie, bis das Kontrollkästchen sichtbar ist.

Ein Wort der Warnung an Sie obwohl. Diese XPaths sind wahrscheinlich sehr brüchig, und Ihre Tests werden sehr leicht brechen. Sie sollten diese verschiedenen Elemente mithilfe von IDs, Klassen oder anderen Attributen finden.

+0

danke für die Antwort, ich kann ID nicht verwenden, da sie dynamisch generiert werden, ich warte bereits, dass die checkboxlist vollständig geladen wird, und die Checkbox sichtbar zu sein, aber die Dinge sind, dass wenn mein Skript auf das Kontrollkästchen im Browser klickt zu viel Zeit, um diese Aktion anzuwenden, dann erkennt mein Skript, dass das Kontrollkästchen noch leer ist, also sendet es das Signal, um auf das Kontrollkästchen zu klicken, aber zu diesem Zeitpunkt klickt der Browser schließlich auf das Kontrollkästchen, damit es den zweiten Klick aus dem Skript erhält und deaktivieren Sie das Kontrollkästchen. –

+1

Ah! dann sollte deine Rückklickaktion nicht durchgeführt werden. wirf das raus. Sie möchten also wirklich einen Aufruf von WebDriverWait.until(), damit das Kontrollkästchen sichtbar wird, und dann einen weiteren Aufruf von WebDriverWait.until() für die Aktion, die das Überprüfen dieser Box ausführt. –

+0

Ja, ich habe dies in der Vergangenheit versucht, das Problem ist, wenn ich darauf warte, dass das Kontrollkästchen ihave eine SteleReferenceElementException sichtbar ist. –

Verwandte Themen