java - org.openqa.selenium.WebDriverException:等待驱动程序服务器以 Selenium 和 Java 启动时超时
问题描述
我已经尝试了 Stackoverflow 主题中的所有内容。我通过 jenkins 在远程从站上运行了 java selenium 测试。荒谬的事情是第一次测试总是运行并且浏览器打开,所有其他测试都给我“等待驱动程序服务器启动超时”。
public WebDriver startChrome() {
System.setProperty("java.net.preferIPv4Stack", "true");
System.setProperty("webdriver.chrome.driver", "C:\\chromedriver.exe");
ChromeOptions chromeOptions = new ChromeOptions();
Map<String, Object> prefs = new HashMap<String, Object>();
prefs.put("credentials_enable_service", false);
prefs.put("profile.password_manager_enabled", false);
chromeOptions.addArguments("--no-sandbox");
chromeOptions.addArguments("--disable-dev-shm-usage");
chromeOptions.addArguments("--aggressive-cache-discard");
chromeOptions.addArguments("--disable-cache");
chromeOptions.addArguments("--disable-application-cache");
chromeOptions.addArguments("--disable-offline-load-stale-cache");
chromeOptions.addArguments("--disk-cache-size=0");
chromeOptions.addArguments("--dns-prefetch-disable");
chromeOptions.addArguments("--no-proxy-server");
chromeOptions.addArguments("--log-level=3");
chromeOptions.addArguments("--silent");
chromeOptions.addArguments("--disable-browser-side-navigation");
chromeOptions.setPageLoadStrategy(PageLoadStrategy.NORMAL);
chromeOptions.addArguments("-disable-cache");
chromeOptions.addArguments("-disable-extensions");
chromeOptions.addArguments("--incognito");
chromeOptions.addArguments("start-maximized");
//chromeOptions.setExperimentalOption("useAutomationExtension", false);
ChromeDriverService chromeDriverService = ChromeDriverService.createDefaultService();
port = chromeDriverService.getUrl().getPort();
return new ChromeDriver(chromeDriverService, chromeOptions);
}
错误:
Caused by: org.openqa.selenium.WebDriverException: Timed out waiting for driver server to start.
Build info: version: '4.0.0-alpha-7', revision: 'de8579b6d5'
System info: host: 'ISTDTSTYNMD04V', ip: '10.52.253.54', os.name: 'Windows Server 2016', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_271'
Driver info: driver.version: unknown
at org.openqa.selenium.remote.service.DriverService.waitUntilAvailable(DriverService.java:231)
at org.openqa.selenium.remote.service.DriverService.lambda$start$0(DriverService.java:193)
at java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1604)
at java.util.concurrent.CompletableFuture$AsyncSupply.exec(CompletableFuture.java:1596)
at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1067)
at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1703)
at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:172)
Caused by: org.openqa.selenium.net.UrlChecker$TimeoutException: Timed out waiting for [http://localhost:35592/status] to be available after 20000 ms
at org.openqa.selenium.net.UrlChecker.waitUntilAvailable(UrlChecker.java:90)
at org.openqa.selenium.remote.service.DriverService.waitUntilAvailable(DriverService.java:227)
... 7 more
Caused by: java.util.concurrent.TimeoutException
at java.util.concurrent.FutureTask.get(FutureTask.java:205)
at org.openqa.selenium.net.UrlChecker.waitUntilAvailable(UrlChecker.java:88)
... 8 more
到目前为止我尝试过的所有解决方案:
- 更新 Java 1_8_271
- 更新硒 4
- 更新 ChromeDriver 87
- 使用 rawcap 检查 localhost 流量
- 检查 etc/hosts 中的 localhost dns 定义
- 更新 Chrome 87
- 设置代理
- 检查端口可用性
- 检查驱动路径
- 在创建之前杀死所有 chrome 和驱动程序任务(唯一有效的解决方案,但不适用于并行测试)
- 检查 localhost url 和端口可通过 chrome -> http 200 访问
当我尝试通过代码驱动程序中的 java urlconnection 创建函数 catch 块)到达 url 和端口时,它给了我连接重置但在 chrome 中它给了 200。
所有帮助将不胜感激。
此致
解决方案
此错误消息...
Caused by: org.openqa.selenium.WebDriverException: Timed out waiting for driver server to start.
Build info: version: '4.0.0-alpha-7', revision: 'de8579b6d5'
System info: host: 'ISTDTSTYNMD04V', ip: '10.52.253.54', os.name: 'Windows Server 2016', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_271'
Driver info: driver.version: unknown
...意味着ChromeDriver无法启动/产生新的浏览上下文,即Chrome 浏览器会话。
有关您的用例的更多信息将有助于我们以更好的方式分析错误。但是,首先您只能使用一个参数start-maximized
并删除所有其他可以帮助您入门的参数。因此,您的有效代码块将是:
public WebDriver startChrome() {
System.setProperty("webdriver.chrome.driver", "C:\\chromedriver.exe");
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.addArguments("start-maximized");
ChromeDriverService chromeDriverService = ChromeDriverService.createDefaultService();
return new ChromeDriver(chromeDriverService, chromeOptions);
}
额外考虑
确保这件事:
- JDK升级到当前级别JDK 8u271。
- Selenium升级到当前发布的版本 3.141.59。
- ChromeDriver已更新到当前的ChromeDriver v87.0级别。
- Chrome已更新到当前的Chrome 版本 87.0级别。(根据ChromeDriver v87.0 发行说明)。
- 如果您的基本Web 客户端版本太旧,请卸载它并安装最新的 GA 和已发布版本的Web 客户端。
- 重新启动系统。
@Test
以非 root用户身份执行。- 始终
driver.quit()
在tearDown(){}
方法内调用以优雅地关闭和销毁WebDriver和Web 客户端实例。
参考
您可以在以下位置找到一些相关的详细讨论:
推荐阅读
- jquery - 使用 Fullpage.js 当部分可见时我应该使用哪种方法来触发 jquery 动画?
- c# - 无法从 System.Collections.Generic.List 转换
到 System.Collections.Generic.IEnumerable - java - 如何以root身份运行java命令?
- firebase - Firebase 云在一个功能中处理多个事务?
- swift - SKRenderer 未在 MTKView 中渲染 SKShapeNode 的 alpha 通道
- sql - Vertica - 可以与 Group by 联合吗?
- javascript - 如何让 emailjs 返回成功消息?
- javascript - 不需要的括号不断从我的函数返回(JavaScript/html)
- javascript - 将视频从数据库嵌入网站
- razor - 带有 Razor + vue + webpack 的 asp.net-core 2.1 在非 spa 多页应用程序上