Firefox-WebDriver hängt warten auf das laden der Seite,
manchmal in meinem test durchgeführt, mit Selen 2.41 getestet und mit Firefox 28 die Ausführung hängt warten auf die Seite zu laden.
Dies ist die Bedingung warten:
int time = 30;
WebDriverWait wait = new WebDriverWait(webDriver, time);
ExpectedCondition<Boolean> pageLoadCondition = new ExpectedCondition<Boolean>() {
public Boolean apply(WebDriver driver) {
return ((JavascriptExecutor)driver).executeScript("return document.readyState").equals("complete");
}
};
wait.until(pageLoadCondition);
Ist es angenommen, dass nach 30 Sekunden diese Methode wirft eine TimeoutException, aber das ist es nicht, hängt manchmal für immer.
Das ist der stacktrace produziert in diesen Situationen:
java.lang.Thread.Zustand: LAUFFÄHIG auf
java.net.SocketInputStream.socketRead0(Native Method) at
java.net.SocketInputStream.read(Unknown Source) at
org.apache.http.impl.io.AbstractSessionInputBuffer.fillBuffer(AbstractSessionInputBuffer.java:160)
bei
org.apache.http.impl.io.SocketInputBuffer.fillBuffer(SocketInputBuffer.java:84)
bei
org.apache.http.impl.io.AbstractSessionInputBuffer.readLine(AbstractSessionInputBuffer.java:273)
bei
org.apache.http.impl.conn.LoggingSessionInputBuffer.readLine(LoggingSessionInputBuffer.java:116)
bei
org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:140)
bei
org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:57)
bei
org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:260)
bei
org.apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader(AbstractHttpClientConnection.java:283)
bei
org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader(DefaultClientConnection.java:251)
bei
org.apache.http.impl.conn.AbstractClientConnAdapter.receiveResponseHeader(AbstractClientConnAdapter.java:223)
bei
org.apache.http.Protokoll.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:271)
bei
org.apache.http.Protokoll.HttpRequestExecutor.execute(HttpRequestExecutor.java:123)
bei
org.apache.http.impl.client.DefaultRequestDirector.tryExecute(DefaultRequestDirector.java:682)
bei
org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:486)
bei
org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:863)
bei
org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:72)
bei
org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:57)
bei
org.openqa.Selen.remote.HttpCommandExecutor.fallBackExecute(HttpCommandExecutor.java:322)
bei
org.openqa.Selen.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:301)
bei
org.openqa.selenium.firefox.internal.NewProfileExtensionConnection.execute(NewProfileExtensionConnection.java:165)
bei
org.openqa.Selen.firefox.FirefoxDriver$LazyCommandExecutor.execute(FirefoxDriver.java:362)
bei
org.openqa.Selen.remote.RemoteWebDriver.execute(RemoteWebDriver.java:568)
bei
org.openqa.Selen.remote.RemoteWebDriver.executeScript(RemoteWebDriver.java:504)
bei
es.tao.commonservices.Selen.tests.TAORobotWebDriver$1.gelten(TAORobotWebDriver.java:6227)
bei
es.tao.commonservices.Selen.tests.TAORobotWebDriver$1.gelten(TAORobotWebDriver.java:1)
bei
org.openqa.Selen.Unterstützung.ui.FluentWait.bis(FluentWait.java:208)
bei
es.tao.commonservices.Selen.tests.TAORobotWebDriver.waitToLoad(TAORobotWebDriver.java:6230)
bei
es.tao.commonservices.Selen.tests.TAORobotWebDriver.handleWaitToLoad(TAORobotWebDriver.java:6110)
Habe ich diese Einstellung bei firefox-Profil, aber es funktioniert immer noch nicht:
ffProfile = new FirefoxProfile();
ffProfile.setPreference("webdriver.load.strategy", "unstable");
Haben auch diese Eigenschaften legen:
webDriver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS);
webDriver.manage().timeouts().setScriptTimeout(30, TimeUnit.SECONDS);
- Wären Sie offen für eine Lösung mit einem normalen driver.get(url) aber dann nutzt eine FLuentWait, bis ein erwartetes element geladen ist?
- Hi gorbysbm, ich entwickle eine Art von Roboter, die tests der Anwendung. Manchmal habe ich nicht "der" element auf sich warten, also muss ich noch warten, bis das Dokument bereit ist. Eh, warten auf ein element erscheint dieser Fehler passiert, weil ich habe es versucht. Danke!
- Nur eine Theorie, würde aber nicht mit FluentWait zu warten, bis der "body" - element der Seite zu laden, das gleiche erreichen? Ich sehe nicht, fluentWait in Ihrem code sollte wie folgt Aussehen: stackoverflow.com/questions/12041013/... . Warum nicht Sie versuchen, loszuwerden, die Javascript-code und sehen, ob fluentWait arbeiten
- Ich habe das gleiche problem mit Selen 2,42 und Firefox 28. Firefox-Statusleiste wird sagen: "die Übertragung von Daten von XXX..." für immer und nie wieder die Kontrolle zu Selen. In der Konsole, das Dokument.readyState bleibt fest auf "laden".
- ich Stand vor ähnlichen Problem und es behoben durch ändern der wait-Methode. Aber in meinem Fall das gleiche java-script warten verwendet wurde an zu vielen stellen so einbauen, dass war ein großes Risiko für mich. Also änderte ich die java-script-warten-Methode, bei der nur die Stelle wo der code war tatsächlich hängen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Möchten Sie vielleicht, um zu versuchen, Firefox 27.01. Ich habe ein Upgrade auf Firefox 28.0 und es schien zu brechen einige tests, die ich Tat, mit watir-webdriver. Ich ging zurück zum 27.01 und die tests nochmal ran(wenn Sie zurück download das ganze Paket installieren, da das setup nur scheint das nicht zu lassen, schalten Sie auto-update an, damit es aktualisiert sich selbst auf 28,0).
Die versagt wurden, mit hover und find_element.
Fand einen ungelösten bug: https://code.google.com/p/selenium/issues/detail?id=6955 - wenn du kannst, bitte geben Sie einen Testfall, in Erster Linie eine reduzierte host-Seite mit minimal-Skripte, wo das problem noch Auftritt, so kann es wiederholt werden zuverlässig und zurückgeführt.
Manchmal Frage ich mich, ob Google eigene tools an alle.... Sie sollten in bug, dass vor Ewigkeiten wenn man bedenkt, wie riesig dieses Unternehmen ist.