Firefox WebDriver зависает в ожидании загрузки страницы

иногда в моем тесте, выполненном с Selenium 2.41 и протестированном с Firefox 28, выполнение зависает, ожидая загрузки страницы.

Это условие ожидания:

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);

Предполагалось, что через 30 секунд этот метод будет вызывать исключение TimeoutException, но это не так, иногда зависает вечно. Это stacktrace, созданный в следующих ситуациях:

java.lang.Thread.State: RUNNABLE at java.net.SocketInputStream.socketRead0 (Нативный метод) в java.net.SocketInputStream.read(Неизвестный источник) в org.apache.http.impl.io.AbstractSessionInputBuffer.fillBuffer(AbstractSessionInputBuffer.java:160)   в org.apache.http.impl.io.SocketInputBuffer.fillBuffer(SocketInputBuffer.java:84)   в org.apache.http.impl.io.AbstractSessionInputBuffer.readLine(AbstractSessionInputBuffer.java:273)   в org.apache.http.impl.conn.LoggingSessionInputBuffer.readLine(LoggingSessionInputBuffer.java:116)   в org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:140)   в org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:57)   в org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:260)   в org.apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader(AbstractHttpClientConnection.java:283)   в org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader(DefaultClientConnection.java:251)   в org.apache.http.impl.conn.AbstractClientConnAdapter.receiveResponseHeader(AbstractClientConnAdapter.java:223)   в org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:271)   в org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:123)   в org.apache.http.impl.client.DefaultRequestDirector.tryExecute(DefaultRequestDirector.java:682)   в org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:486)   в org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:863)   в org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:72)   в org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:57)   в org.openqa.selenium.remote.HttpCommandExecutor.fallBackExecute(HttpCommandExecutor.java:322)   в org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:301)   в org.openqa.selenium.firefox.internal.NewProfileExtensionConnection.execute(NewProfileExtensionConnection.java:165)   в org.openqa.selenium.firefox.FirefoxDriver $LazyCommandExecutor.execute(FirefoxDriver.java:362)   в org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:568)   в org.openqa.selenium.remote.RemoteWebDriver.executeScript(RemoteWebDriver.java:504)   в es.tao.commonservices.selenium.tests.TAORobotWebDriver $1.Apply(TAORobotWebDriver.java:6227)   в es.tao.commonservices.selenium.tests.TAORobotWebDriver $1.Apply(TAORobotWebDriver.java:1)   в org.openqa.selenium.support.ui.FluentWait.until(FluentWait.java:208)   в es.tao.commonservices.selenium.tests.TAORobotWebDriver.waitToLoad(TAORobotWebDriver.java:6230)   в es.tao.commonservices.selenium.tests.TAORobotWebDriver.handleWaitToLoad(TAORobotWebDriver.java:6110)

Я задал это предпочтение для профиля Firefox, но он все еще не работает:

ffProfile = new FirefoxProfile();
ffProfile.setPreference("webdriver.load.strategy", "unstable");

Также задайте следующие свойства:

webDriver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS);
webDriver.manage().timeouts().setScriptTimeout(30, TimeUnit.SECONDS);

Ответ 1

Возможно, вы захотите попробовать Firefox 27.01. Я обновился до Firefox 28.0, и мне показалось, что некоторые тесты я использовал с помощью watir-webdriver. Я вернулся к 27.01, и тесты снова возобновились (если вы вернете загрузку всего пакета установки только в качестве настройки, похоже, вы не отключите автоматическое обновление, чтобы он обновлялся до 28.0).

Не удалось использовать hover и find_element.

Ответ 2

Обнаружена неразрешенная ошибка: https://code.google.com/p/selenium/issues/detail?id=6955 - если можете, просьба предоставить тестовый пример, в первую очередь уменьшенную страницу хозяина с минимальными сценариями, где проблема все еще возникает, поэтому ее можно повторить надежно и проследить.

Иногда я задаюсь вопросом, действительно ли Google использует свои собственные инструменты... они должны были столкнуться с этой ошибкой давным-давно, учитывая, насколько огромна эта компания.