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) org.apache.http.impl.io.SocketInputBuffer.fillBuffer(SocketInputBuffer.java:84) で org.apache.http.impl.io.AbstractSessionInputBuffer.readLine(AbstractSessionInputBuffer.java:273) で org.apache org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:140) の .http.impl.conn.LoggingSessionInputBuffer.readLine(LoggingSessionInputBuffer.java:116) org.apache.http.impl.conn.DefaultHttpResponseParser の.parseHead(DefaultHttpResponseParser.java:57) at 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 org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:271) の .conn.AbstractClientConnAdapter.receiveResponseHeader(AbstractClientConnAdapter.java:223) 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) 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) ) 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);