org.openqa.selenium.WebDriverException: error desconocido: el archivo DevToolsActivePort no existe al intentar iniciar el navegador Chrome

Estoy intentando lanzar Chrome con una URL, el navegador se inicia y no hace nada después de eso.

Estoy viendo el siguiente error después de 1 minuto:

Unable to open browser with url: 'https://www.google.com' (Root cause: org.openqa.selenium.WebDriverException: unknown error: DevToolsActivePort file doesn't exist (Driver info: chromedriver=2.39.562718 (9a2698cba08cf5a471a29d30c8b3e12becabb0e9),platform=Windows NT 10.0.15063 x86_64) (WARNING: The server did not provide any stacktrace information) 

Mi configuración:

Chrome: 66 ChromeBrowser: 2.39.56

PD: todo funciona bien en Firefox

Empecé a ver este problema el lunes 2018-06-04. Nuestras pruebas se ejecutan cada día de la semana. Parece que lo único que cambió fue la versión de google-chrome (que se había actualizado a la actual) JVM y Selenium eran versiones recientes en el cuadro de Linux (Java 1.8.0_151, selenium 3.12.0, google-chrome 67.0.3396.62 y xvfb-run).
Específicamente agregando los argumentos ” –no-sandbox ” y ” –disable-dev-shm-usage ” detuvo el error. Analizaré estos problemas para encontrar más información sobre el efecto y otras preguntas sobre qué activó google-chrome para actualizar.

 ChromeOptions options = new ChromeOptions(); ... options.addArguments("--no-sandbox"); options.addArguments("--disable-dev-shm-usage"); 

Este mensaje de error …

 org.openqa.selenium.WebDriverException: unknown error: DevToolsActivePort file doesn't exist 

… implica que ChromeDriver no pudo iniciar / generar una nueva sesión de WebBrowser, es decir, Chrome Browser .

Sus pruebas de código y la información de versiones de todos los binarios nos han dado alguna pista sobre lo que está pasando mal.

Sin embargo, según Add –disable-dev-shm-usage a los indicadores de inicio predeterminados parece agregar el argumento --disable-dev-shm-usage resolverá temporalmente el problema.

Si desea iniciar / ampliar una nueva sesión del navegador Chrome , puede usar la siguiente solución:

 System.setProperty("webdriver.chrome.driver", "C:\\path\\to\\chromedriver.exe"); ChromeOptions options = new ChromeOptions(); options.addArguments("start-maximized"); // open Browser in maximized mode options.addArguments("disable-infobars"); // disabling infobars options.addArguments("--disable-extensions"); // disabling extensions options.addArguments("--disable-gpu"); // applicable to windows os only options.addArguments("--disable-dev-shm-usage"); // overcome limited resource problems options.addArguments("--no-sandbox"); // Bypass OS security model WebDriver driver = new ChromeDriver(options); driver.get("https://google.com"); 

disable-dev-shm-use

Según base_switches.cc, disable-dev-shm-usage parece ser válido solo en el sistema operativo Linix :

 #if defined(OS_LINUX) && !defined(OS_CHROMEOS) // The /dev/shm partition is too small in certain VM environments, causing // Chrome to fail or crash (see http://crbug.com/715363). Use this flag to // work-around this issue (a temporary directory will always be used to create // anonymous shared memory files). const char kDisableDevShmUsage[] = "disable-dev-shm-usage"; #endif 

En la discusión Agregue una opción para usar / tmp en lugar de / dev / shm David menciona:

Creo que dependerá de cómo se montan / dev / shm y / tmp. Si ambos están montados como tmpfs, supongo que no habrá ninguna diferencia. si por algún motivo / tmp no se asigna como tmpfs (y creo que está correlacionado como tmpfs por defecto por systemd), la gestión de memoria compartida de Chrome siempre correlaciona los archivos en la memoria cuando se crean archivos compartidos anónimos, por lo que incluso en ese caso no debería mucha diferencia Supongo que podría forzar las pruebas de telemetría con la bandera habilitada y ver cómo funciona.

En cuanto a por qué no usarlo por defecto, fue un retroceso por parte del equipo de memoria compartida, supongo que tiene sentido que debería usar / dev / shm para la memoria compartida de manera predeterminada.

En última instancia, todo esto debería moverse para usar memfd_create, pero no creo que eso vaya a suceder en el futuro, ya que requerirá una refactorización significativa de la administración de memoria de Chrome.


Consideraciones adicionales:

  • Actualice JDK a los niveles recientes JDK 8u171 .
  • Actualice el selenium a los niveles actuales Versión 3.12.0 .
  • Actualiza ChromeDriver al nivel actual de ChromeDriver v2.40 .
  • Mantenga la versión de Chrome entre los niveles de Chrome v66-68 . ( según las notas de la versión de ChromeDriver v2.40 )
  • 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 Suite de prueba .
  • Si su versión de cliente web base es demasiado antigua, desinstálela a través de Revo Uninstaller e instale una GA reciente y una versión publicada de Web Client .
  • Haga un reinicio del sistema .
  • Ejecute su @Test .
  • driver.quit() siempre driver.quit() dentro del tearDown(){} para cerrar y destruir correctamente las instancias de WebDriver y Web Client .

Tuve el mismo problema en Python. Lo anterior ayudó. Esto es lo que usé en Python:

 chrome_options = Options() chrome_options.add_argument('--headless') chrome_options.add_argument('--no-sandbox') chrome_options.add_argument('--disable-dev-shm-usage') driver = webdriver.Chrome('/path/to/your_chrome_driver_dir/chromedriver',chrome_options=chrome_options) 

Actualizar:

Puedo resolver el problema y ahora puedo acceder al cromo con la URL deseada.

Resultados de probar las soluciones proporcionadas:

Probé todas las configuraciones como se indicó anteriormente, pero no pude resolver el problema

Explicación con respecto al problema:

Según mi observación, el archivo DevToolsActivePort no existe porque Chrome no puede encontrar su referencia en la carpeta scoped_dirXXXXX.

Pasos tomados para resolver el problema

  1. He eliminado todos los procesos de Chrome y los procesos de controlador de Chrome.
  2. Se agregó el código a continuación para invocar el cromo

     System.setProperty("webdriver.chrome.driver","pathto\\chromedriver.exe"); ChromeOptions options = new ChromeOptions(); options.setExperimentalOption("useAutomationExtension", false); WebDriver driver = new ChromeDriver(options); driver.get(url); 

Usando los pasos anteriores, pude resolver el problema.

Gracias por tus respuestas.

Estábamos teniendo los mismos problemas con nuestros esclavos Jenkins (máquina linux) y probamos todas las opciones anteriores.

Lo único que ayudó fue a establecer el arugument

chrome_options.add_argument (‘- headless’)

Pero cuando investigamos más, notamos que la pantalla XVFB no inició la propiedad y eso está causando este error. Después de arreglar la pantalla XVFB, resolvió el problema.

Tuve el mismo problema, pero en mi caso, Chrome se instaló previamente en la carpeta temporal del usuario, después de que se reinstaló en los archivos de progtwig. Así que cualquiera de las soluciones proporcionadas aquí no me ayudó. Pero si proporciona path to chrome.exe, todo funciona:

 chromeOptions.setBinary("C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe"); 

Espero que esto ayude a alguien =)

yum -y install gtk3-devel gtk3-devel-docs este problema instalando yum -y install gtk3-devel gtk3-devel-docs “, funciona bien

Mi trabajo env es:

 Selenium Version 3.12.0 ChromeDriver Version v2.40 Chrome 68 level 

Antes de:
enter image description hereenter image description here

Después:
enter image description hereenter image description here