error desconocido: Chrome no se pudo iniciar: salió de forma anormal (Información del controlador: chromedriver = 2.9

Estoy intentando ejecutar pruebas de Selenium en Debian 7 pero sin éxito.

El error es:

unknown error: Chrome failed to start: exited abnormally (Driver info: chromedriver=2.9.248316,platform=Linux 3.2.0-4-686-pae x86) (WARNING: The server did not provide any stacktrace information) Command duration or timeout: 60.55 seconds Build info: version: '2.33.0', revision: '4ecaf82108b2a6cc6f006aae81961236eba93358', time: '2013-05-22 12:00:17' System info: os.name: 'Linux', os.arch: 'i386', os.version: '3.2.0-4-686-pae', java.version: '1.7.0_25' Driver info: org.openqa.selenium.chrome.ChromeDriver 

Tengo chromedriver 29 con Chrome 34.0.1847.76 beta ejecutándose en Debian 7 32 bits . Estoy usando selenium-java 2.33.0

Siguiendo este enlace , chromedriver 29 es la versión correcta para Chrome 34 . Y de todos modos, las versiones anteriores no funcionan en Debian 7 debido a la versión glibc …

 ---------- ChromeDriver v2.9 (2014-01-31) ----------
 Admite Chrome v31-34

[actualización 1]

Intenté con tanto java 7 como java 6 , sigue siendo el mismo problema. Puede ser que debería probar con java 8 ^^

[actualización 2]

Estoy usando este comando para probar el controlador de Chrome, para asegurarme de que no haya ningún problema con jenkins:

 curl -X POST -H "Content-Type: application / json; charset = utf-8" -d "{\" desiredCapabilities \ ": {\" plataforma \ ": \" ANY \ ", \" browserName \ ": \ "chrome \", \ "chromeOptions \": {\ "args \": [], \ "extensiones \": []}, \ "versión \": \ "\", \ "chrome.switches \" : []}} "localhost: 12495 / session

Recibo el mismo mensaje de error:

 {"sessionId": "210f3f837a798ee68cd91f089976d0c2", "estado": 13, "valor": {"mensaje": "error desconocido: Chrome no se pudo iniciar: salió anormalmente \ n (Información del controlador: chromedriver = 2.9.248316, platform = Linux 3.2.0-4-686-pae x86) "}}

Cualquier ayuda para saber qué está pasando sería apreciada.

Gracias

Finalmente logré obtener las pruebas de Selenium al iniciar Chrome Driver en mi computadora portátil (servidor).

Lo importante es usar Xvfb . No me preguntes por qué, pero una vez que aceptes este hecho, sigue estos pasos (más detallado que @Anon answer)

  • En su configuración de Jenkins, agregue una propiedad global

     key : DISPLAY value:0:0 
  • En su servidor, inicie Xvfb en segundo plano:

      Xvfb :0 -ac -screen 0 1024x768x24 & 

¿Estás pasando el parámetro DISPLAY a tu trabajo en Jenkins?

Supongo que también intentas ejecutar las pruebas en modo sin cabeza. Así que configure algún servicio x (es decir, Xvfb) y pase el número DISPLAY a su trabajo. Trabajó para mi.

Estaba intentando ejecutar selenium en Jenkins con el framework Mocha usando wdio. Entonces, los siguientes son los pasos para resolver este problema:

Instalar Google Chrome

 sudo apt-get update sudo apt-get install google-chrome-stable 

Instalar chrome-driver

 wget http://chromedriver.storage.googleapis.com/2.23/chromedriver_linux64.zip unzip chromedriver_linux64.zip 

Ejecute los siguientes comandos para iniciar el servidor web de selenium

 nohup sudo Xvfb :10 -ac export DISPLAY=:10 java -jar vendor/se/selenium-server-standalone/bin/selenium-server-standalone.jar -Dwebdriver.chrome.bin="/usr/bin/google-chrome" -Dwebdriver.chrome.driver="vendor/bin/chromedriver" 

Después de este inicio, prueba con el comando wdio

 wdio wdio.conf.js 

La solución de Mike R funciona para mí. Este es el conjunto completo de comandos:

 Xvfb :99 -ac -screen 0 1280x1024x24 & export DISPLAY=:99 nice -n 10 x11vnc 2>&1 & 

Más tarde puede ejecutar google-chrome:

 google-chrome --no-sandbox & 

O inicie Google Chrome a través del controlador de selenium (por ejemplo):

 ng e2e --serve true --port 4200 --watch true 

Archivo Protractor.conf:

 capabilities: { 'browserName': 'chrome', 'chromeOptions': { 'args': ['no-sandbox'] } }, 

Pasar el no-sandbox al ejecutivo parece importante para los jenkins en las ventanas en primer plano o como servicio. Aquí está mi solución

chromedriver falla en Windows esclavo Jenkins corriendo en primer plano

Tuvimos el mismo problema al intentar lanzar pruebas de Selenium de Jenkins. Había seleccionado la casillaComenzar Xvfb antes de comstackr y cerrar después de ” y pasé las opciones de pantalla necesarias, pero todavía estaba recibiendo este error.

Finalmente funcionó cuando pasamos los siguientes comandos en el cuadro Ejecutar Shell.

Xvfb :99 -ac -screen 0 1280x1024x24 & nice -n 10 x11vnc 2>&1 & ... killall Xvfb

Estoy ejecutando una configuración similar: Selenium 3.40, Chrome 61, chromedriver 2.33 ejecutándose con xvfb en ubuntu 16.04.

Recibía el mismo error de Chrome de forma intermitente. Parece que a veces, chromedriver no puede limpiar los archivos temporales asociados con el perfil de Chrome.

Una solución para mí es limpiar los archivos temporales antes de ejecutar las pruebas:

 rm -rf /tmp/.org.chromium.Chromium* 

Espero que esto se resuelva en versiones futuras de chromedriver, pero por ahora esto resuelve el problema en mi caso.

He estado luchando con este tema durante mucho tiempo, y justo hoy descubro cómo hacerlo desaparecer y hoy puedo ejecutar un proceso de 50 hilos llamando al selenium sin haber visto más este problema y también dejar de estrellar mi máquina sin memoria problema con demasiados procesos abiertos de cromados.

  1. Estoy usando selenium 3.7.1, chromedrive 2.33, java.version: ‘1.8.0’, redhat ver ‘3.10.0-693.5.2.el7.x86_64’, versión del navegador chrome: 60.0.3112.90;
  2. ejecutando una sesión abierta con pantalla, para asegurarse de que mi sesión nunca muera,
  3. ejecutando Xvfb: nohup Xvfb -ac: 15 -screen 0 1280x1024x16 &
  4. PANTALLA de exportación: 15 desde .bashsh / .profile

estos 4 elementos son el ajuste básico que todos ya conocen, ahora viene el código, donde todos hicieron una gran diferencia para lograr el éxito:

 public class HttpWebClient { public static ChromeDriverService service; public ThreadLocal threadWebDriver = new ThreadLocal(){ @Override protected WebDriver initialValue() { FirefoxProfile profile = new FirefoxProfile(); profile.setPreference("permissions.default.stylesheet", 2); profile.setPreference("permissions.default.image", 2); profile.setPreference("dom.ipc.plugins.enabled.libflashplayer.so", "false"); profile.setPreference(FirefoxProfile.ALLOWED_HOSTS_PREFERENCE, "localhost"); WebDriver driver = new FirefoxDriver(profile); return driver; }; }; public HttpWebClient(){ // fix for headless systems: // start service first, this will create an instance at system and every time you call the // browser will be used // be sure you start the service only if there are no alive instances, that will prevent you to have // multiples chromedrive instances causing it to crash try{ if (service==null){ service = new ChromeDriverService.Builder() .usingDriverExecutable(new File(conf.get("webdriver.chrome.driver"))) // set the chromedriver path at your system .usingAnyFreePort() .withEnvironment(ImmutableMap.of("DISPLAY", ":15")) .withSilent(true) .build(); service.start(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } // my Configuration class is for good and easy setting, you can replace it by using values instead. public WebDriver getDriverForPage(String url, Configuration conf) { WebDriver driver = null; DesiredCapabilities capabilities = null; long pageLoadWait = conf.getLong("page.load.delay", 60); try { System.setProperty("webdriver.chrome.driver", conf.get("webdriver.chrome.driver")); String driverType = conf.get("selenium.driver", "chrome"); capabilities = DesiredCapabilities.chrome(); String[] options = new String[] { "--start-maximized", "--headless" }; capabilities.setCapability("chrome.switches", options); // here is where your chromedriver will call the browser // I used to call the class ChromeDriver directly, which was causing too much problems // when you have multiple calls driver = new RemoteWebDriver(service.getUrl(), capabilities); driver.manage().timeouts().pageLoadTimeout(pageLoadWait, TimeUnit.SECONDS); driver.get(url); // never look back } catch (Exception e) { if (e instanceof TimeoutException) { LOG.debug("Crawling URL : "+url); LOG.debug("Selenium WebDriver: Timeout Exception: Capturing whatever loaded so far..."); return driver; } cleanUpDriver(driver); throw new RuntimeException(e); } return driver; } public void cleanUpDriver(WebDriver driver) { if (driver != null) { try { // be sure to close every driver you opened driver.close(); driver.quit(); //service.stop(); do not stop the service, bcz it is needed TemporaryFilesystem.getDefaultTmpFS().deleteTemporaryFiles(); } catch (Exception e) { throw new RuntimeException(e); } } } 

}

Buena suerte y espero que ya no veas ese problema.

Por favor comenta tu éxito

Atentamente,

La exportación de la variable DISPLAY es definitivamente la solución, pero dependiendo de su configuración, puede que tenga que hacer esto de una manera ligeramente diferente.

En mi caso, tengo dos procesos diferentes: el primero inicia Xvfb, el otro inicia las pruebas. Así que mi conocimiento sobre scripts de shell está un poco oxidado, pero descubrí que exportar la variable DISPLAY desde el primer proceso no estaba disponible en el segundo proceso.

Afortunadamente, Selenium WebDriver te permite ‘redefinir’ tu entorno. Esta es mi función para crear un controlador para Chrome en JS. Bastante seguro de que existe el equivalente para su lenguaje de progtwigción:

 const caps = require('selenium-webdriver/lib/capabilities'); const chrome = require('selenium-webdriver/chrome'); const chromedriver = require('chromedriver'); module.exports = function (cfg) { let serviceBuilder = new chrome.ServiceBuilder(chromedriver.path); let options = chrome.Options.fromCapabilities(caps.Capabilities.chrome()); let service; let myENV = new Map(); // 're-export' the `DISPLAY` variable myENV.set('DISPLAY', ':1'); serviceBuilder.setEnvironment(myENV); service = serviceBuilder.build(); options.addArguments('disable-setuid-sandbox'); options.addArguments('no-sandbox'); options.addArguments('allow-insecure-localhost'); options.excludeSwitches('test-type'); return chrome.Driver.createSession(options, service); }; 

Tuve un problema similar con las pruebas maven en x86 linux que estaba usando en la terminal. Estaba iniciando sesión en linux por ssh . Empecé mis pruebas de selenium java por

 mvn -DargLine="-Dbaseurl=http://http://127.0.0.1:8080/web/" install 

Exceptuando mi aplicación, después de ejecutar estas pruebas, recibí un error en los registros:

 unknown error: Chrome failed to start: exited abnormally 

Estaba ejecutando estas pruebas como usuario root. Antes de este error, recibí que ChromeDriver no está presente. Avancé con esto instalando el binario de ChromeDriver y añadiéndolo a PATH. Pero luego tuve que instalar el navegador google-chrome. ChromeDriver solo no es suficiente para ejecutar pruebas. Entonces, el error es un problema, tal vez con el búfer de la pantalla en la ventana del terminal, pero puede instalar Xvfb, que es un búfer de pantalla virtual. Lo que es importante, es que debe ejecutar sus pruebas no como root, ya que puede recibir otro error del navegador Chrome. Así que no como root ejecuto:

 export DISPLAY=:99 Xvfb :99 -ac -screen 0 1280x1024x24 & 

Lo que es importante aquí, que en mi caso el número relacionado con DISPLAY debe ser el mismo que el parámetro Xvfb: NN. 99 en ese caso. Tuve otro problema porque ejecuté Xvfb con otro valor de DISPLAY y quería que se detuviera. Para reiniciar Xvfb:

 ps -aux | grep Xvfb kill -9 PID sudo rm /tmp/.X11-unix/X99 

Así que busca un PID de proceso con grep. Mata el proceso Xvfb. Y luego hay un locking en /tmp/.X11-unix/XNN, así que borre este locking y podrá iniciar el servidor nuevamente. Si no corres como root, configura pantallas similares, instala google-chrome y luego con maven puedes iniciar las pruebas de selenium. Mis pruebas funcionaron bien con estas reglas y operaciones.

No estoy seguro de si esto detiene a los demás, pero resolví esto actualizando chromedriver y asegurándome de que estaba en un lugar desde el que mi usuario podía leer (parece que mucha gente que lo está viendo lo hace por razones de permiso como yo) .

En Ubuntu 16.04: 1. Descargar chromedriver (versión 2.37 para mí) 2. Descomprimir el archivo 3. Instalarlo en algún lugar sensato (elegí / usr / local / bin / chromedriver)

Ni siquiera necesita ser propiedad de mi usuario, siempre y cuando sea ejecutable globalmente ( sudo chmod +x /usr/local/bin/chromedriver )