org.openqa.selenium.WebDriverException: unknown error: Chrome failed to start: crashed using ChromeDriver Selenium in Jenkins on Ubuntu 18.04

org.openqa.selenium.WebDriverException: unknown error: Chrome failed to start: crashed using ChromeDriver Selenium in Jenkins on Ubuntu 18.04

Chrome 在我的 Jenkins 上不稳定。当我 运行 构建 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. Chrome驱动程序 81.0.4044.69

  4. Google Chrome 81.0.4044.129

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

这个错误信息...

...暗示 ChromeDriver 无法 initiate/spawn 新的 Browsing ContextChrome 浏览器 会话。


深潜

查看您提供的错误堆栈跟踪的快照,尽管您提到使用 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 希望您在 每个系统的默认位置,如下图所示:

1对于 Linux 系统,Chrome 驱动程序期望 /usr/bin/google-chrome 是指向实际 Chrome 二进制文件的符号链接.

You can find a detailed discussion in


解决方案

如果您在非标准位置使用 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
    • Chrome驱动程序 已更新至当前 ChromeDriver v81.0.4044.138 级别。
    • Chrome 已更新为当前 Chrome 版本 81.0.4044.138 级别。 (根据 ChromeDriver v80.0 release notes
    • 通过 IDE重建你的项目只需要依赖。
    • 非 root 用户身份执行您的 @Test
    • 始终在 tearDown(){} 方法中调用 driver.quit() 以优雅地关闭和销毁 WebDriverWeb Client 实例.

参考资料

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