WebDriverException:未知错误:无法从超时确定加载状态:从渲染器接收消息超时:60 使用 Selenium 和 Java
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/34926866/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
WebDriverException: unknown error: cannot determine loading status from timeout: Timed out receiving message from renderer: 60 using Selenium and Java
提问by user2618875
In my Java project I am using Selenium for web automation. I am using chromedriver v2.20 executable. First "ChromeDriverService" is initialised and that is used to create ChromeDriver like, "new ChromeDriver(service, capabilities);". Also I used BrowserMobProxy to capture all web requests. In my test I navigate to some URLs multiple times, after each navigation driver implicitly waits for few seconds, then polls result. But while Execution it gives me timeout Exception.
在我的 Java 项目中,我使用 Selenium 进行 Web 自动化。我正在使用 chromedriver v2.20 可执行文件。首先初始化“ChromeDriverService”,用于创建 ChromeDriver,如“new ChromeDriver(service, capabilities);”。我还使用 BrowserMobProxy 来捕获所有 Web 请求。在我的测试中,我多次导航到一些 URL,在每个导航驱动程序隐式等待几秒钟后,然后轮询结果。但是在执行时它给了我超时异常。
In my research I came across solutions which are not working for me:
在我的研究中,我遇到了对我不起作用的解决方案:
- Instead of implicitlyWait use Thread.sleep
- Replace new RemoteWebDriver(service.getUrl(), capabilities); by new ChromeDriver(service, capabilities);
- After new ChromeDriver(...), wait for 1 sec using Thread.sleep(1000);
- 而不是隐式等待使用 Thread.sleep
- 替换新的 RemoteWebDriver(service.getUrl(), capabilities); 通过新的 ChromeDriver(服务,功能);
- 在 new ChromeDriver(...) 之后,使用 Thread.sleep(1000) 等待 1 秒;
Can anyone please tell me why this error occurs ? how to handle this ?
谁能告诉我为什么会出现这个错误?如何处理?
ShouldPostToServerTest.java:
ShouldPostToServerTest.java:
@Test
public void setTest() throws Exception {
for (int i = 0; i < 3; i++) {
nav();
poll();
}
}
private void nav() {
String[] navTo = {"http://www.bestbuy.com","http://www.amazon.com"};
for (int n = 0; n < 30 / navTo.length; n++) {
for (String url : navTo) {
chrome.navigateTo(url);
chrome.waitFor(5000);
}
}
}
private void poll() {
int pollInterval = 1000;
int remaining = 120 * 1000;
boolean found = false;
while (remaining > 0) {
if (found) // populateResult(), omitted for now.
break;
chrome.waitFor(pollInterval);
remaining -= pollInterval;
}
}
Chrome.java:
Chrome.java:
public void navigateTo(String url) {
if (driver == null)
return;
driver.navigate().to(url); // TimeOut
}
public void waitFor(long waitFor) {
long start = System.currentTimeMillis();
driver.manage().timeouts().implicitlyWait(waitFor, TimeUnit.MILLISECONDS);
long duration = System.currentTimeMillis() - start;
long remaining = waitFor - duration;
if (remaining > 0) {
try {
Thread.sleep(remaining);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}
Error stack trace:
错误堆栈跟踪:
Connected to the target VM, address: '127.0.0.1:57086', transport: 'socket'
Starting ChromeDriver 2.20.353124 (035346203162d32c80f1dce587c8154a1efa0c3b) on port 13817
Only local connections are allowed.
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Vector smash protection is enabled.
Vector smash protection is enabled.
[723.497][SEVERE]: Timed out receiving message from renderer: 600.000
[1323.497][SEVERE]: Timed out receiving message from renderer: 600.000
Exception:
例外:
org.openqa.selenium.WebDriverException: unknown error: cannot determine loading status from timeout: Timed out receiving message from renderer: 600.000 (Session info: chrome=45.0.2454.101)
(Driver info: chromedriver=2.20.353124 (035346203162d32c80f1dce587c8154a1efa0c3b),platform=Linux 3.19.0-28-generic x86_64) (WARNING: The server did not provide any stacktrace information) Command duration or timeout: 1200.01 seconds Build info: version: '2.48.2', revision: '41bccdd10cf2c0560f637404c2d96164b67d9d67', time: '2015-10-09 13:08:06' System info: host: 'yogesh-ubuntu', ip: '127.0.1.1', os.name: 'Linux', os.arch: 'amd64', os.version: '3.19.0-28-generic', java.version: '1.8.0_60' Driver info: org.openqa.selenium.chrome.ChromeDriver Capabilities [{applicationCacheEnabled=false, rotatable=false, mobileEmulationEnabled=false, chrome={userDataDir=/tmp/.com.google.Chrome.rgDfCi}, takesHeapSnapshot=true, databaseEnabled=false, handlesAlerts=true, hasTouchScreen=false, version=45.0.2454.101, platform=LINUX, browserConnectionEnabled=false, nativeEvents=true, acceptSslCerts=true, locationContextEnabled=true, webStorageEnabled=true, browserName=chrome, takesScreenshot=true, javascriptEnabled=true, cssSelectorsEnabled=true}] Session ID: a97aeb9a53ddd77e8edfac64019cc599 at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:422) at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:206) at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:158) at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:647) at org.openqa.selenium.remote.RemoteWebDriver.get(RemoteWebDriver.java:311) at org.openqa.selenium.remote.RemoteWebDriver$RemoteNavigation.to(RemoteWebDriver.java:927) at app.core.browsers.chrome.Chrome.navigateTo(Chrome.java:112) at app.core.extensions.tests.ShouldPostToServerTest.nav(ShouldPostToServerTest.java:58) at app.core.extensions.tests.ShouldPostToServerTest.setTest(ShouldPostToServerTest.java:49)
org.openqa.selenium.WebDriverException:未知错误:无法从超时确定加载状态:从渲染器接收消息超时:600.000(会话信息:chrome=45.0.2454.101)
(驱动信息:chromedriver=2.20.353124 (035346203162d32c80f1dce587c8154a1efa0c3b),platform=Linux 3.19.0-28-generic x86_64) (WARNING: The server did not provide command duration2 1 info. 2.48.2',修订版:'41bccdd10cf2c0560f637404c2d96164b67d9d67',时间:'2015-10-09 13:08:06' 系统信息:主机:'yogesh-ubuntu', 1.7'Linux1.1.1.0'Linux ', os.arch: 'amd64', os.version: '3.19.0-28-generic', java.version: '1.8.0_60' 驱动信息:org.openqa.selenium.chrome.ChromeDriver Capabilities [{applicationCacheEnabled=假,可旋转=假,mobileEmulationEnabled=假,铬={userDataDir=/tmp/.com.google.Chrome.rgDfCi},takesHeapSnapshot=true,databaseEnabled=false,handlesAlerts=true,hasTouchScreen=false,version=45.0.2454.101,platform=LINUX,browserConnectionEnabled=false,nativeEvents=true,acceptSslCerts=true,locationContextEnabled=true,webStorageEnabled=true,browserName=chrome,takesScreenshot=true,javascriptEnabled=true,cssSelectorsEnabled=true} ] 会话 ID:a97aeb9a53ddd77e8edfac64019cc599 at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.java:62) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(NativeMethod) lang.reflect.Constructor.newInstance(Constructor.java:422) 在 org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:206) 在 org.openqa.selenium.remote.ErrorHandler。throwIfResponseFailed(ErrorHandler.java:158) at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:647) at org.openqa.selenium.remote.RemoteWebDriver.get(RemoteWebDriver.java:31q1) at org. .selenium.remote.RemoteWebDriver$RemoteNavigation.to(RemoteWebDriver.java:927) at app.core.browsers.chrome.Chrome.navigateTo(Chrome.java:112) at app.core.extensions.tests.ShouldPostToServerTest.nav(ShouldPostToServerTest .java:58) 在 app.core.extensions.tests.ShouldPostToServerTest.setTest(ShouldPostToServerTest.java:49)927) at app.core.browsers.chrome.Chrome.navigateTo(Chrome.java:112) at app.core.extensions.tests.ShouldPostToServerTest.nav(ShouldPostToServerTest.java:58) at app.core.extensions.tests.ShouldPostToServerTest .setTest(ShouldPostToServerTest.java:49)927) at app.core.browsers.chrome.Chrome.navigateTo(Chrome.java:112) at app.core.extensions.tests.ShouldPostToServerTest.nav(ShouldPostToServerTest.java:58) at app.core.extensions.tests.ShouldPostToServerTest .setTest(ShouldPostToServerTest.java:49)
回答by pratapvaibhav19
Your code runs fine. Might be you using outdated chrome driver. I suggest to use latest exe of chrome driver.
您的代码运行良好。可能是您使用过时的 chrome 驱动程序。我建议使用最新的 chrome 驱动程序 exe。
回答by DebanjanB
This error message...
这个错误信息...
Connected to the target VM, address: '127.0.0.1:57086', transport: 'socket'
Starting ChromeDriver 2.20.353124 (035346203162d32c80f1dce587c8154a1efa0c3b) on port 13817
.
org.openqa.selenium.WebDriverException: unknown error: cannot
determine loading status from timeout: Timed out receiving message
from renderer: 600.000 (Session info: chrome=45.0.2454.101)
(Driver info: chromedriver=2.20.353124
(035346203162d32c80f1dce587c8154a1efa0c3b),platform=Linux 3.19.0-28-generic x86_64) (WARNING: The server did not provide any stacktrace information) Command duration or timeout: 1200.01 seconds
Build info: version: '2.48.2', revision: '41bccdd10cf2c0560f637404c2d96164b67d9d67', time: '2015-10-09 13:08:06' System info: host: 'yogesh-ubuntu', ip: '127.0.1.1', os.name: 'Linux', os.arch: 'amd64', os.version: '3.19.0-28-generic', java.version: '1.8.0_60' Driver info: org.openqa.selenium.chrome.ChromeDriver
...implies that the ChromeDriverwas unable to initiate/spawn a new Browsing Contexti.e. Chrome Browsersession.
...暗示ChromeDriver无法启动/生成新的浏览上下文,即Chrome 浏览器会话。
Your main issue is the incompatibilitybetween the version of the binaries you are using as follows:
您的主要问题是您使用的二进制文件版本之间的不兼容,如下所示:
- Though your chromedriver=2.20and chrome=45.0are compatable.
- But your JDK versionis 1.8.0_60which is pretty ancient.
- 尽管您的chromedriver=2.20和chrome=45.0是兼容的。
- 但是您的JDK 版本是1.8.0_60,这是非常古老的。
So there is a clear mismatch between JDK v8u60, Selenium Client v'2.48.2, ChromeDriver v2.20and the Chrome Browser v45.0
因此,JDK v8u60、Selenium Client v'2.48.2、ChromeDriver v2.20和Chrome Browser v45.0之间存在明显的不匹配
Solution
解决方案
Ensure that:
确保这件事:
- JDKis upgraded to current levels JDK 8u241.
- Seleniumis upgraded to current levels Version 3.141.59.
- ChromeDriveris updated to current ChromeDriver v80.0level.
- Chromeis updated to current Chrome Version 80.0level. (as per ChromeDriver v80.0 release notes)
- Cleanyour Project Workspacethrough your IDEand Rebuildyour project with required dependencies only.
- If your base Web Clientversion is too old, then uninstall it through and install a recent GA and released version of Web Client.
- Take a System Reboot.
- Execute your
@Test
as non-rootuser. - Always invoke
driver.quit()
withintearDown(){}
method to close & destroy the WebDriverand Web Clientinstances gracefully.
- JDK升级到当前级别JDK 8u241。
- Selenium升级到当前级别版本 3.141.59。
- ChromeDriver更新到当前ChromeDriver v80.0级别。
- Chrome已更新到当前的Chrome 版本 80.0级别。(根据ChromeDriver v80.0 发行说明)
- 清理你的项目工作,通过你的IDE和重建仅需要依赖你的项目。
- 如果您的基本Web 客户端版本太旧,请通过卸载它并安装最新的 GA 和发布版本的Web 客户端。
- 进行系统重启。
@Test
以非 root用户身份执行。- 始终
driver.quit()
在tearDown(){}
方法内调用以优雅地关闭和销毁WebDriver和Web Client实例。