Я использую Selenium RC для автоматизации некоторых операций браузера, но хочу, чтобы браузер был невидимым. Это возможно? Как? А что насчет Selenium Grid? Могу ли я также скрыть окно Selenium RC?
Я использую 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')
на разных этапах кода.
driver = webdriver.PhantomJS(r"C:\\phantomjs\phantomjs.exe")
+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 чистая установка
Это оно
Во многих случаях PhantomJS не полностью соответствует вашим потребностям, я хотел бы подробнее остановиться на варианте безголового хрома, упомянутом в ответе Дэйва Ханта.
Chrome 57 только что запустил эту функцию. Вы можете использовать его, передав флаг --headless через ChromeDriver, для получения дополнительной информации см. Обсуждение в этом вопросе
Существует связанный с PhantomJS проект под названием GhostDriver , который предназначен для запуска экземпляров PhantomJS в Selenium Grid с использованием протокола JSON webdriver wire. Вероятно, это то, что вы ищете, хотя этому вопросу уже 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 без головы, или вы можете публиковать сообщения непосредственно на сайте для взаимодействия с ним, что сэкономит много вычислительной мощности для других вещей / процессов. Я использую это при тестировании ботов веб-автоматизации, которые ищут обувь на нескольких сайтах с использованием тяжелых элементов ЦП, и чем больше энергии вы экономите и чем проще ваша программа, тем проще запускать несколько процессов одновременно с гораздо большей скоростью и надежность.