Ich versuche, Selenium-Tests unter Debian 7 durchzuführen, aber ohne Erfolg.
Der Fehler ist:
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
Ich habe Chromedriver 29 mit Chrome 34.0.1847.76 Beta auf Debian 7 32 Bit . Ich benutze Selen-Java 2.33.0
Nach diesem Link ist der Chromedriver 29 die richtige Version für Chrome 34 . Außerdem funktionieren frühere Versionen unter Debian 7 aufgrund der glibc-Version nicht…
---------- ChromeDriver v2.9 (31.01.2014) ---------- Unterstützt Chrome v31-34
[Update 1]
Ich habe mit Java 7 und Java 6 versucht, immer noch das gleiche Problem. Vielleicht sollte ich es mit Java 8 versuchen ^^
[Update 2]
Ich verwende diesen Befehl, um den Chrome-Treiber zu testen und sicherzustellen, dass dies kein Problem mit Jenkins ist:
curl -X POST -H "Inhaltstyp: application / json; charset = utf-8" -d "{" gewünschte Fähigkeiten ": {" Plattform ":" ANY "," browserName ": "chrome", "chromeOptions": {"args": [], "extensions": []}, "version": "", "chrome.switches" : []}} "localhost: 12495 / session
Ich erhalte die gleiche Fehlermeldung:
{"sessionId": "210f3f837a798ee68cd91f089976d0c2", "status": 13, "value": {"message": "unbekannter Fehler: Chrome konnte nicht gestartet werden: abnormal beendet \ n (Treiberinfo: chromedriver = 2.9.248316, platform = Linux 3.2.0-4-686-pae x86) "}}
Jede Hilfe, um zu wissen, was los ist, wäre dankbar.
Vielen Dank
Antworten:
Ich habe es endlich geschafft, Selenium-Tests zum Starten des Chrome-Treibers auf meinem Laptop (Server) durchzuführen.
Das Wichtige ist zu verwenden
Xvfb
. Fragen Sie mich nicht warum, aber wenn Sie diese Tatsache akzeptiert haben, befolgen Sie diese Schritte (detaillierter als @Anon Antwort)Fügen Sie in Ihren Jenkins-Einstellungen eine globale Eigenschaft hinzu
Starten Sie auf Ihrem Server
Xvfb
im Hintergrund:quelle
value:0:0
odervalue: :0
?Übergeben Sie den Parameter DISPLAY an Ihren Jenkins-Job?
Ich gehe davon aus, dass Sie versuchen, die Tests auch im Headless-Modus auszuführen. Richten Sie also einen x-Dienst (z. B. Xvfb) ein und übergeben Sie die DISPLAY-Nummer an Ihren Job. Hat für mich gearbeitet.
quelle
Ich habe versucht, mit wdio Selen auf Jenkins mit Mocha Framework auszuführen. Die folgenden Schritte zur Lösung dieses Problems sind: -
Installieren Sie Google Chrome
Installieren Sie den Chrome-Treiber
Führen Sie die folgenden Befehle aus, um den Selenium-Webserver zu starten
Nach diesem Start testen Sie mit dem Befehl wdio
quelle
Die Lösung des Mike R funktioniert für mich. Dies ist der vollständige Befehlssatz:
Später können Sie Google-Chrome ausführen:
Oder starten Sie Google Chrome über den Selentreiber (zum Beispiel):
Protractor.conf Datei:
quelle
Das Übergeben von No-Sandbox an Exec scheint für Jenkins unter Windows im Vordergrund oder als Dienst wichtig zu sein. Hier ist meine Lösung
chromedriver schlägt auf Windows Jenkins Slave fehl, der im Vordergrund läuft
quelle
no-sandbox
während der Verwendung von Chrom in einem Docker-Container im Headless-Modus (Selen-Webdriver 3 & Ruby on Rails) verwendet.--no-sandbox
und viele Docker-Container Dinge als root ausführen. Einige (beängstigend konfigurierte) Jenkins-Knoten verwenden möglicherweise auch root. Eine weitere Option, die Sie hinzufügen können, ist--headless
die vollständige Vermeidung von Xvfb. Möglicherweise benötigen Sie dies auch--disable-dev-shm-usage
speziell in Docker, oder Sie müssen das Mount-Gerät in Ihrem Lauf mit binden--mount type=bind,source=/dev/shm,target=/dev/shm
.Wir hatten das gleiche Problem beim Versuch, Selentests von Jenkins aus zu starten. Ich hatte das Feld " Xvfb vor dem Build starten und danach herunterfahren " ausgewählt und die erforderlichen Bildschirmoptionen übergeben, aber ich bekam immer noch diesen Fehler.
Es hat endlich funktioniert, als wir die folgenden Befehle im Feld "Shell ausführen" übergeben haben.
Xvfb :99 -ac -screen 0 1280x1024x24 & nice -n 10 x11vnc 2>&1 & ... killall Xvfb
quelle
Beispiel für WebDriverSettings.java :
quelle
Ich verwende ein ähnliches Setup: Selenium 3.40, Chrome 61, Chromedriver 2.33, das mit xvfb unter Ubuntu 16.04 ausgeführt wird.
Ich habe zeitweise den gleichen Chrome-Fehler erhalten. Es scheint, dass der Chromedriver manchmal die mit dem Chrome-Profil verknüpften temporären Dateien nicht bereinigt.
Eine Problemumgehung für mich besteht darin, die temporären Dateien vor dem Ausführen von Tests zu bereinigen:
Ich gehe davon aus, dass dies in zukünftigen Versionen von chromedriver behoben wird, aber im Moment löst dies das Problem in meinem Fall.
quelle
Ich habe lange mit diesem Problem gekämpft und erst heute habe ich herausgefunden, wie ich es beseitigen kann. Heute kann ich einen 50-Thread-Prozess ausführen, der Selen aufruft, ohne dieses Problem mehr zu sehen, und auch aufhören, meine Maschine mit outofmemory zum Absturz zu bringen Problem mit zu vielen offenen Chromedriver-Prozessen.
Diese 4 Elemente sind die Grundeinstellung, die jeder bereits kennen würde. Jetzt kommt der Code, bei dem alle einen großen Unterschied gemacht haben, um den Erfolg zu erzielen:
}}
Viel Glück und ich hoffe, Sie sehen dieses Absturzproblem nicht mehr
Bitte kommentieren Sie Ihren Erfolg
Freundliche Grüße,
quelle
Unter Linux hat mir das Hinzufügen dieser Zeilen zu meinem Code geholfen.
quelle
Das Exportieren der
DISPLAY
Variablen ist definitiv die Lösung, aber abhängig von Ihrem Setup müssen Sie dies möglicherweise auf eine etwas andere Weise tun.In meinem Fall habe ich zwei verschiedene Prozesse: Der erste startet Xvfb, der andere startet die Tests. Mein Shell-Scripting-Wissen ist also etwas verrostet, aber ich habe herausgefunden, dass der Export der
DISPLAY
Variablen aus dem ersten Prozess sie im zweiten Prozess nicht verfügbar gemacht hat.Glücklicherweise können Sie mit Selenium WebDriver Ihre Umgebung neu definieren. Dies ist meine Funktion zum Erstellen eines Treibers für Chrome in JS. Ziemlich sicher, dass das Äquivalent für Ihre Programmiersprache existiert:
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); };
quelle
Ich hatte ein ähnliches Problem mit Maven-Tests unter x86 Linux, die ich im Terminal verwendete. Ich habe mich mit ssh bei Linux angemeldet . Ich habe meine Java-Selen-Tests mit begonnen
Mit Ausnahme meiner App erhielt ich nach dem Ausführen dieser Tests eine Fehlermeldung in den Protokollen:
Ich habe diese Tests als Root-Benutzer ausgeführt. Vor diesem Fehler habe ich erhalten, dass ChromeDriver nicht vorhanden ist. Ich habe dies fortgesetzt, indem ich ChromeDriver-Binärdateien installiert und zu PATH hinzugefügt habe. Aber dann musste ich den Google-Chrome-Browser installieren - ChromeDriver allein reicht nicht aus, um Tests durchzuführen. Der Fehler ist also möglicherweise ein Problem mit dem Bildschirmpuffer im Terminalfenster, aber Sie können Xvfb installieren, bei dem es sich um einen virtuellen Bildschirmpuffer handelt. Wichtig ist, dass Sie Ihre Tests nicht als Root ausführen, da möglicherweise ein weiterer Chrome-Browserfehler angezeigt wird. Also nein als root laufe ich:
Was hier wichtig ist, ist, dass in meinem Fall die mit DISPLAY verbundene Nummer mit dem Parameter Xvfb: NN identisch sein sollte. 99 in diesem Fall. Ich hatte ein anderes Problem, weil ich Xvfb mit einem anderen DISPLAY-Wert ausgeführt habe und wollte, dass es aufhört. So starten Sie Xvfb neu:
Finden Sie also eine Prozess-PID mit grep. Töte den Xvfb-Prozess. Und dann gibt es eine Sperre in /tmp/.X11-unix/XNN. Löschen Sie diese Sperre und Sie können den Server erneut starten. Wenn Sie nicht als Root ausgeführt werden, ähnliche Anzeigen festlegen, Google-Chrome installieren und mit Maven Selentests starten können. Meine Tests verliefen gut mit diesen Regeln und Operationen.
quelle
Ich bin mir nicht sicher, ob dies alle anderen aufhält, aber ich habe dies behoben, indem ich chromedriver aktualisiert und dann sichergestellt habe, dass es sich an einem Ort befindet, von dem mein Benutzer lesen kann (es scheint, dass viele Leute, die darauf stoßen, es aus Berechtigungsgründen wie mir sehen). .
Unter Ubuntu 16.04: 1. Chromedriver herunterladen (Version 2.37 für mich) 2. Datei entpacken 3. An einem sinnvollen Ort installieren (ich habe / usr / local / bin / chromedriver gewählt)
Muss nicht einmal meinem Benutzer gehören, solange es global ausführbar ist (
sudo chmod +x /usr/local/bin/chromedriver
)quelle
Ich erhöhe den maximalen Speicher, um Node-Chrome zu starten
-Xmx3g
, und es funktioniert für michquelle
Du brauchst kein Xvfb
Der Start kann aufgrund einer Nichtübereinstimmung zwischen der Chrome-Version und der Chromedriver-Version fehlschlagen. Das Herunterladen und Installieren derselben oder der neuesten Versionen würde das Problem lösen.
quelle