selenium - Firefox WebDriver 挂起等待页面加载

标签 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(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 配置文件设置了此首选项,但它仍然无法正常工作:
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)。

失败是使用悬停和 find_element。

关于selenium - Firefox WebDriver 挂起等待页面加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22933913/

相关文章:

Selenium WebDriverException : Expected 'id' mouse to be mapped to InputState whose subtype is undefined, 得到:pointerMove

python - 将 SameSite Chrome 标志传递到 Selenium 远程服务器

Python Chromedriver 使用浏览器打开命令提示符

selenium - Robot Framework 验证打开了一个新的浏览器选项卡

selenium - Mozilla Firefox 68.2.0esr 浏览器在使用 GeckoDriver 和 Selenium 时崩溃

java - 以编程方式设置 Selenium 代理

testing - Selenium IDE 测试所有链接

java - 如何在 selenium 的 select2 下拉列表中选择动态值

java - 原因: actual argument Class<ie_home_com> cannot be converted to Class<?通过方法调用转换扩展了TestCase>

java - 无法点击元素 - Selenium WebDriver