use*_*875 6 java google-chrome selenium-chromedriver selenium-webdriver
在我的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;
}
}
Run Code Online (Sandbox Code Playgroud)
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
连接到目标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 Capabilities [{applicationCacheEnabled = false,rotating = false,mobileEmulationEnabled = false,chrome = {userDataDir =/tmp/.com.google.Chrome.rgDfCi},takesHeapSnapshot = true,databaseEnabled = false,handlesAlerts = true,hasTouchScreen = false,version = 45.0.2454.101,platfor m = LINUX,browserConnectionEnabled = false,nativeSvents = true,locationStextEnabled = true,webStorageEnabled = true,browserName = chrome,takesScreenshot = true,javascriptEnabled = true,cssSelectorsEnabled = true}]会话ID:a97aeb9a53ddd77e8edfac64019cc599 at sun.reflect. sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)中的NativeConstructorAccessorImpl.newInstance0(Native Method)位于sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45),位于java.lang.reflect.Constructor.newInstance(构造函数. java:422)org.openqa.selenium.remote.Arote.Error.Derler.RetponseFailed(ErrorHandler.java:158)org.openqa.selenium.remote的org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:206) .rmoteWebDriver.execute(RemoteWebDriver.java:647)org.openqa.selenium.remote.RemoteWebDriver.get(RemoteWebDriver.java:311)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)
您的代码运行良好。可能是您使用了过时的Chrome驱动程序。我建议使用最新版的chrome驱动程序。
这个错误信息...
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
Run Code Online (Sandbox Code Playgroud)
...意味着ChromeDriver无法启动/生成新的浏览上下文,即Chrome 浏览器会话。
您的主要问题是您使用的二进制文件版本之间不兼容,如下所示:
因此JDK v8u60、Selenium Client v'2.48.2、ChromeDriver v2.20和Chrome 浏览器 v45.0之间存在明显的不匹配
确保这件事:
@Test以非 root用户身份执行。driver.quit()始终在方法内调用tearDown(){}以优雅地关闭和销毁WebDriver和Web Client实例。| 归档时间: |
|
| 查看次数: |
11572 次 |
| 最近记录: |