Ich bin auf EC2-Instanz. Es gibt also keine GUI.
$pip install selenium
$sudo apt-get install firefox xvfb
Dann mache ich das:
$Xvfb :1 -screen 0 1024x768x24 2>&1 >/dev/null &
$DISPLAY=:1 java -jar selenium-server-standalone-2.0b3.jar
05:08:31.227 INFO - Java: Sun Microsystems Inc. 19.0-b09
05:08:31.229 INFO - OS: Linux 2.6.32-305-ec2 i386
05:08:31.233 INFO - v2.0 [b3], with Core v2.0 [b3]
05:08:32.121 INFO - RemoteWebDriver instances should connect to: http://127.0.0.1:4444/wd/hub
05:08:32.122 INFO - Version Jetty/5.1.x
05:08:32.123 INFO - Started HttpContext[/selenium-server/driver,/selenium-server/driver]
05:08:32.124 INFO - Started HttpContext[/selenium-server,/selenium-server]
05:08:32.124 INFO - Started HttpContext[/,/]
05:08:32.291 INFO - Started org.openqa.jetty.jetty.servlet.ServletHandler@1186fab
05:08:32.292 INFO - Started HttpContext[/wd,/wd]
05:08:32.295 INFO - Started SocketListener on 0.0.0.0:4444
05:08:32.295 INFO - Started org.openqa.jetty.jetty.Server@1ffb8dc
Großartig, jetzt sollte alles funktionieren, oder?
Wenn ich meinen Code ausführe:
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.keys import Keys
browser = webdriver.Firefox()
browser.get("http://www.yahoo.com")
Ich verstehe das:
Error: cannot open display: :0
Antworten:
Öffnen Sie ein Terminal und führen Sie diesen Befehl aus
xhost +
. Dieser Befehl muss jedes Mal ausgeführt werden, wenn Sie Ihren Computer neu starten. Wenn alles gut funktioniert, können Sie dies zu den Startbefehlen hinzufügenStellen Sie außerdem sicher, dass in Ihrer Datei / etc / environment eine Zeile vorhanden ist
Führen Sie dann Ihre Tests aus, um festzustellen, ob Ihr Problem behoben ist.
Bitte beachten Sie den Kommentar von sardathrion unten, bevor Sie diesen verwenden.
quelle
xhost +
ist unsicher. Bitte benutzen Sie es nicht. Wenn Sie xhost verwenden müssen, fügen Sie die gewünschte Maschine hinzu und nicht + (auch bekannt als alles).Sie können PyVirtualDisplay (einen Python-Wrapper für Xvfb) verwenden, um kopflose WebDriver-Tests auszuführen.
Mehr Info
Sie können auch xvfbwrapper verwenden , ein ähnliches Modul (das jedoch keine externen Abhängigkeiten aufweist):
oder noch besser, verwenden Sie es als Kontextmanager:
quelle
Der einfachste Weg ist wahrscheinlich die Verwendung von xvfb-run:
xvfb-run tanzt die ganze X-Autorität für Sie, probieren Sie es aus!
quelle
DISPLAY=:1
ist unnötig; xvfb-run setzt die Umgebungsvariable DISPLAY (normalerweise:99
) auf etwas anderes, bevor der angegebene Befehl (in Ihrem Falljava -jar selenium-server...
) gestartet wirdDies ist das Setup, das ich benutze:
Führen Sie vor dem Ausführen der Tests Folgendes aus:
Und nach den Tests:
Die von
init.d
mir verwendete Datei sieht folgendermaßen aus:quelle
Wenn Sie Maven verwenden, können Sie das xvfb-maven-Plugin verwenden , um xvfb vor den Tests zu starten, sie mit der zugehörigen
DISPLAY
Umgebungsvariablen auszuführen und xvfb schließlich zu stoppen.quelle