Как скрыть окно Firefox (Selenium WebDriver)?
Когда я выполняю несколько тестов одновременно, я не хочу оставлять окно браузера Firefox видимым. Я могу свернуть его, используя selenium.minimizeWindow()
но я не хочу это делать
Есть ли способ скрыть окно Firefox? Я использую FireFox WebDriver.
12 ответов
Наконец-то я нашел решение для тех, кто использует 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 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[]
это массив, который будет иметь все параметры командной строки...
$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" + "\"");
Я надеюсь, что это поможет вам. Спасибо!
питон
Самый простой способ скрыть браузер - это установить 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')
Джава
Посмотрите на Ghost Driver: Как запустить Ghostdriver с Selenium, используя Java
C#
Как скрыть FirefoxDriver (используя Selenium) или поместить его в форму C#
Просто добавьте следующий код, который отлично работает.
import os
os.environ['MOZ_HEADLESS'] = '1'
driver = webdriver.Firefox()
Просто сделай (Python):
opts = webdriver.FirefoxOptions()
opts.headless = True
firefox = webdriver.Firefox(options=opts)
Я использовал 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/
Браузером 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
вариант.
Просто добавьте их, и это будет работать, если вы используете 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')
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)
Если вы используете Selenium RC или Remote WebDriver, вы можете запустить экземпляр браузера на удаленной или виртуальной машине. Это означает, что вам не нужно беспокоиться о том, чтобы скрыть окна браузера, поскольку они не будут запускаться на вашем локальном компьютере.
Если вы используете KDE Desktop, вы можете сделать так, чтобы Firefox Windows изначально открывался, будучи свернутым. Это сделало мой день для меня в отношении этой проблемы. Просто сделайте следующее:
- Откройте Firefox
- Нажмите на значок Firefox в верхнем левом углу строки меню -> Дополнительно -> Специальные настройки приложения...
- Перейдите на вкладку "Размер и положение".
- Нажмите "Свернутый" и выберите "Применить изначально" (ДА).
Эти настройки теперь будут применяться для новых окон Firefox, и вы больше не будете беспокоиться о всплывающих окнах при запуске тестов с Webdriver.
Я обнаружил, что самым простым способом было использовать 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/
Джава
У меня была похожая проблема с 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: избегайте открывать браузер на удаленном сервере во время вызова селен
В настройках (Firefox, Chrome)
установите логическое значение без заголовка в true, вызвав метод set_headless.