Chrome is not stable on my jenkins and ubuntu 18.04

落爺英雄遲暮 提交于 2020-05-27 04:59:09

问题


Chrome is not stable on my Jenkins. When I run build 5 times, it runs 1 - 2-time success, and the other 3 times I have the above error.

Code for 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");

Some steps I have already taken :

  1. Provided 777 permission to google chrome and chrome driver
  2. Set : Start Xvfb before the build, and shut it down after to True in Jenkins build setting

  3. ChromeDriver 81.0.4044.69

  4. Google Chrome 81.0.4044.129
  5. Ubuntu 18.04.4 LTS (GNU/Linux 4.15.0-99-generic x86_64)

回答1:


This error message...

snapshot

...implies that the ChromeDriver was unable to initiate/spawn a new Browsing Context i.e. Chrome Browser session.


Deep dive

Looking into the snapshot of the error stacktrace you have provided, though you mentioned about using ChromeDriver 81.0.4044.69 and Google Chrome 81.0.4044.129, still it appears there is a mismatch between the versions of the different binaries you are using, possibly Chrome browser is not installed at the default location within your system or due to JDK mismatch. Additionally, ChromeDriver 81.0.4044.69 (2020-03-17) was a bit unstable which was replaced by ChromeDriver 81.0.4044.138 (2020-05-05)

However, the server i.e. ChromeDriver expects you to have Chrome installed in the default location for each system as per the image below:

Chrome_binary_expected_location

1For Linux systems, the ChromeDriver expects /usr/bin/google-chrome to be a symlink to the actual Chrome binary.

You can find a detailed discussion in What is default location of ChromeDriver and for installing Chrome on Windows


Solution

In case you are using the Chrome executable in a non-standard location you have to override the Chrome binary location as follows:

  • Code based solution:

    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();
    
  • Additional considerations- Ensure the following:

    • JDK is upgraded to current levels JDK 8u251.
    • Selenium is upgraded to current levels Version 3.141.59.
    • ChromeDriver is updated to current ChromeDriver v81.0.4044.138 level.
    • Chrome is updated to current Chrome Version 81.0.4044.138 level. (as per ChromeDriver v80.0 release notes)
    • Clean your Project Workspace through your IDE and Rebuild your project with required dependencies only.
    • Execute your @Test as non-root user.
    • Always invoke driver.quit() within tearDown(){} method to close & destroy the WebDriver and Web Client instances gracefully.

References

You can find a couple of relevant discussions in:

  • WebDriverException: unknown error: DevToolsActivePort file doesn't exist while trying to initiate Chrome Browser
  • How to configure ChromeDriver to initiate Chrome browser in Headless mode through Selenium?
  • Running Chromedriver on Ubuntu Server headlessly


来源:https://stackoverflow.com/questions/61607750/chrome-is-not-stable-on-my-jenkins-and-ubuntu-18-04

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!