Как скрыть окно Firefox (Selenium WebDriver)?
Когда я выполняю несколько тестов одновременно, я не хочу, чтобы окно браузера Firefox было видимым. Я могу свести его к минимуму с помощью selenium.minimizeWindow()
, но я не хочу этого делать.
Есть ли способ скрыть окно Firefox? Я использую FireFox WebDriver.
Ответы
Ответ 1
Наконец, я нашел решение для тех, кто использует Windows Machine для запуска тестов с использованием любого метода. Ну, реализация не в Java, но вы можете сделать это очень легко.
Используйте инструмент AutoIt
. Он имеет все возможности для обработки окон. Это бесплатный инструмент.
-
Установить AutoIt: http://www.autoitscript.com/site/autoit/downloads/
-
Откройте редактор и напишите ниже код для Скрытия любого окна.
AutoItSetOption("WinTitleMatchMode", 2)
WinSetState("Title Of Your Window", "", @SW_HIDE)
-
Чтобы отобразить его, вы можете использовать нижнюю строку кода.
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')