J'utilise Selenium RC pour automatiser certaines opérations du navigateur, mais je veux que le navigateur soit invisible. Est-ce possible? Comment? Qu'en est-il de Selenium Grid? Puis-je masquer la fenêtre Selenium RC également?
J'utilise Selenium RC pour automatiser certaines opérations du navigateur, mais je veux que le navigateur soit invisible. Est-ce possible? Comment? Qu'en est-il de Selenium Grid? Puis-je masquer la fenêtre Selenium RC également?
Réponses:
Il existe quelques options:
Vous pouvez utiliser Selenium Grid pour ouvrir le navigateur sur une machine complètement différente (ou machine virtuelle) à laquelle vous pouvez ensuite vous connecter via VNC ou Remote Desktop Connection si vous souhaitez voir le navigateur. Aussi, une autre option: si vous exécutez un processus de premier plan Jenkins sur ce serveur distant, il peut exécuter votre projet de test sur le bureau.
Vous pouvez exécuter Selenium 'headless' sur Linux dans XVFB. Je n'ai jamais essayé de faire cela et je doute que cela en vaille vraiment la peine. http://www.alittlemadness.com/2008/03/05/running-selenium-headless/
Vous pouvez envelopper Selenium RC dans un service Windows. http://support.microsoft.com/kb/137890 . Sauf que les contraintes d'autorisations sur les versions ultérieures de Windows empêcheront probablement Selenium d'accéder au bureau comme Windows 2000 nous le permettait.
Une autre option serait d'utiliser quelque chose comme WebDriver HTMLUnitDriver, qui ne lance pas un «vrai» navigateur. http://code.google.com/p/webdriver/ . Il existe également une option PhantomJS ainsi qu'un «Chrome sans tête» que vous pouvez utiliser.
Bien sûr, il est également possible d'utiliser un service comme SauceLabs, où vous pouvez exécuter vos tests dans le cloud. Une fois vos tests terminés, vous pouvez regarder une vidéo de leur exécution.
Sous Linux, vous pouvez exécuter WebDriver dans un affichage sans tête (virtuel) pour masquer le navigateur. Cela peut être fait avec Xvfb (X virtual framebuffer).
Vous pouvez contrôler Xvfb directement à partir du code Python en utilisant xvfbwrapper
:
https://github.com/cgoldberg/xvfbwrapper
Le code Python pour l'exécution sans tête ressemblerait à ceci:
from selenium import webdriver
from xvfbwrapper import Xvfb
display = Xvfb()
display.start()
# now Firefox will run in a virtual display.
# you will not see the browser.
driver = webdriver.Firefox()
driver.get('http://www.google.com')
print(driver.title)
driver.quit()
display.stop()
Installez les dépendances sur Debian / Ubuntu:
$ sudo apt-get install xvfb
$ pip install xvfbwrapper
J'ai facilement réussi à cacher la fenêtre du navigateur.
Installez simplement PhantomJS . Ensuite, changez cette ligne:
driver = webdriver.Firefox()
à:
driver = webdriver.PhantomJS()
Le reste de votre code n'aura pas besoin d'être modifié et aucun navigateur ne s'ouvrira. À des fins de débogage, utilisez driver.save_screenshot('screen.png')
à différentes étapes de votre code.
driver = webdriver.PhantomJS(r"C:\\phantomjs\phantomjs.exe")
+1 pour Selenium RC en tant que service Windows.
Pour que les tests soient complètement cachés, je pense que vous n'avez pas beaucoup de solutions si vous êtes sous Windows.
Ce que je ferais pour consacrer un ordinateur de votre réseau local à être en ligne tout le temps et à faire fonctionner un serveur sélénium RC. Vous utilisez donc l'adresse IP de cet ordinateur au lieu de localhost pour exécuter vos tests. Par exemple:
browser = selenium("10.15.12.34",4444,"*firefox","http://saucelabs.com")
(considérant que c'est l'ip de l'ordinateur exécutant le serveur).
Ayant cette configuration, vous exécutez vos tests sur votre ordinateur, les navigateurs et la fenêtre du serveur RC sont sur un autre ordinateur et le retour au vôtre une fois terminé.
Sous Linux, vous pouvez exécuter votre navigateur de test sur un écran virtuel. Vous aurez besoin du xvfb
package pour créer un serveur X virtuel. Sur les distributions basées sur Debian, exécutez simplement
sudo apt-get install xvfb
Il existe un bel outil ephemeral-x.sh
qui configurera facilement toute commande à exécuter sur l'écran virtuel. Téléchargez-le et rendez-le exécutable:
wget https://raw.github.com/jordansissel/xdotool/master/t/ephemeral-x.sh
chmod +x ephemeral-x.sh
Ensuite, vous pouvez simplement l'utiliser pour démarrer le serveur Selenium:
./ephemeral-x.sh java -jar selenium-standalone.jar
Toutes les fenêtres de navigateur créées par Selenium utiliseront désormais l'affichage virtuel et seront invisibles pour vous.
Si vous êtes sous Windows, une option consiste à exécuter les tests sous un autre compte utilisateur . Cela signifie que le navigateur et le serveur java ne seront pas visibles pour votre propre compte.
C'est ainsi que j'exécute mes tests avec maven sur un bureau Linux (Ubuntu). J'en ai eu marre de ne pas pouvoir travailler avec le webdriver Firefox en me concentrant toujours.
J'ai installé xvfb
xvfb-run -a mvn installation propre
C'est tout
Dans de nombreux cas, PhantomJS ne répondra pas complètement à vos besoins, je voudrais développer l'option chrome sans tête mentionnée dans la réponse de Dave Hunt.
chrome 57 vient de lancer cette fonctionnalité. Vous pouvez l'utiliser en passant l'indicateur --headless via ChromeDriver, pour plus d'informations, consultez la discussion dans cette question
Il existe un projet lié à PhantomJS appelé GhostDriver , destiné à exécuter des instances PhantomJS dans une grille Selenium à l'aide du protocole JSON de Webdriver Wire. C'est probablement ce que vous recherchez, bien que cette question ait 4 ans maintenant.
Sur MacOSX, je n'ai pas été en mesure de masquer la fenêtre du navigateur, mais au moins j'ai compris comment la déplacer vers un autre affichage afin de ne pas trop perturber mon flux de travail. Pendant que Firefox exécute des tests, cliquez simplement sur son icône dans le dock, sélectionnez Options et Attribuer à l'affichage 2.
curl -k https://gist.githubusercontent.com/terrancesnyder/995250/raw/cdd1f52353bb614a5a016c2e8e77a2afb718f3c3/ephemeral-x.sh -o ~/ephemeral-x.sh
chmod +x ~/ephemeral-x.sh
~/ephemeral-x.sh TestsStarterCommand
En passant, c'est une fonctionnalité nécessaire à tout développeur exécutant e2e qui engendrera logiquement des navigateurs. Dans un environnement de développement, il est ennuyeux de gérer la fenêtre qui ne cesse de s'afficher et avec laquelle vous pouvez interagir accidentellement en faisant échouer le test.
L'utilisation de Chrome sans tête serait votre meilleur pari, ou vous pouvez publier directement sur le site pour interagir avec lui, ce qui économiserait beaucoup de puissance de calcul pour d'autres choses / processus. Je l'utilise lorsque je teste des robots d'automatisation Web qui recherchent des chaussures sur plusieurs sites en utilisant des éléments lourds de processeur, plus vous économisez d'énergie et plus votre programme est simple, plus il est facile d'exécuter plusieurs processus à la fois avec une vitesse supérieure et fiabilité.