【问题标题】:org.openqa.selenium.WebDriverException: unknown error: Chrome failed to start: crashed using ChromeDriver Selenium in Jenkins on Ubuntu 18.04org.openqa.selenium.WebDriverException:未知错误:Chrome 无法启动:在 Ubuntu 18.04 上的 Jenkins 中使用 ChromeDriver Selenium 崩溃
【发布时间】:2020-08-19 19:05:33
【问题描述】:

Chrome 在我的 Jenkins 上不稳定。当我运行 build 5 次时,它运行 1 - 2 次成功,另外 3 次出现上述错误。

错误快照:

Chrome 代码:

ChromeOptions options = new ChromeOptions();
System.setProperty("webdriver.chrome.driver","/usr/local/bin/chromedriver");
options.addArguments("--headless");
options.addArguments("--no-sandbox");
options.addArguments("--disable-dev-shm-usage");
driver = new ChromeDriver(options);
driver.get("https://mywebsite.com");
     

我已经采取了一些步骤:

  1. 为google chrome和chrome驱动提供777权限

  2. 设置:在构建之前启动 Xvfb,并在 Jenkins 构建设置中将其关闭为 True

  3. ChromeDriver 81.0.4044.69

  4. 谷歌浏览器 81.0.4044.129

  5. Ubuntu 18.04.4 LTS(GNU/Linux 4.15.0-99-generic x86_64)

【问题讨论】:

  • 你执行并行测试吗?如果是的话有多少。您是否尝试过使用 --disable-gpu 标志?
  • 是的,我做到了。 @Infern0

标签: java google-chrome jenkins selenium-webdriver ubuntu-18.04


【解决方案1】:

此错误消息...

...暗示 ChromeDriver 无法启动/生成新的浏览上下文,即 Chrome 浏览器 会话。


深潜

查看您提供的错误堆栈跟踪的快照,尽管您提到使用 ChromeDriver 81.0.4044.69Google Chrome 81.0.4044.129,但似乎仍然存在您使用的不同二进制文件的版本不匹配,可能 Chrome 浏览器未安装在系统内的默认位置或由于 JDK 不匹配。另外,ChromeDriver 81.0.4044.69 (2020-03-17) 有点不稳定,被ChromeDriver 81.0.4044.138 (2020-05-05)取代了

但是,服务器即 ChromeDriver 希望您将 Chrome 安装在每个系统的 默认位置,如下图所示:

1对于 Linux 系统,ChromeDriver 期望 /usr/bin/google-chrome 成为实际 Chrome 二进制文件的符号链接。

您可以在What is default location of ChromeDriver and for installing Chrome on Windows找到详细讨论


解决方案

如果您在非标准位置使用 Chrome 可执行文件,则必须覆盖 Chrome 二进制位置,如下所示:

  • 基于代码的解决方案:

    System.setProperty("webdriver.chrome.driver", "/path/to/chromedriver");
    ChromeOptions options = new ChromeOptions();
    options.setBinary('/usr/bin/google-chrome');    //chrome binary location
    options.addArguments("--headless");
    options.addArguments("--no-sandbox");
    options.addArguments("--disable-dev-shm-usage");
    WebDriver driver = new ChromeDriver(options);
    driver.get("https://www.google.com/");
    //execute the remaining steps
    driver.quit();
    
  • 其他注意事项 - 确保以下几点:

    • JDK 升级到当前级别JDK 8u251
    • Selenium 升级到当前级别 Version 3.141.59
    • ChromeDriver 已更新到当前的ChromeDriver v81.0.4044.138 级别。
    • Chrome 已更新至当前 Chrome 版本 81.0.4044.138 级别。 (根据ChromeDriver v80.0 release notes
    • 清理你的项目工作区通过你的IDE重建你的项目只需要依赖。
    • 非root用户身份执行@Test
    • 始终在 tearDown(){} 方法中调用 driver.quit() 以优雅地关闭和销毁 WebDriverWeb Client 实例。

参考文献

您可以在以下位置找到一些相关讨论:

【讨论】:

  • 确实是详细的回答。我仍然不确定我做错了什么,但是在遵循此操作并重新安装一切正常之后。
最近更新 更多