Можно ли скрыть браузер в Selenium RC?
-
07-07-2019 - |
Вопрос
Я использую Selenium RC для автоматизации некоторых операций браузера, но хочу, чтобы браузер был невидимым.Это возможно?Как?А как насчет Selenium Grid?Могу ли я также скрыть окно Selenium RC?
Решение
Есть несколько вариантов:
Вы можете использовать Selenium Grid, чтобы браузер открывался на совершенно другом компьютере (или виртуальной машине), к которому вы затем можете подключиться через VNC или подключение к удаленному рабочему столу, если хотите увидеть браузер.Также еще один вариант:если вы запустите приоритетный процесс Jenkins на этом удаленном сервере, он сможет выполнить ваш тестовый проект на рабочем столе.
Вы можете запустить Selenium «без головы» в Linux в XVFB.Я никогда не пробовал этого делать и сомневаюсь, что это того стоит. http://www.alittlemadness.com/2008/03/05/running-selenium-headless/
Вы можете обернуть Selenium RC в службу Windows. http://support.microsoft.com/kb/137890 .За исключением того, что ограничения разрешений в более поздних версиях Windows, вероятно, не позволят Selenium получить доступ к рабочему столу, как это позволяла нам Windows 2000.
Другой вариант — использовать что-то вроде WebDriver HTMLUnitDriver, который не запускает «настоящий» браузер. http://code.google.com/p/webdriver/ .Также есть опция PhantomJS, а также «безголовый Chrome», который вы можете использовать.
Конечно, есть также возможность использовать такой сервис, как SauceLabs, где вы можете запускать свои тесты в облаке.После завершения тестов вы можете посмотреть видео их выполнения.
Другие советы
В Linux вы можете запустить WebDriver в автономном (виртуальном) режиме, чтобы скрыть браузер. Это можно сделать с помощью Xvfb (виртуальный кадровый буфер X).
Вы можете управлять Xvfb напрямую из кода Python, используя xvfbwrapper
:
https://github.com/cgoldberg/xvfbwrapper
Код Python для запуска без заголовка будет выглядеть следующим образом:
from selenium import webdriver
from xvfbwrapper import Xvfb
display = Xvfb()
display.start()
# now Firefox will run in a virtual display.
# you will not see the browser.
driver = webdriver.Firefox()
driver.get('http://www.google.com')
print(driver.title)
driver.quit()
display.stop()
Установить зависимости в Debian / Ubuntu:
$ sudo apt-get install xvfb
$ pip install xvfbwrapper
Мне легко удалось скрыть окно браузера.
Только установить PhantomJS.Затем измените эту строку:
driver = webdriver.Firefox()
к:
driver = webdriver.PhantomJS()
Оставшуюся часть кода менять не нужно, и браузер не откроется.В целях отладки используйте driver.save_screenshot('screen.png')
на разных этапах вашего кода.
+1 для Selenium RC в качестве службы Windows.
Поскольку тесты выполняются полностью скрытно, я думаю, что у вас мало решений, если вы работаете в Windows. Р>
Что бы я сделал, чтобы компьютер в вашей локальной сети был постоянно подключен к сети и работал сервер selenium RC. Таким образом, вы используете IP этого компьютера вместо localhost для запуска ваших тестов. Например:
browser = selenium("10.15.12.34",4444,"*firefox","http://saucelabs.com")
(учитывая, что это ip компьютера, на котором работает сервер).
Имея эту настройку, вы запускаете свои тесты на своем компьютере, браузеры и окно сервера RC находятся на другом компьютере, и когда вы закончите, вернитесь к своему.
В Linux вы можете запустить тестовый браузер на виртуальном дисплее. Вам потребуется пакет xvfb
для создания виртуального X-сервера. На дистрибутивах на основе Debian просто запустите
sudo apt-get install xvfb
Есть хороший инструмент ephemeral-x.sh
это удобно настроить любую команду для запуска на виртуальном дисплее. Загрузите его и сделайте его исполняемым:
wget https://raw.github.com/jordansissel/xdotool/master/t/ephemeral-x.sh
chmod +x ephemeral-x.sh
Тогда вы можете просто использовать его для запуска сервера Selenium:
./ephemeral-x.sh java -jar selenium-standalone.jar
Все окна браузера, созданные Selenium, теперь будут использовать виртуальный дисплей и будут невидимы для вас.
Если вы работаете в Windows, вы можете запустить тесты под другой учетной записью пользователя . Это означает, что браузер и сервер Java не будут видны вашей учетной записи.
Вот так я запускаю свои тесты с maven на рабочем столе Linux (Ubuntu). Я сыт по горло тем, что не могу работать с веб-драйверами Firefox, которые всегда фокусируются.
Я установил xvfb
xvfb-run -a mvn clean install
Вот так
Во многих случаях PhantomJS не вполне соответствует вашим потребностям, я хотел бы остановиться на опции хромированной головки без головы, упомянутой в ответе Дэйва Ханта. Р>
Chrome 57 только что запустил эту функцию. Вы можете использовать его, передав флаг --headless через ChromeDriver, для получения дополнительной информации см. Обсуждение в этот вопрос
Существует связанный с PhantomJS проект под названием GhostDriver , предназначенный для запуска экземпляров PhantomJS в Selenium Grid. используя протокол проводного веб-драйвера JSON. Это, вероятно, то, что вы ищете, хотя этому вопросу уже 4 года.
В MacOSX мне не удалось скрыть окно браузера, но, по крайней мере, я понял, как переместить его на другой экран, чтобы он не сильно нарушал мой рабочий процесс. Пока Firefox выполняет тесты, просто щелкните его значок в док-станции, удерживая клавишу Control, выберите «Параметры» и «Назначить для отображения 2».
curl -k https://gist.githubusercontent.com/terrancesnyder/995250/raw/cdd1f52353bb614a5a016c2e8e77a2afb718f3c3/ephemeral-x.sh -o ~/ephemeral-x.sh
chmod +x ~/ephemeral-x.sh
~/ephemeral-x.sh TestsStarterCommand
Кстати, эта функция нужна любому разработчику, работающему с e2e, который логически будет запускать браузеры. В среде разработки раздражает иметь дело с окном, которое постоянно появляется и с которым вы можете случайно взаимодействовать, делая тест неудачным.
Лучше всего было бы использовать Chrome без головы, или вы могли бы публиковать сообщения непосредственно на сайте для взаимодействия с ним, что позволило бы сэкономить много вычислительных ресурсов для других вещей / процессов. Я использую это при тестировании роботов веб-автоматизации, которые ищут обувь на нескольких сайтах, используя тяжелые элементы процессора, чем больше энергии вы экономите, и тем проще ваша программа, тем проще запускать сразу несколько процессов с большей скоростью и надежность. Р>