在我的Java项目中,我使用Selenium进行Web自动化。我正在使用chromedriver v2.20可执行文件。第一个“ChromeDriverService”已初始化,用于创建ChromeDriver,例如“新的ChromeDriver(服务,功能);”。我还使用BrowserMobProxy捕获所有Web请求。 在我的测试中,我会多次导航到一些URL,每个导航驱动程序隐式等待几秒后,然后轮询结果。 但是在执行时它会给我超时异常。
在我的研究中,我遇到了对我不起作用的解决方案:
任何人都可以告诉我为什么会出现这个错误?如何处理?
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:
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);
}
}
}
连接到目标VM,地址:'127.0.0.1:57086',传输:'socket' 在端口13817上启动ChromeDriver 2.20.353124(035346203162d32c80f1dce587c8154a1efa0c3b) 仅允许本地连接。 SLF4J:无法加载类“org.slf4j.impl.StaticLoggerBinder”。 SLF4J:默认为无操作(NOP)记录器实现 SLF4J:有关详细信息,请参阅http://www.slf4j.org/codes.html#StaticLoggerBinder。 启用矢量粉碎保护。 启用矢量粉碎保护。 [723.497] [严重]:超时从渲染器接收消息:600.000 [1323.497] [严重]:从渲染器接收消息超时:600.000
例外:
org.openqa.selenium.WebDriverException:未知错误:不能 从超时确定加载状态:超时接收消息 来自渲染器:600.000(会话信息:chrome = 45.0.2454.101)
(司机信息:chromedriver = 2.20.353124 (035346203162d32c80f1dce587c8154a1efa0c3b),平台= Linux的 3.19.0-28-generic x86_64)(警告:服务器未提供任何堆栈跟踪信息)命令持续时间或超时:1200.01秒 构建信息:版本:'2.48.2',修订版: '41bccdd10cf2c0560f637404c2d96164b67d9d67',时间:'2015-10-09 13:08:06'系统信息:主持人:'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'驱动程序信息: org.openqa.selenium.chrome.ChromeDriver功能 [{applicationCacheEnabled = false,rotate = false, mobileEmulationEnabled =假, 铬= {userDataDir = / TMP / .com.google.Chrome.rgDfCi}, takesHeapSnapshot = true,databaseEnabled = false,handlesAlerts = true, hasTouchScreen = false,版本= 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(本机方法) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.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) 在 org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:647) 在 org.openqa.selenium.remote.RemoteWebDriver.get(RemoteWebDriver.java:311) 在 org.openqa.selenium.remote.RemoteWebDriver $ RemoteNavigation.to(RemoteWebDriver.java:927) 在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)
答案 0 :(得分:5)
您的代码运行正常。你可能会使用过时的镀铬驱动程序。我建议使用最新的chrome驱动程序。
答案 1 :(得分:0)
此错误消息...
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
...表示 ChromeDriver 无法启动/产生新的浏览上下文,即 Chrome浏览器会话。
您的主要问题是所使用的二进制版本之间的不兼容性,如下所示:
因此 JDK v8u60 , Selenium Client v'2.48.2 , ChromeDriver v2.20 和之间存在明显的不匹配> Chrome浏览器v45.0
确保:
@Test
。driver.quit()
方法内调用tearDown(){}
,以优雅地关闭和销毁 WebDriver 和 Web Client 实例。