Comment puis-je faire fonctionner le Sélénium dans Xvfb?
Je suis sur une instance EC2. Donc, il n'y a pas d'interface graphique.
$pip install selenium
$sudo apt-get install firefox xvfb
Puis-je faire cela:
$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
Grand, tout devrait fonctionner, non?
Lorsque j'exécute 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'obtiens ceci:
Error: cannot open display: :0
- Si vous êtes sur un système sans X en cours d'exécution, affichage :0 devrait être disponible. Essayez d'exécuter Xvfb :0 -- voir aussi xvfb-run, comme mentionné par @ema
- Pour les futurs adeptes, j'ai décrit ma solution pour le Serveur Ubuntu: namekdev.net/2016/08/...
Vous devez vous connecter pour publier un commentaire.
ouvrez un terminal et exécutez cette commande
xhost +
. Cette commande doit être exécutée à chaque fois que vous redémarrez votre machine. Si tout fonctionne bien peut être que vous pouvez ajouter à des commandes de démarrageAssurez-vous également dans votre fichier /etc/environment il y a une ligne
Et puis, de l'exécution des tests pour voir si votre problème est résolu.
Tous s'il vous plaît noter le commentaire de sardathrion ci-dessous avant d'utiliser ce.
xhost +
est précaire. Veuillez ne pas l'utiliser. Si vous devez utiliser xhost, ajouter la machine que vous voulez et pas + (aka tout que ce soit).Vous pouvez utiliser PyVirtualDisplay (un wrapper Python pour Xvfb) pour exécuter sans tête WebDriver tests.
plus d'infos
Vous pouvez également utiliser xvfbwrapper, qui est un module semblable (mais n'a pas de dépendances externes):
ou mieux encore, utilisez un gestionnaire de contexte:
La façon la plus simple est probablement d'utiliser xvfb-run:
xvfb-run fait l'ensemble X de l'autorité de la danse pour vous, essayez-le!
DISPLAY=:1
est inutile; xvfb-run définit la variable d'environnement DISPLAY à autre chose (généralement:99
) avant de lancer la commande spécifiée (dans votre cas,java -jar selenium-server...
)C'est la configuration que j'utilise:
Avant de lancer les tests, exécution:
Et d'après les essais de:
La
init.d
fichier j'utilise ressemble à ceci:Si vous utilisez Maven, vous pouvez utiliser xvfb-maven-plugin pour commencer xvfb avant les essais, les exécuter en utilisant des
DISPLAY
variable d'environnement, et de s'arrêter xvfb après tout.