Firefox WebDriver挂起等待页面加载

时间:2014-04-08 10:12:40

标签: selenium selenium-webdriver selenium-firefoxdriver

有时在我使用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,但它不会,有时会永远挂起。 这是在这些情况下产生的堆栈跟踪:

  

java.lang.Thread.State:RUNNABLE at   java.net.SocketInputStream.socketRead0(Native Method)at   java.net.SocketInputStream.read(未知来源)at   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.适用(TAORobotWebDriver.java:6227)     在   es.tao.commonservices.selenium.tests.TAORobotWebDriver $ 1.适用(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);

2 个答案:

答案 0 :(得分:1)

您可能想尝试使用Firefox 27.01。我升级到Firefox 28.0,它似乎打破了我正在使用watir-webdriver进行的一些测试。我回到了27.01并且测试再次运行(如果你回去下载整个安装包只作为设置,似乎不能让你关闭自动更新,所以它自己更新到28.0)。

失败的是使用hover和find_element。

答案 1 :(得分:0)

发现一个未解决的错误:https://code.google.com/p/selenium/issues/detail?id=6955 - 如果可以,请提供一个测试用例,主要是一个简化的主页,其中包含最少的脚本,问题仍然存在,因此可以可靠地重复并追查。

有时我会质疑自己谷歌是否使用自己的工具......考虑到公司的规模有多大,他们应该在很久以前就遇到过这个问题。