web-dev-qa-db-fra.com

Comment masquer la fenêtre Firefox (Selenium WebDriver)?

Lorsque j'exécute plusieurs tests simultanément, je ne veux pas garder la fenêtre du navigateur Firefox visible. Je peux le réduire en utilisant Selenium.minimizeWindow() mais je ne veux pas le faire.

Est-il possible de cacher la fenêtre de Firefox? J'utilise FireFox WebDriver.

38
OverrockSTAR

Enfin, j'ai trouvé la solution pour ceux qui utilisent Windows Machine pour exécuter les tests avec n'importe quelle méthode. Eh bien, l'implémentation n'est pas en Java, mais vous pouvez le faire très facilement.

Utilisez l'outil AutoIt. Il a toutes les capacités pour gérer les fenêtres. C'est un outil gratuit.

  1. Installez AutoIt: http://www.autoitscript.com/site/autoit/downloads/

  2. Ouvrez l'éditeur et écrivez ci-dessous le code .__ pour masquer une fenêtre.

    AutoItSetOption("WinTitleMatchMode", 2)
    WinSetState("Title Of Your Window", "", @SW_HIDE) 
    
  3. Pour afficher, vous pouvez utiliser la ligne de code ci-dessous.

    AutoItSetOption("WinTitleMatchMode", 2)
    WinSetState("Title Of Your Window", "", @SW_SHOW)
    

    WinTitleMatchMode a différentes options qui peuvent être utilisées pour correspondre au titre Windows.

    1 = Match the title from the start (default)`
    2 = Match any substring in the title
    3 = Exact title match
    4 = Advanced mode, see Window Titles & Text (Advanced)
    

Donc, voici ce que j'ai fait: J'ai créé un fichier .exe d'un petit programme et passé un paramètre sous la forme d'un argument de ligne de commande, comme ci-dessous.

Runtime.getRuntime().exec("C:/Diiinnovation/HideNSeek.exe 0 \"" + "Mozilla Firefox" + "\"");

in HideNSeek.exe - J'ai ci-dessous le code AutoIt:

AutoItSetOption("WinTitleMatchMode", 1) 

if $CmdLine[0] > 0 Then
    if $CmdLine[1] == 0 Then
        WinSetState($CmdLine[2], "", @SW_HIDE)    
    ElseIf $CmdLine[1] == 1 Then
        WinSetState($CmdLine[2], "", @SW_SHOW)          
    Else    
    EndIf   
EndIf

$CmdLine[] est un tableau contenant tous les paramètres de ligne de commande ...

$CmdLine[0] = number of Parameter
$CmdLine[1] = 1st Parameter after Exe Name 
...

Si le titre de la fenêtre contient de l’espace, vous devez utiliser des guillemets doubles pour le transmettre en tant que paramètre de ligne de commande, comme ci-dessus.

Ci-dessous, la ligne de code exécutera AutoIt .exe et si je passe '0' en premier paramètre, la fenêtre sera masquée et si je transmettrai '1', les fenêtres correspondant au titre seront affichées.

Runtime.getRuntime().exec("C:/Diiinnovation/HideNSeek.exe 0 \"" + "Mozilla Firefox" + "\"");

J'espère que cela t'aidera. Merci!

16
OverrockSTAR

Python

Le moyen le plus simple de masquer le navigateur consiste à installer PhantomJS . Puis changez cette ligne:

driver = webdriver.Firefox()

à:

driver = webdriver.PhantomJS()

Le reste de votre code n'aura pas besoin d'être changé et aucun navigateur ne s'ouvrira. Pour des raisons de débogage, utilisez driver.save_screenshot('screen.png') à différentes étapes de votre code ou passez simplement à nouveau au WebDriver Firefox.

Sous Windows, vous devrez spécifier le chemin d'accès à phantomjs.exe:

driver = webdriver.PhantomJS('C:\phantomjs-1.9.7-windows\phantomjs.exe')

Java

Découvrez Ghost Driver: Comment utiliser ghostdriver avec Selenium en Java


C#

Comment cacher FirefoxDriver (en utilisant Selenium) ou le mettre en forme C #

60

J'ai utilisé xvfb pour résoudre le problème de cette manière.

Tout d'abord, installez Xvfb:

# apt-get install xvfb

sur Debian/Ubuntu; ou

# yum install xorg-x11-Xvfb

sur Fedora/RedHat. Ensuite, choisissez un numéro d’affichage qui ne risque pas de se heurter (même si vous ajoutez ultérieurement un affichage réel) - une valeur aussi élevée que 99 devrait suffire. Exécutez Xvfb sur cet écran, avec le contrôle d'accès désactivé:

# Xvfb :99 -ac

Vous devez maintenant vous assurer que votre écran est défini sur 99 avant d'exécuter le serveur Selenium (qui lance lui-même le navigateur). Pour ce faire, le moyen le plus simple consiste à exporter DISPLAY =: 99 dans l'environnement pour Selenium. Tout d’abord, assurez-vous que les choses fonctionnent depuis la ligne de commande comme suit:

$ export DISPLAY=:99
$ firefox

ou juste

$ DISPLAY=:99 firefox

Ci-dessous un lien qui m'a aidé
http://www.alittlemadness.com/2008/03/05/running-Selenium-headless/

11

Si vous utilisez Selenium RC ou Remote WebDriver, vous pouvez exécuter l'instance de navigateur sur une machine virtuelle ou distante. Cela signifie que vous ne devriez pas avoir à vous soucier de cacher les fenêtres du navigateur, car elles ne se lanceront pas sur votre ordinateur local.

3
Dave Hunt

Ajoutez simplement le code suivant, qui fonctionne bien. 

import os
os.environ['MOZ_HEADLESS'] = '1'
driver = webdriver.Firefox()
3
Harriet.O

Le navigateur par défaut de PhantomJS est IE, bien que de nombreuses fonctionnalités du navigateur n'y fonctionnent pas. Si vous souhaitez ouvrir une fenêtre Firefox (masquée) sans tête, vous pouvez utiliser le nouvelle fonctionnalité de Firefox 56+ .

Avec cette fonctionnalité, vous pouvez obtenir un pilote headless comme ceci:

System.setProperty("webdriver.gecko.driver", firefoxDriverExePath);
FirefoxOptions options = new FirefoxOptions();
options.addArguments("--headless");
FirefoxDriver driver = new FirefoxDriver(options);

Les nouvelles versions de Chrome ont également l'option headless.

3
IT man

Si vous utilisez KDE Desktop, vous pouvez faire en sorte que Firefox Windows soit initialement ouvert en étant réduit au minimum. Cela a fait ma journée à moi concernant ce problème. Il suffit de faire ce qui suit:

  1. Ouvrez Firefox
  2. Cliquez sur l'icône Firefox dans le coin supérieur gauche de la barre de menus -> Avancé -> Paramètres d'application spéciale ...
  3. Allez dans l'onglet "Taille et position".
  4. Cliquez sur "Minimisé" et choisissez "Appliquer initialement" (OUI).

Ces paramètres s'appliqueront désormais aux nouvelles fenêtres Firefox et vous ne serez plus dérangé par les fenêtres contextuelles lors des tests avec Webdriver.

2
Clint Eastwood

Firefox a un mode sans tête. Si vous voulez l'utiliser, il vous suffit de le définir sur les options binaires comme ceci:

binary = FirefoxBinary("C:/Program Files/Mozilla Firefox/firefox.exe")
options = webdriver.FirefoxOptions()
# set headless mode on
options.set_headless(True) 
driver = webdriver.Firefox(firefox_binary=binary,options=options)
2
MSS

J'ai trouvé que le moyen le plus simple était d'utiliser PhantomJS, à la suggestion de Stéphane. J'ai téléchargé le fichier binaire et mis des fantômes dans mon PATH, dans mon cas (Mac OS) dans/usr/bin /. J'aime garder la possibilité de voir ce qui se passe alors je l'ai emballé comme ceci (en Python):

def new_driver():
    if 'VISIBLE_WEBDRIVER' in os.environ:
        return webdriver.Firefox()
    else:
        return webdriver.PhantomJS()

Références:
http://blog.likewise.org/2013/04/webdriver-testing-with-python-and-ghostdriver/
http://www.realpython.com/blog/python/headless-Selenium-testing-with-python-and-phantomjs/

1
Adam Wildavsky

Java

J'ai eu un problème similaire avec ChromeDriver (j'avais besoin de réduire la fenêtre du navigateur pendant l'exécution des tests). Je ne pouvais pas trouver un meilleur moyen de le faire, j'ai donc utilisé la combinaison de touches Alt + Espace, N pour le faire. Cela ne devrait fonctionner que sous Windows. L'exemple utilise la classe Java AWT Robot pour lire les raccourcis clavier:

//Alt + Space to open the window menu
Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_ALT);
robot.keyPress(KeyEvent.VK_SPACE);
robot.keyRelease(KeyEvent.VK_SPACE);
robot.keyRelease(KeyEvent.VK_ALT);
Thread.sleep(200);

// miNimize
robot.keyPress(KeyEvent.VK_N);
robot.keyRelease(KeyEvent.VK_N);
1
vanangelov

dans les options (options de Firefox, options de chrome)

définissez boolean headless sur true en appelant la méthode set_headless. 

0
rinjan

Il suffit de faire (Python):

opts = webdriver.FirefoxOptions()
opts.headless = True
firefox = webdriver.Firefox(options=opts)
0
Johny

En Java, vous pouvez utiliser HtmlUnitDriver pour lancer une session de navigateur sans interface utilisateur qui n’ouvrira pas le navigateur.

Ajoutez la dépendance suivante à votre pom.xml (ou téléchargez et référencez ce qui suit):

<dependency>
    <groupId>net.sourceforge.htmlunit</groupId>
    <artifactId>htmlunit</artifactId>
    <version>2.15</version>
</dependency>

... et testez-le comme une instance de pilote WebDriver:

 driver = new HtmlUnitDriver();
 driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
 driver.get("http://www.google.com");
 // etc..
 driver.quit();

Autre question similaire dans SO: Évitez d’ouvrir le navigateur sur le serveur distant pendant un appel Selenium

0
Fuzzy Analysis