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.
InformationsquelleAutor vbail | 2014-04-08
Schreibe einen Kommentar