org.openqa.selenium.WebDriverException:未知错误:Chrome 无法启动:在 Ubuntu 18.04 上的 Jenkins 中使用 ChromeDriver Selenium 崩溃

Hel*_*nds 6 java google-chrome jenkins selenium-webdriver ubuntu-18.04

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");
     
Run Code Online (Sandbox Code Playgroud)

我已经采取了一些步骤:

  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)

Deb*_*anB 4

这个错误信息...

快照

...意味着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安装在每个系统的默认位置,如下图所示:

Chrome_binary_expected_location

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

您可以在ChromeDriver 的默认位置是什么以及在 Windows 上安装 Chrome中找到详细的讨论


解决方案

如果您在非标准位置使用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();
    
    Run Code Online (Sandbox Code Playgroud)
  • 其他注意事项 - 确保以下事项:

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

参考

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