Selen: Warten auf ein element verschwinden
Stellte ich mit einer schwierigen Aufgabe. Ich ziemlich neu bin, Selen und immer noch durch die Funktionalitäten des Wartens für Elemente und dergleichen.
Habe ich zu manipulieren, um Daten auf eine website, und dann gehen Sie zu einem anderen. Problem: die manipulation ruft ein Skript, das macht ein wenig "Sparen..." - label erscheinen, während die manipulierten Daten werden im hintergrund verarbeitet. Ich muss warten, bis ich gehen, um die nächste Webseite.
Also hier ist es:
Wie kann ich warten und element zu VERSCHWINDEN? Sache ist: Er ist immer in der DOM -, sondern nur sichtbar gemacht, die von einigen Skript (ich nehme an, siehe Bild unten).
Dies ist, was ich versucht aber es funktioniert einfach nicht - es gibt keine Wartezeiten, Selen nur gehen, um den nächsten Schritt (und bekommt stecken, mit einer Warnung und fragt mich, ob ich will, zu verlassen, oder auf der Seite bleiben, weil der "speichern...").
private By savingLableLocator = By.id("lblOrderHeaderSaving");
public boolean waitForSavingDone(By webelementLocator, Integer seconds){
WebDriverWait wait = new WebDriverWait(driver, seconds);
Boolean element = wait.until(ExpectedConditions.invisibilityOfElementLocated(webelementLocator));
return element;
}
UPDATE /LÖSUNG:
Kam ich mit der folgenden Lösung: ich baute meine eigene Methode. Grundsätzlich prüft in einer Schleife für die CssValue zu ändern.
dem Schleifen überprüft werden, für eine gewisse Zeit für die CSSVALUE "Anzeige" gehen von "block" auf einen anderen Staat.
public void waitForSavingOrderHeaderDone(Integer _seconds){
WebElement savingLbl = driver.findElement(By.id("lblOrderHeaderSaving"));
for (int second = 0;; second++) {
if (second >= _seconds)
System.out.println("Waiting for changes to be saved...");
try {
if (!("block".equals(savingLbl.getCssValue("display"))))
break;
} catch (Exception e) {
}
}
Google wird viele andere Lösungen zur Verfügung.
danke, aber die genannten Lösungen nicht den trick tun. kam mit meinem eigenen "warte-Methode".
InformationsquelleAutor Christoph Zabinski | 2014-07-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie warten, für ein WebElement zu werfen StaleElementReferenceException wie diese:
So würde man in der WebElement Sie warten wollen, und die maximale Anzahl von Sekunden, die Sie warten wollen.
InformationsquelleAutor TheFreddyKilo
Ich bin mir nicht sicher, aber Sie können versuchen, so etwas wie dieses 🙂
InformationsquelleAutor Pierre-luc S.
Webdriver aufgebaut hat, warten die Funktionalität, die Sie gerade brauchen, um zu bauen in dem Zustand warten.
Wenn Sie den Vorschlag (die zweite Anweisung
WebElement
...) @nguyen-vu-hoang, macht etwas, es wird funktionieren:WebElement foo = wait.until(ExpectedConditions.invisibilityOfElementLocated(By.id("lblOrderHeaderSaving")));
InformationsquelleAutor Nguyen Vu Hoang
Dieser arbeitet mit Selen 2.4.0. verwenden Sie die Unsichtbarkeit mehtod, um es zu finden.
InformationsquelleAutor 1-14x0r
Ich verwendet folgende C# - code um dies zu umgehen, können Sie es konvertieren, um Java -
InformationsquelleAutor Abhinav Saxena
Können Sie auch versuchen zu warten, für die ajax-Aufrufe zu vervollständigen. Ich habe diese verwendet werden, um zu überprüfen, wenn das laden der Seite abgeschlossen ist und alle Elemente sichtbar sind.
Hier ist der code - https://stackoverflow.com/a/46640938/4418897
InformationsquelleAutor Santosh Pillai
Könnten Sie mithilfe von XPath-und WebDriverWait um zu überprüfen, ob
display: none
im style-Attribut eines Elements. Hier ist ein Beispiel:InformationsquelleAutor Hendrik