Selenium how to testing without browser and GUI

740 views Asked by At

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

There are 1 answers

3
Cat Mai On

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.