Можно ли спрятать браузер в Selenium RC? - PullRequest
89 голосов
/ 13 сентября 2009

Я использую Selenium RC для автоматизации некоторых операций браузера, но я хочу, чтобы браузер был невидимым. Это возможно? Как? А как насчет Selenium Grid? Могу ли я также скрыть окно Selenium RC?

Ответы [ 12 ]

85 голосов
/ 13 сентября 2009

Есть несколько вариантов:

  • Вы можете использовать Selenium Grid, чтобы браузер открывался на совершенно другой машине (или виртуальной машине), к которой затем можно подключиться через VNC или Remote Desktop Connection, если вы хотите увидеть браузер. Кроме того, еще один вариант: если вы запускаете процесс приоритетного доступа 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, где вы можете запускать свои тесты в облаке. После завершения тестов вы можете посмотреть их видео.

57 голосов
/ 18 января 2012

В 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
21 голосов
/ 28 мая 2014

Мне легко удалось скрыть окно браузера.

Просто установить PhantomJS . Затем измените эту строку:

driver = webdriver.Firefox()

до:

driver = webdriver.PhantomJS()

Остальная часть вашего кода не нуждается в изменении, и браузер не открывается. В целях отладки используйте driver.save_screenshot('screen.png') на разных этапах вашего кода.

13 голосов
/ 14 сентября 2009

+ 1 для Selenium RC в качестве службы Windows.

Поскольку тесты выполняются полностью скрытно, я думаю, что у вас мало решений, если вы работаете в Windows.

Что бы я сделал, чтобы компьютер в вашей локальной сети был постоянно подключен к сети и имел запущенный сервер selenium RC. Таким образом, вы используете IP этого компьютера вместо localhost для запуска ваших тестов. Например:

browser = selenium("10.15.12.34",4444,"*firefox","http://saucelabs.com")

(учитывая, что это ip компьютера, на котором работает сервер).

Имея эту настройку, вы запускаете свои тесты на своем компьютере, браузеры и окно сервера RC находятся на другом компьютере, и когда вы закончите, вернитесь к своему.

12 голосов
/ 04 января 2013

В 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, теперь будут использовать виртуальный дисплей и будут вам невидимы.

4 голосов
/ 17 ноября 2009

Если вы работаете в Windows, один из вариантов - запустить тесты под другой учетной записью пользователя . Это означает, что браузер и сервер Java не будут видны вашей учетной записи.

3 голосов
/ 29 июня 2012

Так я запускаю свои тесты с maven на рабочем столе linux (Ubuntu). Я сыт по горло тем, что не могу работать с веб-драйвером firefox, который постоянно фокусируется.

Я установил xvfb

xvfb-run -a mvn clean install

Вот так

1 голос
/ 21 апреля 2017

Во многих случаях PhantomJS не вполне соответствует вашим потребностям, я хотел бы остановиться на опции хромированной головки без головы, упомянутой в ответе Дэйва Ханта.

Chrome 57 только что запустил эту функцию. Вы можете использовать его, передав флаг --headless через ChromeDriver, для получения дополнительной информации см. Обсуждение в этот вопрос

0 голосов
/ 03 апреля 2019

Лучше всего было бы использовать Chrome без головы, или вы могли бы публиковать сообщения непосредственно на сайте для взаимодействия с ним, что позволило бы сэкономить много вычислительных ресурсов для других вещей / процессов. Я использую это при тестировании роботов веб-автоматизации, которые ищут обувь на нескольких сайтах, используя тяжелые элементы процессора, чем больше энергии вы экономите, и тем проще ваша программа, тем проще запускать несколько процессов одновременно с большей скоростью надежность.

0 голосов
/ 04 августа 2016
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, который логически будет запускать браузеры. В среде разработки раздражает иметь дело с окном, которое постоянно появляется и с которым вы можете случайно взаимодействовать, делая тест неудачным.

...