web-dev-qa-db-de.com

Wie verbergen Sie Firefox-Fenster (Selenium WebDriver)?

Wenn ich mehrere Tests gleichzeitig ausführe, möchte ich das Firefox-Browserfenster nicht sichtbar lassen. Ich kann es mit Selenium.minimizeWindow() minimieren, aber ich möchte es nicht.

Gibt es eine Möglichkeit, Firefox-Fenster auszublenden? Ich verwende FireFox WebDriver.

38
OverrockSTAR

Schließlich habe ich die Lösung für diejenigen gefunden, die Windows-Computer zum Ausführen der Tests mit einer beliebigen Methode verwenden. Nun, die Implementierung erfolgt nicht in Java, aber Sie können dies sehr leicht tun.

Verwenden Sie AutoIt. Es hat alle Möglichkeiten, Fenster zu bedienen. Es ist ein kostenloses Tool.

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

  2. Öffnen Sie den Editor und schreiben Sie den Code , Um ein Fenster auszublenden.

    AutoItSetOption("WinTitleMatchMode", 2)
    WinSetState("Title Of Your Window", "", @SW_HIDE) 
    
  3. Um es wieder einzublenden, können Sie die folgende Codezeile verwenden.

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

    WinTitleMatchMode hat verschiedene Optionen, die zum Anpassen des Windows-Titels verwendet werden können.

    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)
    

Ich habe also eine .exe-Datei eines kleinen Programms erstellt und einen Parameter als Befehlszeilenargument wie folgt übergeben.

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

in HideNSeek.exe - Ich habe folgenden AutoIt-Code:

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[] ist ein Array, das alle Befehlszeilenparameter enthält ...

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

Wenn im Fenstertitel ein Leerzeichen enthalten ist, müssen Sie Anführungszeichen verwenden, um ihn wie oben als Befehlszeilenparameter zu übergeben.

Unter der Codezeile wird AutoIt exe ausgeführt. Wenn ich im ersten Parameter '0' übergebe, wird das Fenster ausgeblendet, und wenn ich '1' übergeben werde, werden die zum Titel passenden Fenster angezeigt.

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

Ich hoffe, dies wird dir helfen. Vielen Dank!

16
OverrockSTAR

Python

Der einfachste Weg, den Browser zu verbergen, ist install PhantomJS . Dann ändern Sie diese Zeile:

driver = webdriver.Firefox()

zu:

driver = webdriver.PhantomJS()

Der Rest Ihres Codes muss nicht geändert werden und kein Browser wird geöffnet. Verwenden Sie zum Debuggen driver.save_screenshot('screen.png') in verschiedenen Schritten Ihres Codes oder wechseln Sie einfach wieder zum Firefox-Web-Treiber.

Unter Windows müssen Sie den Pfad zu phantomjs.exe angeben:

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

Java

Schauen Sie sich Ghost Driver an: So führen Sie Ghostdriver mit Selenium mit Java aus


C#

FirefoxDriver ausblenden (mit Selenium) oder in C # -Formular ablegen

60

Ich habe xvfb verwendet, um das Problem so zu lösen.

Installieren Sie zuerst Xvfb:

# apt-get install xvfb

auf Debian/Ubuntu; oder

# yum install xorg-x11-Xvfb

auf Fedora/RedHat. Wählen Sie dann eine Anzeigenummer aus, bei der es unwahrscheinlich ist, dass sie jemals kollidiert (selbst wenn Sie später eine echte Anzeige hinzufügen). Führen Sie auf dieser Anzeige Xvfb aus, und deaktivieren Sie die Zugriffskontrolle:

# Xvfb :99 -ac

Nun müssen Sie sicherstellen, dass Ihre Anzeige auf 99 eingestellt ist, bevor Sie den Selenium-Server (der den Browser selbst startet) ausführen. Am einfachsten ist es, DISPLAY =: 99 in die Umgebung für Selenium zu exportieren. Stellen Sie zunächst sicher, dass die Dinge von der Befehlszeile aus funktionieren:

$ export DISPLAY=:99
$ firefox

oder nur

$ DISPLAY=:99 firefox

Unten gibt es einen Link, der mir geholfen hat
http://www.alittlemadness.com/2008/03/05/running-Selenium-headless/

11

fügen Sie diese hinzu und es funktioniert, wenn Sie Chrom verwenden, auch nützlich in Firefox

from Selenium.webdriver.chrome.options import Options
'''option to make driver work background'''
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
4
shinji

Wenn Sie Selenium RC oder Remote WebDriver verwenden, können Sie die Browserinstanz auf einer Remote- oder virtuellen Maschine ausführen. Das bedeutet, dass Sie sich keine Sorgen machen müssen, dass die Browserfenster ausgeblendet werden, da diese nicht auf Ihrem lokalen Computer gestartet werden.

3
Dave Hunt

Fügen Sie einfach den folgenden Code hinzu, der gut funktioniert. 

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

Der Standardbrowser von PhantomJS ist IE, obwohl viele Browserfunktionen dort nicht funktionieren. Wenn Sie ein kopfloses (verborgenes) Firefox-Fenster öffnen möchten, können Sie die neue Funktion von Firefox 56+ verwenden.

Mit dieser Funktion können Sie einen headless-Treiber wie folgt erhalten:

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

Neue Versionen von Chrome haben auch die Option headless.

3
IT man

Wenn Sie KDE Desktop verwenden, können Sie Firefox Windows so einrichten, dass es beim Öffnen minimiert wird. Das machte mir den Tag in Bezug auf dieses Problem. Mach einfach folgendes:

  1. Öffnen Sie Firefox
  2. Klicken Sie auf das Firefox-Symbol in der oberen linken Ecke der Menüleiste -> Erweitert -> Spezielle Anwendungseinstellungen ...
  3. Gehen Sie zur Registerkarte "Größe & Position".
  4. Klicken Sie auf "Minimiert" und wählen Sie "Anfangs anwenden" (JA).

Diese Einstellungen gelten ab sofort für neue Firefox-Fenster und Sie werden beim Ausführen von Tests mit Webdriver nicht mehr mit Pop-ups belästigt.

2
Clint Eastwood

Firefox hat einen Headless-Modus. Wenn Sie es verwenden möchten, müssen Sie es nur für binäre Optionen wie folgt einstellen:

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

Am einfachsten fand ich die Verwendung von PhantomJS nach Stéphanes Vorschlag. Ich habe die Binärdatei heruntergeladen und phantomjs in meinen PATH gestellt, in meinem Fall (Mac OS) in/usr/bin /. Ich möchte die Option behalten, zu sehen, was los ist, also habe ich es in Python so verpackt:

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

Verweise:
http://blog.likewise.org/2013/04/webdriver-testing-mit-python-and-ghostdriver/
http://www.realpython.com/blog/python/headless-Selenium-testingwithmit-python-und-phantomjs/

1
Adam Wildavsky

Java

Ich hatte ein ähnliches Problem mit ChromeDriver (ich musste das Browserfenster minimieren, während die Tests ausgeführt werden). Ich konnte keinen besseren Weg finden, also habe ich am Ende die Tastenkombination Alt + Space, N verwendet. Dies sollte nur unter Windows funktionieren. In diesem Beispiel wird die Java AWT Robot-Klasse verwendet, um die Tastenkombinationen zu spielen:

//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

in Optionen (Firefox-Optionen, Chrome-Optionen)

setzen Sie boolean headless auf true, indem Sie die Methode set_headless aufrufen. 

0
rinjan

Mach einfach (Python):

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

In Java können Sie mit HtmlUnitDriver eine Headless-Browsersitzung starten, durch die der Browser nicht wirklich geöffnet wird.

Fügen Sie Ihrer pom.xml die folgende Abhängigkeit hinzu (oder laden Sie sich Folgendes herunter und verweisen Sie auf Folgendes):

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

... und testen Sie es wie eine WebDriver-Treiberinstanz:

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

Eine weitere ähnliche Frage in SO: Vermeiden Sie das Öffnen des Browsers auf einem Remote-Server während eines Selenium-Aufrufs .

0
Fuzzy Analysis