Erreur inconnue: Chrome n'a pas démarré: est sorti anormalement (informations du pilote: chromedriver=2,9)
j'essaie d'exécuter des tests de sélénium sur Debian 7 mais sans succès.
l'erreur est:
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
j'ai chromedriver 29 avec chrome 34.0.1847.76 bêta en cours d'exécution sur Debian 7 32 bits . J'utilise sélénium-java 2.33.0
suivant ce link , chromedriver 29 est la bonne version pour chrome 34 . Et de toute façon, les versions précédentes ne fonctionnent pas sur Debian 7 à cause de la version glibc ...
----------ChromeDriver v2.9 (2014-01-31)---------- Supports Chrome v31-34
[jour 1]
j'ai essayé avec à la fois java 7 et java 6 , toujours le même problème. peut-être devrais-je essayer avec java 8 ^ ^
[mise à jour 2]
j'utilise cette commande pour tester le pilote chrome, pour m'assurer que ce n'est pas un problème avec 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
je reçois le même message d'erreur:
{"sessionId":"210f3f837a798ee68cd91f089976d0c2","status":13,"value":{"message":"unknown error: Chrome failed to start: exited abnormallyn (Driver info: chromedriver=2.9.248316,platform=Linux 3.2.0-4-686-pae x86)"}}
de Toute aide pour savoir ce qui se passe serait appréciée.
Merci
11 réponses
j'ai finalement réussi à obtenir des tests de sélénium pour démarrer le pilote Chrome sur mon ordinateur portable (serveur).
le plus important est d'utiliser Xvfb
. Ne me demandez pas pourquoi mais une fois que vous acceptez ce fait, suivez ces étapes (plus détaillées que la réponse @Anon)
-
En vous Jenkins paramètres d'ajouter une propriété globale
key : DISPLAY value:0:0
-
Sur votre serveur démarrer
Xvfb
en arrière-plan:Xvfb :0 -ac -screen 0 1024x768x24 &
est-ce que vous passez le paramètre DISPLAY à votre travail Jenkins?
je suppose que vous essayez d'exécuter les tests en mode sans tête, aussi. Ainsi, configurez un certain service x (Par exemple Xvfb) et passez le numéro D'affichage à votre travail. A travaillé pour moi.
j'essayais d'exécuter du sélénium sur Jenkins avec Mocha framework en utilisant wdio. Voici donc les étapes à suivre pour résoudre ce problème: -
installer google chrome
sudo apt-get update
sudo apt-get install google-chrome-stable
Installer chrome-pilote
wget http://chromedriver.storage.googleapis.com/2.23/chromedriver_linux64.zip
unzip chromedriver_linux64.zip
exécuter les commandes suivantes pour démarrer le serveur web de sélénium
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"
après ce début vous essais avec la commande wdio
wdio wdio.conf.js
la solution du micro fonctionne pour moi. C'est l'ensemble complet des commandes:
Xvfb :99 -ac -screen 0 1280x1024x24 &
export DISPLAY=:99
nice -n 10 x11vnc 2>&1 &
plus tard, vous pouvez lancer google-chrome:
google-chrome --no-sandbox &
ou démarrer google chrome via selenium driver (par exemple):
ng e2e --serve true --port 4200 --watch true
Rapporteur.fichier conf:
capabilities: {
'browserName': 'chrome',
'chromeOptions': {
'args': ['no-sandbox']
}
},
passer no-sandbox à exec semble important pour jenkins sur les fenêtres en avant plan ou comme service. Voici ma solution
chromedriver échoue sur windows jenkins esclave exécution en arrière plan
nous avons eu le même problème en essayant de lancer des tests de sélénium de Jenkins. J'avais sélectionné le ' Démarrer Xvfb avant la construction, et l'avais éteint après la boîte ' et passé dans les options d'écran nécessaires, mais j'étais encore cette erreur.
cela a finalement fonctionné lorsque nous avons passé les commandes suivantes dans la boîte Execute Shell.
Xvfb :99 -ac -screen 0 1280x1024x24 &
nice -n 10 x11vnc 2>&1 &
...
killall Xvfb
j'exécute une configuration similaire: Selenium 3.40, Chrome 61, chromedriver 2.33 tournant avec xvfb sur ubuntu 16.04.
j'ai eu la même erreur de Chrome par intermittence. Il semble que parfois, le chromedriver ne nettoie pas les fichiers temp associés au profil Chrome.
une solution pour moi est de nettoyer les fichiers temp avant d'exécuter des tests:
rm -rf /tmp/.org.chromium.Chromium*
Je m'attends à ce que cela sera résolu à l'avenir les versions de chromedriver, mais pour l'instant cela résout le problème dans mon cas.
je me bats avec ce problème depuis longtemps, et juste un jour je trouve comment le faire disparaître et aujourd'hui je peux exécuter un processus de 50 threads appelant le sélénium sans voir ce problème plus et aussi arrêter de planter ma machine avec problème outofmemory avec trop de processus chromedriver ouverts.
- j'utilise du sélénium 3.7.1, chromedrive 2.33, java.version: '1.8.0', redhat ver ' 3.10.0-693.5.2.el7.x86_64', version navigateur de chrome: 60.0.3112.90;
- lancer une session ouverte avec écran, pour être sûr que ma session ne meurt jamais,
- running Xvfb: nohup Xvfb-ac: 15-screen 0 1280x1024x16 &
- export DISPLAY: 15 from .bashsh/.profil
ces 4 éléments sont le cadre de base que tout le monde connaît déjà, vient maintenant le code, où tous ont fait beaucoup de différence pour atteindre le succès:
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);
}
}
}
}
Bonne chance et j'espère que vous ne voyez pas que le problème de plantage plus
veuillez commenter votre succès
meilleures salutations,
exporter la variable DISPLAY
est certainement la solution, mais selon votre configuration vous pourriez avoir à le faire d'une manière légèrement différente.
dans mon cas, j'ai deux processus différents: le premier démarre Xvfb, l'autre lance les tests. Donc ma connaissance des scripts shell est un peu rouillée mais j'ai compris que l'exportation de la variable DISPLAY
du premier processus ne la rendait pas disponible dans le second processus.
Heureusement, Selenium WebDriver vous permet de "redéfinir" votre environnement. C'est ma fonction pour créer un pilote pour Chrome dans JS. Assez sûr que l'équivalent existe pour votre langage de programmation:
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);
};
j'ai eu un problème simillar avec les tests maven sur x86 linux que j'utilisais dans le terminal. Je me suis connecté à linux par ssh . J'ai commencé mes tests java selenium par
mvn -DargLine="-Dbaseurl=http://http://127.0.0.1:8080/web/" install
excepté mon application, après avoir exécuté ces tests, j'ai reçu une erreur dans les logs:
unknown error: Chrome failed to start: exited abnormally
j'exécutais ces tests en tant qu'utilisateur root. Avant cette erreur j'ai reçu que le ChromeDriver n'est pas présent. Je suis allé de l'avant avec cela en installant ChromeDriver binaire et en l'ajoutant au chemin. Mais j'ai dû installer google-chrome navigateur-ChromeDriver seul n'est pas suffisant pour exécuter des tests. Donc l'erreur est un problème peut-être avec le tampon d'écran dans la fenêtre de terminal, mais vous pouvez installer Xvfb qui est le tampon d'écran virtuel. Ce qui est important, c'est que vous ne deviez pas exécuter vos tests en tant que root, car vous pourriez recevoir une autre erreur de navigateur Chrome. Donc non comme root Je cours:
export DISPLAY=:99
Xvfb :99 -ac -screen 0 1280x1024x24 &
Ce qui est important ici, que dans mon cas la le nombre relatif à L'affichage doit être le même que le paramètre Xvfb :NN. 99 dans ce cas. J'ai eu un autre problème parce que J'ai lancé Xvfb avec une autre valeur D'affichage et je voulais que ça s'arrête. Pour redémarrer Xvfb:
ps -aux | grep Xvfb
kill -9 PID
sudo rm /tmp/.X11-unix/X99
alors trouvez un PID de processus avec grep. Tuer le processus Xvfb. Et puis il y a de verrouillage dans /tmp/.X11-unix/XNN , donc supprimez cette serrure et vous pouvez redémarrer le serveur. Si vous n'utilisez pas root, définissez simillar displays, installez google-chrome puis avec maven vous pouvez démarrer tests au sélénium. Mes tests se sont bien passés avec ces règles et opérations.
Je ne suis pas sûr que cela arrête tout le monde, mais j'ai résolu cela en mettant à jour le chromedriver et en m'assurant qu'il était dans un endroit où mon utilisateur pourrait lire (il semble que beaucoup de gens rencontrant cela le voient pour des raisons de permission comme moi).
Sur Ubuntu 16.04: 1. Télécharger chromedriver (version 2.37 Pour moi) 2. Décompresser le fichier 3. Installer quelque part raisonnable (j'ai choisi le répertoire /usr/local/bin/chromedriver)
N'a même pas besoin de être la propriété de mon utilisateur tant qu'il est globalement exécutable ( sudo chmod +x /usr/local/bin/chromedriver
)