Est-il possible de masquer le navigateur dans Selenium RC?

92

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?

Yatendra Goel
la source
Ce n'est peut-être pas acceptable, mais ne pourriez-vous pas simplement déplacer le navigateur hors de l'écran (en utilisant l'automatisation de l'interface utilisateur Windows standard?) Comme placer la fenêtre à (-10000, -10000)?
BrainSlugs83
2
Puisque cette question est ancienne maintenant, permettez-moi de vous rediriger vers une réponse à jour appropriée au bas de cette page .
Stéphane Bruckert

Réponses:

87

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.

Dave Hunt
la source
Voici les instructions pour créer un fichier chauve-souris pour installer le service: brantleytec.blogspot.com/2012/11/…
Brantley Blanchard
58

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
Corey Goldberg
la source
Lorsque le code s'exécute dans un navigateur virtuel, puis-je continuer à utiliser mon PC normalement pendant que le script d'interaction du navigateur s'exécute?
Mugen
Les ressources sont prises, votre machine deviendra plus lente!
Tim Long
22

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.

Stéphane Bruckert
la source
5
Il est à noter que vous devez mettre le chemin de PhantomJs.exe pour que cela fonctionne. exempledriver = webdriver.PhantomJS(r"C:\\phantomjs\phantomjs.exe")
K DawG
1
Oui, mais uniquement sous Windows.
Stéphane Bruckert le
1
vous n'avez pas besoin de spécifier l'emplacement du binaire tant qu'il peut être trouvé à partir de la variable d'environnement $ PATH de votre environnement.
Corey Goldberg
13

+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é.

Santi
la source
12

Sous Linux, vous pouvez exécuter votre navigateur de test sur un écran virtuel. Vous aurez besoin du xvfbpackage 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.shqui 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.

pixelistik
la source
Ce script a un problème de citation. Si je dis ./ephemeral-x.sh foo '*' il dit "Running: foo" suivi du contenu de mon répertoire.
Nick Retallack
4

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.

Igor Brejc
la source
3

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

Paul Whelan
la source
C'est souvent le moyen le plus simple de s'assurer que xvfb est en cours d'exécution et utilisé par Selenium / WebDriver.
Samuli Pahaoja
1

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

Marlies
la source
0

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.

Djangofan
la source
0

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.

chetstone
la source
0
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.

Nestor Urquiza
la source
0

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é.

LiamººT
la source