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

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

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

Ответ 1

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

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

  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" + "\"");

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

Ответ 2

Python

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

driver = webdriver.Firefox()

в

driver = webdriver.PhantomJS()

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

В Windows вам нужно указать путь к phantomjs.exe:

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

Java

Посмотрите на Ghost Driver: Как запустить ghostdriver с Selenium с помощью java


C#

Как скрыть FirefoxDriver (используя Selenium) или поместить его в С# Form

Ответ 3

Я использовал 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

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

Ответ 4

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

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

Ответ 5

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

Ответ 6

Браузер по умолчанию 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 также есть опция headless.

Ответ 7

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

  • Открыть Firefox
  • Нажмите значок Firefox в верхнем левом углу строки меню → Дополнительно → Специальные настройки приложения...
  • Перейдите на вкладку "Размер и положение".
  • Нажмите "Свернуть" и выберите "Применить сначала" (YES).

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

Ответ 8

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)

Ответ 9

Джава

У меня была аналогичная проблема с 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);

Ответ 10

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

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

Литература:
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/

Ответ 11

Просто сделай (Python):

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

Ответ 12

В 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: Избегайте открытия браузера на удаленном сервере во время вызова селена

Ответ 13

в настройках (Firefox, Chrome)

установите логическое значение без заголовка в true, вызвав метод set_headless.

Ответ 14

просто добавьте их, и это будет работать, если вы используете Chrome, также полезно в 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')