selenium - error desconocido: Chrome no se pudo iniciar: salió de forma anormal(Información del controlador: chromedriver=2.9
selenium mac (11)
¿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.
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 selenio-java 2.33.0
Siguiendo este link , 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)---------- Supports 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/":{/"platform/":/"ANY/",/"browserName/":/"chrome/",/"chromeOptions/":{/"args/":[],/"extensions/":[]},/"version/":/"/",/"chrome.switches/":[]}}" localhost:12495/session
Recibo el mismo mensaje de error:
{"sessionId":"210f3f837a798ee68cd91f089976d0c2","status":13,"value":{"message":"unknown error: Chrome failed to start: exited abnormally/n (Driver info: chromedriver=2.9.248316,platform=Linux 3.2.0-4-686-pae x86)"}}
Cualquier ayuda para saber qué está pasando sería apreciada.
Gracias
Estaba intentando ejecutar selenio 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 selenio
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
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.
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 &
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 selenio 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.
- 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;
- ejecutando una sesión abierta con pantalla, para asegurarse de que mi sesión nunca muera,
- ejecutando Xvfb: nohup Xvfb -ac: 15 -screen 0 1280x1024x16 &
- 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<WebDriver> threadWebDriver = new ThreadLocal<WebDriver>(){
@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 programació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);
};
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 selenio (por ejemplo):
ng e2e --serve true --port 4200 --watch true
Archivo Protractor.conf:
capabilities: {
''browserName'': ''chrome'',
''chromeOptions'': {
''args'': [''no-sandbox'']
}
},
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
)
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
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 selenio 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 bloqueo en /tmp/.X11-unix/XNN, así que borre este bloqueo 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 selenio. Mis pruebas funcionaron bien con estas reglas y operaciones.
Tuvimos el mismo problema al intentar lanzar pruebas de Selenium de Jenkins. Había seleccionado la casilla " Comenzar Xvfb antes de compilar 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