WebDriverError: no such session error using ChromeDriver Chrome through Jenkins and Selenium WebDriverError: no such session error using ChromeDriver Chrome through Jenkins and Selenium selenium selenium

WebDriverError: no such session error using ChromeDriver Chrome through Jenkins and Selenium


I met this kind of case sometimes. I use ChromeDriver with Laravel Dusk, rather than Selenium. However, I believe the cause is on ChromeDriver, not Selenium

ChromeDriver will create some cache files in folder:C:\Users\(yourAccountName)\AppData\Local\Temp. In this folder, you will see many cache folders that look like scoped_dir1234_5678. Each folder occupied around 10mb. If Jenkins runs ChromeDriver much frequently, ChromeDriver can overpopulate the cache file in the temp folder. You should think of 30-50GB cache files on your C drive and make full of your C driver.

When my C drive is out of space, ChromeDriver will not be able to start, and then return to me the error message "Facebook\WebDriver\Exception\NoSuchDriverException: no such session".

The solution:

  1. Go to the temp folder, remove all the ChromeDriver cache folders can clean up C space.
  2. Create the script which can remove/clean up the cache folder of ChromeDriver.

--UPDATE--

Find another situation to cause the issue.

If your run same script to start ChromeDriver in two different instance at same time on same OS, when one instance is finished and shut down the chromedriver, the other chrome browser instance might be closed as well.

For example you open the two console and execute chromeDriver script, or your Jenkins project start at the same time.

I believe even if you run different script but require chromeDriver at same time, one of the script will have "no such session" due to the chrome browser instance shutdown.

solution:

  1. Install the build blocker in jenkins
  2. Set up project in the build blocker, which target project need to wait it until it finished.

My case is using Laravel Dusk without selenium. I am not sure if it will make different when test go through selenium server


While using this error message on platform...

WebDriverError: no such session  (Driver info: chromedriver=a.b.c (36d3d07f660ff2bc1bf28a75d1cdabed0983e7c4),platform=Mac OS X 10.11.5 x86_64)

Or

This error message on platform...

WebDriverError: no such session    (Driver info: chromedriver=p.q.r,platform=Linux 3.2.0-4-amd64 x86_64) (Selenium::WebDriver::Error::NoSuchDriverError)

Or

This error message on platform...

WebDriverError: no such session (Driver info: chromedriver=x.y.z (52179c1b310fec1797c81ea9a20326839860b7d3),platform=Windows NT 6.1 SP1 x86_64) (NoSuchDriver)

...implies that the ChromeDriver was unable to communicate with the existing Browsing Context i.e. Chrome Browser session.


We have discussed this issue in details within the discussion Issue 732: No such session error - inconsistent problem which appears when running tests for a prolonged period. This error is usually observed after an extended period of executing the Test Suite as follows:

[489.798][DEBUG]: DEVTOOLS EVENT Inspector.targetCrashed {}[489.798][INFO]: Waiting for pending navigations...[489.798][INFO]: Done waiting for pending navigations[0127/105308:ERROR:nacl_helper_linux.cc(289)] NaCl helper process running without a sandbox!Most likely you need to configure your SUID sandbox correctly[489.849][INFO]: RESPONSE FindElements unknown error: session deleted because of page crashfrom tab crashed  (Session info: chrome=p.q.r.s)[489.849][DEBUG]: Log type 'driver' lost 0 entries on destruction[489.849][DEBUG]: Log type 'browser' lost 9 entries on destruction

This error is defined in nacl_helper_linux.cc as follows:

// If the Zygote has started handling requests, we should be sandboxed via// the setuid sandbox.if (!IsSandboxed()) {  LOG(ERROR) << "NaCl helper process running without a sandbox!\n"    << "Most likely you need to configure your SUID sandbox "    << "correctly";

Precisely the FindElement(s) method have FAILED due to sandbox issue and Page Crash occured due to session deletion


Solution

This error can happen due to a lot of diverse reasons and the solution to address this error are as follows:

  • Initiate the Chrome session configuring ChromeDriver with the argument --disable-impl-side-painting
    • Additionally, you can also add the argument --enable-gpu-rasterization which allow heuristics to determine when a layer tile should be drawn with the Skia GPU backend. Only valid with GPU accelerated compositing + impl-side painting.
    • As an option, you can also add the argument --force-gpu-rasterization which always uses the Skia GPU backend for drawing layer tiles. Only valid with GPU accelerated compositing + impl-side painting. Overrides the kEnableGpuRasterization flag.
  • This error is also observed when the server does not recognize the unique session identifier. This happens if the session has been deleted or if the session ID is invalid in either of the following ways:

    • Explicit session deletion: A WebDriver session is explicitly deleted when explicitly invoking the quit() method as follows:

      from selenium import webdriverfrom selenium.common.exceptions import InvalidSessionIdExceptiondriver = webdriver.Chrome(executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe')print("Current session is {}".format(driver.session_id))driver.quit()try:    driver.get("https://www.google.com/")except Exception as e:    print(e.message)#Console Output:Current session is a9272550-c4e5-450f-883d-553d337eed48No active session with ID a9272550-c4e5-450f-883d-553d337eed48
    • Implicit session deletion: A WebDriver session is implicitly deleted when you close the last window or tab invoking close() method as follows:

      driver = webdriver.Chrome(executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe')print("Current session is {}".format(driver.session_id))# closes current window/tabdriver.close()try:    driver.get("https://www.google.com/")except Exception as e:    print(e.message)#Console Output:Current session is a9272550-c4e5-450f-883d-553d337eed48No active session with ID a9272550-c4e5-450f-883d-553d337eed48
  • You may also have to add the argument --no-sandbox

  • Chrome seem to crash often in Docker containers on certain pages due to too small /dev/shm. Similarly, you may have to fix the small /dev/shm size.
  • An example:

    sudo mount -t tmpfs -o rw,nosuid,nodev,noexec,relatime,size=512M tmpfs /dev/shm
  • It also works if you use -v /dev/shm:/dev/shm option to share host /dev/shm

  • Another way to make it work would be to add the chrome_options as --disable-dev-shm-usage. This will force Chrome to use the /tmp directory instead. This may slow down the execution though since disk will be used instead of memory.

    chrome_options.add_argument('--disable-dev-shm-usage')        

from tab crashed

from tab crashed was WIP(Work In Progress) with the Chromium Team for quite some time now which relates to Linux attempting to always use /dev/shm for non-executable memory. Here are the references :


Reference

You can find a couple of detailed discussions in:


In my case it was driver.quit() being called in the wrong location.