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");
我已经采取的一些步骤:
向 google chrome 和 chrome 驱动程序提供 777 权限
设置:在构建之前启动Xvfb,并在Jenkins构建设置为True之后关闭它
Chrome驱动程序 81.0.4044.69
Google Chrome 81.0.4044.129
Ubuntu 18.04.4 LTS(GNU/Linux 4.15.0-99-通用 x86_64)
这个错误信息...
...暗示 ChromeDriver 无法 initiate/spawn 新的 Browsing Context 即Chrome 浏览器 会话。
深潜
查看您提供的错误堆栈跟踪的快照,尽管您提到使用 ChromeDriver 81.0.4044.69 和 Google 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()
以优雅地关闭和销毁 WebDriver 和 Web Client 实例.
参考资料
您可以在以下位置找到一些相关讨论:
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");
我已经采取的一些步骤:
向 google chrome 和 chrome 驱动程序提供 777 权限
设置:在构建之前启动Xvfb,并在Jenkins构建设置为True之后关闭它
Chrome驱动程序 81.0.4044.69
Google Chrome 81.0.4044.129
Ubuntu 18.04.4 LTS(GNU/Linux 4.15.0-99-通用 x86_64)
这个错误信息...
...暗示 ChromeDriver 无法 initiate/spawn 新的 Browsing Context 即Chrome 浏览器 会话。
深潜
查看您提供的错误堆栈跟踪的快照,尽管您提到使用 ChromeDriver 81.0.4044.69 和 Google 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()
以优雅地关闭和销毁 WebDriver 和 Web Client 实例.
参考资料
您可以在以下位置找到一些相关讨论: