2012-04-13 1 views
2

Ich versuche den saubersten Code zum Warten auf eine bestimmte Zeichenfolge auf einer Seite zu finden. Das Beste, was ich jetzt habe, ist das eher klobigSauberste Art auf eine Bedingung in Selenium 2/Java zu warten?

new Wait() { 
    @Override 
    public boolean until() { 
     return !webDriver.findElement(By.tagName("html")) 
       .getText().contains("please choose another"); 
    } 
}.wait("wait failed!", 60000); 

Gibt es eine elegantere Möglichkeit, dies zu tun?

+0

Sie nicht zu viel über die törichte Art des Zustandes Sorge, BTW. Ich wählte ein Beispiel mehr oder weniger zufällig. – Zarkonnen

Antwort

3

Ist dies wirklich das, was Sie tun wollen, dann

webDriver.findElement(By.xpath("//*[contains(text(),'please choose another')]")); 

mit einem Implicit wait scheint ein bisschen besser zu mir (von der ‚sauberen Code‘ Sicht), da es nur eine Zeile Code ist .

+1

Ah, OK, und dann, weil es nur eine Funktion ist, wird die implizite Wartezeit warten, bis die Bedingung wahr ist. Vielen Dank! – Zarkonnen

+0

Implizite Wartezeit wartet NICHT auf eine Bedingung. Es wartet nur eine gewisse Zeit. Wenn Sie auf eine Bedingung warten möchten, verwenden Sie WebDriverWait als Aditi vorgeschlagen – Tarken

+0

@Tarken Ja und Nein. Mit dem angegebenen XPath wartet es auf die Bedingung (oder ein konfigurierbares Timeout). Es ist nur eine Frage des Geschmacks/Ihrer Bedürfnisse, ob Sie einen komplexen Oneliner mit etwas fortgeschrittenem XPath verwenden, oder ein "sauberes" 'Wait'. –

1

Sie können die integrierten Methoden von Webdriver verwenden, um explizit zu warten - siehe examples here.

Beachten Sie, dass es, wenn es möglich ist, besser ist, zu überprüfen, ob sich der Text in einem bestimmten Element befindet und nicht irgendwo. Überprüfen, ob es irgendwo ist, kann zu falschen positiven Ergebnissen führen (dh wenn jemand die gleiche Zeichenfolge irgendwo anders auf der Seite hinzufügt, werden Sie nicht mehr überprüfen, was Sie dachten, Sie wären).

+0

Das Beispiel in diesem Link sieht tatsächlich komplexer als das, was ich geschrieben habe. (Mach dir keine Sorgen über die dumme Natur der Bedingung, es ist nur ein zufälliges Beispiel.) – Zarkonnen

0

ein Objekt WebDriverWait Klasse erstellen

WebDriverWait wait = new WebDriverWait(driver, 500); 
wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//*[contains(text(),'please choose another']"))); 
Verwandte Themen