Как скрыть окно Firefox (Selenium 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, но вы можете сделать это очень легко.
использовать . Он имеет все возможности для обработки стекла. Это бесплатный инструмент.
Установить 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" + "\"");
Я надеюсь, что это поможет вам. Спасибо!
я использовал 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, которые будут первоначально открыты, минимизированными. Это сделало мой день для меня относительно этой проблемы. Просто сделайте следующее:
- Откройте Firefox
- нажмите на значок Firefox в левом верхнем углу строки меню - > дополнительно - > специальные настройки приложения...
- перейдите на вкладку" размер и положение".
- нажмите "свернуть" и выберите " применить изначально" (УТВЕРДИТЕЛЬНЫЙ ОТВЕТ.)
эти настройки будут применяться для новых окон 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