Как скрыть окно Firefox (Selenium WebDriver)?

когда я выполняю несколько тестов одновременно, я не хочу, чтобы окно браузера Firefox было видно.. Я могу минимизировать его, используя selenium.minimizeWindow() но я не хочу этого делать.

есть ли способ скрыть окно Firefox? Я использую FireFox WebDriver.

11 ответов


Python

самый простой способ скрыть браузер-это установить PhantomJS. Затем измените эту строку:

driver = webdriver.Firefox()

в:

driver = webdriver.PhantomJS()

остальную часть вашего кода не нужно будет изменять, и браузер не откроется. Для отладки используйте driver.save_screenshot('screen.png') на разных шагах вашего кода или просто снова переключитесь на Firefox webdriver.

в Windows вам нужно будет указать путь к помощи PhantomJS.exe:

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

Java

взгляните на Ghost Driver:как запустить ghostdriver с Selenium с помощью java


C#

как скрыть FirefoxDriver (с помощью Селена) или поместить его в форму C#


наконец, я нашел решение для тех, кто использует Windows Machine для запуска тестов с помощью любого метода. Ну, реализация не в Java, но вы можете сделать это очень легко.

использовать . Он имеет все возможности для обработки стекла. Это бесплатный инструмент.

  1. Установить AutoIt: http://www.autoitscript.com/site/autoit/downloads/

  2. откройте редактор и напишите ниже кода для скрытия любого окна.

    AutoItSetOption("WinTitleMatchMode", 2)
    WinSetState("Title Of Your Window", "", @SW_HIDE) 
    
  3. , чтобы отобразить его, вы можете использовать ниже код.

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

    WinTitleMatchMode имеет различные параметры, которые могут быть использованы для соответствия заголовку 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)
    

Итак, что я сделал: я создал .exe файл небольшой программы и передал параметр в качестве аргумента командной строки, как показано ниже.

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

на HideNSeek.exe - у меня ниже 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[] - это массив, который будет иметь все параметры командной строки...

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

если в заголовке окна есть пробел, вы должны использовать двойные кавычки, чтобы передать его в качестве параметра командной строки, как указано выше.

ниже строки кода будет выполняться AutoIt exe, и если я передам '0' в 1-м параметре, то он скроет окно, и если я пройду '1' тогда он будет отображать окна, соответствующие заглавие:.

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

Я надеюсь, что это поможет вам. Спасибо!


я использовал xvfb для решения такой проблемы.

во-первых, установите Xvfb:

# apt-get install xvfb

на Debian / Ubuntu; или

# yum install xorg-x11-Xvfb

на Fedora / RedHat. Затем выберите номер дисплея, который вряд ли когда – либо столкнется (даже если вы добавите реальный дисплей позже) - что-то высокое, как 99 должно сделать. Запустите Xvfb на этом дисплее с отключенным контролем доступа:

# Xvfb :99 -ac

теперь вам нужно убедиться, что ваш дисплей установлен на 99 перед запуском сервера Selenium (который сам запускает браузер). Самый простой способ сделать это-экспортировать DISPLAY=:99 в среду для Selenium. Во-первых, убедитесь, что все работает из командной строки Вот так:

$ export DISPLAY=:99
$ firefox

или просто

$ DISPLAY=:99 firefox

ниже есть ссылка, которая помогла me
http://www.alittlemadness.com/2008/03/05/running-selenium-headless/


Если вы используете Selenium RC или Remote WebDriver, вы можете запустить экземпляр браузера на удаленной или виртуальной машине. Это означает, что вам не нужно беспокоиться о скрытии окон браузера, поскольку они не будут запускаться на вашем локальном компьютере.


браузер PhantomJS по умолчанию-IE, хотя многие функции браузера там не работают. Если вы хотите открыть безголовое (скрытое) окно Firefox, вы можете использовать новая функция Firefox 56+.

С помощью этой функции вы можете получить headless водитель такой:

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

новые версии Chrome также имеют .


Если вы используете KDE Desktop, вы можете сделать окна Firefox, которые будут первоначально открыты, минимизированными. Это сделало мой день для меня относительно этой проблемы. Просто сделайте следующее:

  1. Откройте Firefox
  2. нажмите на значок Firefox в левом верхнем углу строки меню - > дополнительно - > специальные настройки приложения...
  3. перейдите на вкладку" размер и положение".
  4. нажмите "свернуть" и выберите " применить изначально" (УТВЕРДИТЕЛЬНЫЙ ОТВЕТ.)

эти настройки будут применяться для новых окон Firefox с этого момента, и вы больше не будете беспокоиться о всплывающих окнах при запуске тестов с Webdriver.


Я нашел самый простой способ-использовать PhantomJS, по предложению Стефана. Я загрузил двоичный файл и поместил phantomjs в мой путь, в моем случае (Mac OS) в /usr/bin/. Мне нравится сохранять возможность видеть, что происходит, поэтому я завернул его так (в Python):

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

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


просто добавьте следующий код, который отлично работает.

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

Firefox имеет безголовый режим. Если вы хотите использовать его, вам просто нужно установить его на бинарные опционы, такие как:

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)

Java

у меня была аналогичная проблема с ChromeDriver (мне нужно было минимизировать окно браузера во время выполнения тестов). Я не мог найти лучшего способа сделать это, поэтому я использовал комбинацию клавиш Alt+Space, N для этого. Это должно работать только в Windows, пример использует класс Java AWT Robot для воспроизведения сочетаний клавиш:

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

в Java, вы можете использовать HtmlUnitDriver чтобы запустить сеанс безголового браузера, который фактически не откроет браузер.

добавьте следующую зависимость к вашему pom.xml (или загрузить и ссылаться на следующее):

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

... и проверьте его, как вы бы экземпляр драйвера WebDriver:

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

еще один подобный вопрос в SO:избегайте открытия браузера на удаленном сервере во время вызова selenium