0

I hope you're doing well,

I'm trying to run selenium test with no GUI and no browser, I found this code:

#!/usr/bin/env python

from pyvirtualdisplay import Display
from selenium import webdriver

display = Display(visible=0, size=(800, 600))
display.start()

# now Firefox will run in a virtual display.
# you will not see the browser.
browser = webdriver.Firefox()
browser.get('http://www.google.com')
print(browser.title)
browser.quit()

display.stop()

But I'm getting the following error:

Traceback (most recent call last):
  File "test.py", line 11, in <module>
    browser = webdriver.Firefox()
  File "/home/developer/python3.7/lib/python3.7/site-packages/selenium/webdriver/firefox/webdriver.py", line 201, in __init__
    super().__init__(command_executor=executor, options=options, keep_alive=True)
  File "/home/developer/python3.7/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 286, in __init__
    self.start_session(capabilities, browser_profile)
  File "/home/developer/python3.7/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 378, in start_session
    response = self.execute(Command.NEW_SESSION, parameters)
  File "/home/developer/python3.7/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 440, in execute
    self.error_handler.check_response(response)
  File "/home/developer/python3.7/lib/python3.7/site-packages/selenium/webdriver/remote/errorhandler.py", line 245, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message: Connection refused (os error 111)

In the gekodriver log this is the error:

1683750630214   geckodriver     INFO    Listening on 127.0.0.1:56877
1683750630219   mozrunner::runner       INFO    Running command: MOZ_CRASHREPORTER="1" MOZ_CRASHREPORTER_NO_REPORT="1" MOZ_CRASHREPORTER_SHUTDOWN="1" MOZ_NO_REMOTE="1" "/opt ... te" "--remote-debugging-port" "49636" "--remote-allow-hosts" "localhost" "-no-remote" "-profile" "/tmp/rust_mozprofilezNqnc6"

(process:28229): GLib-CRITICAL **: g_slice_set_config: assertion 'sys_page_size == 0' failed
Xlib:  extension "RANDR" missing on display ":841919765".

(firefox:28229): GLib-GObject-WARNING **: Attempt to add property GnomeProgram::sm-connect after class was initialised

(firefox:28229): GLib-GObject-WARNING **: Attempt to add property GnomeProgram::show-crash-dialog after class was initialised

(firefox:28229): GLib-GObject-WARNING **: Attempt to add property GnomeProgram::display after class was initialised

(firefox:28229): GLib-GObject-WARNING **: Attempt to add property GnomeProgram::default-icon after class was initialised
*** e = [Exception... "Component returned failure code: 0x80570016 (NS_ERROR_XPC_GS_RETURNED_FAILURE) [nsIJSCID.getService]"  nsresult: "0x80570016 (NS_ERROR_XPC_GS_RETURNED_FAILURE)"  location: "JS frame :: chrome://browser/content/utilityOverlay.js :: getShellService :: line 376"  data: no]

Do you know, how can I run a test in a Linux machine that doesn't have GUI.

Regards!

1 Answers1

0

There're many docs related to running Selenium headless i.e. without a GUI. Here's how I did it for Chrome:

from selenium import webdriver

options = webdriver.ChromeOptions()
options.add_argument("--no-sandbox")
options.add_argument("--headless")
driver = webdriver.Chrome(options = options)

FirefoxOptions docs are here.

Cat Mai
  • 430
  • 4
  • 8
  • I Tried your code, but I'm getting an error: TTraceback (most recent call last): File "/var/www/html/dotcomStatus/scripts/test.py", line 6, in driver = webdriver.Chrome(options = options) File "/home/developer/python3.10/lib/python3.10/site-packages/selenium/webdriver/chrome/webdriver.py", line 84, in __init__ super().__init__( File "/home/developer/python3.10/lib/python3.10/site-packages/selenium/webdriver/chromium/webdriver.py", line 101, in __init__ self.service.start() – Jonathan Viana May 10 '23 at 22:25
  • File "/home/developer/python3.10/lib/python3.10/site-packages/selenium/webdriver/common/service.py", line 100, in start self.assert_process_still_running() File "/home/developer/python3.10/lib/python3.10/site-packages/selenium/webdriver/common/service.py", line 113, in assert_process_still_running raise WebDriverException(f"Service {self._path} unexpectedly exited. Status code was: {return_code}") selenium.common.exceptions.WebDriverException: Message: Service /home/developer/.cache/selenium/chromedriver/linux64/113.0.5672.63/chromedriver unexpectedly exited. Status code was: 1 – Jonathan Viana May 10 '23 at 22:26
  • Unsure about Firefox, but did you install Chrome driver? Then add this from selenium.webdriver.chrome.service import Service from selenium import webdriver service = Service(executable_path="/path/to/chromedriver") driver = webdriver.Chrome(service=service) – Cat Mai May 10 '23 at 22:46