Firefox WebDriver挂起,等待页面加载 [英] Firefox WebDriver hangs waiting for page to load
问题描述
有时在我的测试中,使用Selenium 2.41完成并在Firefox 28中进行了测试,执行挂起,等待页面加载.
sometimes in my test done with Selenium 2.41 and tested with Firefox 28 the execution hangs waiting for page to load.
这是等待条件:
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,但并非如此,有时会永远挂起. 这是在以下情况下产生的堆栈跟踪:
It's supposed that after 30 seconds this method will throw a TimeoutException, but it's not, sometimes hangs forever. This is the stacktrace produced in these situations:
java.lang.Thread.State:在RUNNABLE 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)
java.lang.Thread.State: RUNNABLE at java.net.SocketInputStream.socketRead0(Native Method) at java.net.SocketInputStream.read(Unknown Source) at org.apache.http.impl.io.AbstractSessionInputBuffer.fillBuffer(AbstractSessionInputBuffer.java:160) at org.apache.http.impl.io.SocketInputBuffer.fillBuffer(SocketInputBuffer.java:84) at org.apache.http.impl.io.AbstractSessionInputBuffer.readLine(AbstractSessionInputBuffer.java:273) at org.apache.http.impl.conn.LoggingSessionInputBuffer.readLine(LoggingSessionInputBuffer.java:116) at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:140) at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:57) at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:260) at org.apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader(AbstractHttpClientConnection.java:283) at org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader(DefaultClientConnection.java:251) at org.apache.http.impl.conn.AbstractClientConnAdapter.receiveResponseHeader(AbstractClientConnAdapter.java:223) at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:271) at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:123) at org.apache.http.impl.client.DefaultRequestDirector.tryExecute(DefaultRequestDirector.java:682) at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:486) at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:863) at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:72) at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:57) at org.openqa.selenium.remote.HttpCommandExecutor.fallBackExecute(HttpCommandExecutor.java:322) at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:301) at org.openqa.selenium.firefox.internal.NewProfileExtensionConnection.execute(NewProfileExtensionConnection.java:165) at org.openqa.selenium.firefox.FirefoxDriver$LazyCommandExecutor.execute(FirefoxDriver.java:362) at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:568) at org.openqa.selenium.remote.RemoteWebDriver.executeScript(RemoteWebDriver.java:504) at es.tao.commonservices.selenium.tests.TAORobotWebDriver$1.apply(TAORobotWebDriver.java:6227) at es.tao.commonservices.selenium.tests.TAORobotWebDriver$1.apply(TAORobotWebDriver.java:1) at org.openqa.selenium.support.ui.FluentWait.until(FluentWait.java:208) at es.tao.commonservices.selenium.tests.TAORobotWebDriver.waitToLoad(TAORobotWebDriver.java:6230) at es.tao.commonservices.selenium.tests.TAORobotWebDriver.handleWaitToLoad(TAORobotWebDriver.java:6110)
我已经为firefox配置文件设置了此首选项,但仍然无法正常工作:
I have set this preference for firefox profile, but it's still not working:
ffProfile = new FirefoxProfile();
ffProfile.setPreference("webdriver.load.strategy", "unstable");
还设置了以下属性:
webDriver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS);
webDriver.manage().timeouts().setScriptTimeout(30, TimeUnit.SECONDS);
推荐答案
您可能要尝试使用Firefox 27.01.我升级到Firefox 28.0,它似乎破坏了我使用watir-webdriver所做的一些测试.我回到27.01,然后再次运行测试(如果您回去下载整个安装程序包,仅作为安装程序,似乎不允许您关闭自动更新功能,因此它将自身更新为28.0).
You may want to try Firefox 27.01. I upgraded to Firefox 28.0 and it seemed to break some tests I was doing using watir-webdriver. I went back to 27.01 and the tests ran again(if you go back download the whole install package as the setup only, does not seem to let you turn off auto-update so it updates itself to 28.0).
失败是使用悬停和find_element.
The fails were using hover and find_element.
这篇关于Firefox WebDriver挂起,等待页面加载的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!