Hallo, ich bin neu in Selenium
Selen StaleElementReferenceException
ich die Java library
verwende, habe bereits versucht, sowohl die Chrome
und die Firefox
Treiber.
Ich führe eine Schleife. Das Interessante daran ist, dass die Schleife manchmal 3, 2 Mal funktioniert und nicht immer in der gleichen Iteration fehlschlägt. Ich nehme an, dass es mit einer Art Race-Bedingung zu tun hat (wie die Seite warten, um zu laden). Wenn ich im Debug-Modus laufe, scheint es perfekt zu funktionieren.
Ich habe bereits Vorschläge aus anderen Antworten wie wait explicitly
und implicitly
versucht, aber immer noch nicht geholfen. Vielleicht, wenn Sie den Code sehen, können Sie mir eine Hand geben.
Dies geht in eine Schleife.
WebDriverWait wait = new WebDriverWait(driver,20);
WebElement searchResults = driver.findElement(new By.ById("searchresults"));
searchResults = searchResults.findElement(new By.ByClassName("table"));
wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.tagName("a")));
List<WebElement> list=searchResults.findElements(By.tagName("a"));
for(WebElement w: list) {
result.add(w.getAttribute("href")); //EXCEPTION HAPPENS ALWAYS HERE
}
SOLUTION
Die Lösung ist ein Gesamt Hack. Ich verstehe immer noch nicht, aber es macht den Job. Wenn jemand versteht warum, lass es mich wissen.
Ich verschiebe nur alle Wartezeiten und es funktioniert besser. Ich nahm auch den Vorschlag von @Cyril, um die Wiederholung neu zu laufen, wenn die Ausnahme entlang einiger Datenüberprüfungen geworfen wurde, um sicherzustellen, dass ich alles bekam, was ich wollte.
WebDriverWait wait = new WebDriverWait(driver,20);
wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(new By.ById("searchresults")));
wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(new By.ByClassName("table")));
wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.tagName("a")));
Vielen Dank für Ihre Antwort Ich nahm Ihren letzten Vorschlag. Ich hacke es irgendwie mit einigen anderen Änderungen (siehe oben). Ich bin nicht 100% glücklich, aber es ist der Job. – Altober