Selenium Python selenium.common.exceptions.WebDriverException: Mensaje: conexión rechazada usando geckodriver y firefox

Tengo problemas para ejecutar mis scripts de prueba de automatización. Cuando ejecuto mi script, aparecerá un navegador pero no escribirá la URL y esperará 10 segundos hasta que se produzca una excepción. ¿Hay alguna solución que pueda usar para que mis scripts de prueba de automatización funcionen?

Geckodriver.log :

1523997052492 geckodriver INFO geckodriver 0.20.1 1523997052531 geckodriver INFO Listening on 127.0.0.1:37807 1523997052592 mozrunner::runner INFO Running command: "/usr/bin/firefox/firefox" "-marionette" "--headless" "-profile" "/tmp/rust_mozprofile.PU1cngaAJ5Tg" 1523997054831 Marionette INFO Listening on port 2828 

Trazas de la stack :

 Error Traceback (most recent call last): File "/home/kavin/PycharmProjects/untitled/Testing/purchaseAmazonItems.py", line 13, in setUp self.driver = webdriver.Firefox(firefox_binary=binary, firefox_options=opts) File "/usr/local/lib/python3.6/dist-packages/selenium/webdriver/firefox/webdriver.py", line 162, in __init__ keep_alive=True) File "/usr/local/lib/python3.6/dist-packages/selenium/webdriver/remote/webdriver.py", line 154, in __init__ self.start_session(desired_capabilities, browser_profile) File "/usr/local/lib/python3.6/dist-packages/selenium/webdriver/remote/webdriver.py", line 243, in start_session response = self.execute(Command.NEW_SESSION, parameters) File "/usr/local/lib/python3.6/dist-packages/selenium/webdriver/remote/webdriver.py", line 312, in execute self.error_handler.check_response(response) File "/usr/local/lib/python3.6/dist-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response raise exception_class(message, screen, stacktrace) selenium.common.exceptions.WebDriverException: Message: connection refused 

Código :

 def setUp(self): binary = FirefoxBinary('/usr/bin/firefox/firefox') opts = FirefoxOptions() opts.add_argument("--headless") self.driver = webdriver.Firefox(firefox_binary=binary, firefox_options=opts) driver = self.driver driver.get('https://www.amazon.com/') 

Especificaciones :

Ubuntu 16.04
geckodriver 0.20.1
Firefox 59.0.2 + build1-0ubuntu0.16.04.3
Python 3.6
Pycharm 2016.3
Selenio 3.11.0

En ausencia del error, la configuración de seguimiento de la stack es bastante difícil de depurar. Dicho esto, no veo ningún problema importante en el bloque de código. Es posible que necesite realizar algunos pasos adicionales de la siguiente manera:

  • Pase la clave executable_path junto con el valor que se refiere a la ruta absoluta del GeckoDriver de la siguiente manera:

     def setUp(self): binary = FirefoxBinary('/usr/bin/firefox/firefox') opts = FirefoxOptions() opts.add_argument("--headless") self.driver = webdriver.Firefox(firefox_binary=binary, firefox_options=opts, executable_path='/path/to/geckodriver') driver = self.driver driver.get('https://www.amazon.com/') 
  • Limpie su Área de trabajo del proyecto a través de su IDE y Reconstruya su proyecto solo con las dependencias requeridas.

  • Use la herramienta CCleaner para borrar todas las tareas del sistema operativo antes y después de la ejecución de su Test Suite .
  • Si la versión básica de su cliente web es demasiado antigua, desinstálela a través de Revo Uninstaller e instale un GA reciente y una versión de lanzamiento del cliente web .
  • Tomar un reinicio del sistema .
  • Ejecute su @Test .
  • Siempre invoque driver.quit() dentro del tearDown(){} para cerrar y destruir las instancias de WebDriver y Web Client con gracia.

Alternativa

Como alternativa, también puede intentar usar set_headless(headless=boolean_value) siguiente manera:

 def setUp(self): binary = FirefoxBinary('/usr/bin/firefox/firefox') opts = FirefoxOptions() opts.set_headless(headless=True) self.driver = webdriver.Firefox(firefox_binary=binary, firefox_options=opts, executable_path='/path/to/geckodriver') driver = self.driver driver.get('https://www.amazon.com/') 

¿Aquí puede encontrar una discusión detallada sobre cómo hacer que Firefox no tenga acceso a la progtwigción en Selenium con Python?

Estos dos comandos inician un controlador web en el mismo puerto. El segundo causa el error porque el puerto ya está en uso:

 self.driver = webdriver.Firefox(firefox_binary=binary) browser = webdriver.Firefox(firefox_options=opts) 

Para corregir esto, configure las opciones antes de inicializar el controlador (en el primer comando).

 self.driver = webdriver.Firefox(firefox_binary=binary, firefox_options=opts)