Je suis sur l'instance EC2. Donc, il n'y a pas d'interface graphique.
$pip install Selenium
$Sudo apt-get install firefox xvfb
Puis je fais ceci:
$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
Génial, tout devrait fonctionner maintenant, non?
Quand je lance mon code:
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")
J'ai compris:
Error: cannot open display: :0
ouvrez un terminal et exécutez cette commande xhost +
. Cette commande doit être exécutée chaque fois que vous redémarrez votre ordinateur. Si tout fonctionne bien, vous pouvez ajouter ceci aux commandes de démarrage.
Assurez-vous également qu'il y a une ligne dans votre fichier/etc/environment
export DISPLAY=:0.0
Et ensuite, lancez vos tests pour voir si votre problème est résolu.
Veuillez noter le commentaire de sardathrion ci-dessous avant de l'utiliser.
Vous pouvez utiliser PyVirtualDisplay (a Python pour Xvfb)) pour exécuter des tests WebDriver sans tête.
#!/usr/bin/env python
from pyvirtualdisplay import Display
from Selenium import webdriver
display = Display(visible=0, size=(800, 600))
display.start()
# now Firefox will run in a virtual display.
# you will not see the browser.
browser = webdriver.Firefox()
browser.get('http://www.google.com')
print browser.title
browser.quit()
display.stop()
Vous pouvez également utiliser xvfbwrapper , qui est un module similaire (mais n'a pas de dépendances externes):
from xvfbwrapper import Xvfb
vdisplay = Xvfb()
vdisplay.start()
# launch stuff inside virtual display here
vdisplay.stop()
ou mieux encore, utilisez-le comme gestionnaire de contexte:
from xvfbwrapper import Xvfb
with Xvfb() as xvfb:
# launch stuff inside virtual display here.
# It starts/stops in this code block.
Le moyen le plus simple est probablement d'utiliser xvfb-run:
DISPLAY=:1 xvfb-run Java -jar Selenium-server-standalone-2.0b3.jar
xvfb-run fait danser toute l'autorité de X pour vous, essayez-le!
C'est la configuration que j'utilise:
Avant d'exécuter les tests, exécutez:
export DISPLAY =: 99 /etc/init.d/xvfb start
Et après les tests:
/etc/init.d/xvfb stop
Le fichier init.d
Que j'utilise ressemble à ceci:
#!/bin/bash XVFB =/usr/bin/Xvfb XVFBARGS = "$ DISPLAY -ac -screen 0 1024x768x16" PIDFILE = $ { HOME}/xvfb _ $ {DISPLAY: 1} .pid Cas "$ 1" dans Début) Echo -n "Démarrage du tampon de trame X virtuel: Xvfb" /sbin/start-stop-daemon --start --quiet --pidfile $ PIDFILE --make-pidfile --background --exec $ XVFB - $ XVFBARGS echo "." ;; stop) echo -n "Arrêt du tampon de trame X virtuel: Xvfb" /sbin/start-stop-daemon --stop --quiet --pidfile $ PIDFILE Echo "." ;; Recommencer) $ 0 stop $ 0 démarrer ;; *) echo "Utilisation: /etc/init.d/xvfb {start | stop | restart}" exit 1 esac exit 0
Si vous utilisez Maven, vous pouvez utiliser xvfb-maven-plugin pour démarrer xvfb avant les tests, exécutez-les à l'aide de la variable d'environnement DISPLAY
associée et arrêtez xvfb après tout.