Je suis sur l'instance EC2. Il n'y a donc pas d'interface graphique.
$pip install selenium
$sudo apt-get install firefox xvfb
Alors 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 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'ai compris:
Error: cannot open display: :0
Réponses:
ouvrez un terminal et exécutez cette commande
xhost +
. Ces commandes doivent être exécutées chaque fois que vous redémarrez votre machine. Si tout fonctionne correctement, vous pouvez l'ajouter aux commandes de démarrageAssurez-vous également que votre fichier / etc / environment contient une ligne
Et puis, exécutez vos tests pour voir si votre problème est résolu.
Veuillez tous noter le commentaire de sardathrion ci-dessous avant de l'utiliser.
la source
xhost +
n'est pas sûr. S'il-vous-plait, ne l'utilisez pas. Si vous devez utiliser xhost, ajoutez la machine spécifique que vous voulez et non + (c'est-à-dire tout ce que vous voulez).Vous pouvez utiliser PyVirtualDisplay (un wrapper Python pour Xvfb) pour exécuter des tests WebDriver headless.
Plus d'informations
Vous pouvez également utiliser xvfbwrapper , qui est un module similaire (mais qui n'a pas de dépendances externes):
ou mieux encore, utilisez-le comme gestionnaire de contexte:
la source
Le moyen le plus simple est probablement d'utiliser xvfb-run:
xvfb-run fait toute la danse de l'autorité X pour vous, essayez-le!
la source
DISPLAY=:1
n'est pas nécessaire; xvfb-run définit la variable d'environnement DISPLAY sur autre chose (généralement:99
) avant de démarrer la commande spécifiée (dans votre cas,java -jar selenium-server...
)Voici la configuration que j'utilise:
Avant d'exécuter les tests, exécutez:
Et après les tests:
Le
init.d
fichier que j'utilise ressemble à ceci:la source
Si vous utilisez Maven, vous pouvez utiliser xvfb-maven-plugin pour démarrer xvfb avant les tests, les exécuter en utilisant
DISPLAY
la variable d'environnement associée et arrêter xvfb après tout.la source