Можно ли скрыть браузер в Selenium RC?

92

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

Ятендра Гоэль
источник
Возможно, это неприемлемо, но не могли бы вы просто переместить браузер с экрана (используя обычную автоматизацию пользовательского интерфейса Windows?), Например, разместить окно в (-10000, -10000)?
BrainSlugs83
2
Поскольку этот вопрос уже устарел, позвольте мне перенаправить вас к правильному актуальному ответу внизу этой страницы .
Стефан Брукерт

Ответы:

87

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

  • Вы можете использовать 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, где вы можете запускать свои тесты в облаке. После того, как ваши тесты будут завершены, вы можете посмотреть видео о том, как они работают.

Дэйв Хант
источник
Вот инструкции по созданию bat-файла для установки службы: brantleytec.blogspot.com/2012/11/…
Brantley Blanchard,
58

В 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
Кори Голдберг
источник
Когда код запускается в виртуальном браузере, могу ли я продолжать использовать свой компьютер в обычном режиме, пока выполняется сценарий взаимодействия с браузером?
Mugen
Ресурсы заняты, ваша машина станет медленнее!
Тим Лонг
22

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

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

driver = webdriver.Firefox()

кому:

driver = webdriver.PhantomJS()

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

Стефан Брукерт
источник
5
Стоит упомянуть, что вы должны указать путь к PhantomJs.exe, чтобы это работало. Примерdriver = webdriver.PhantomJS(r"C:\\phantomjs\phantomjs.exe")
K DawG
1
Да, но только в Windows.
Стефан Брукерт
1
вам не нужно указывать местоположение двоичного файла, если его можно найти в переменной окружения $ PATH.
Кори Голдберг
13

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

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

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

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

(учитывая, что это IP-адрес компьютера, на котором запущен сервер).

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

Санти
источник
12

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

пикселистик
источник
У этого скрипта есть проблема с цитированием. Если я скажу ./ephemeral-x.sh foo '*', будет написано «Running: foo», за которым следует содержимое моего каталога.
Ник Реталлак,
4

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

Игорь Брейц
источник
3

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

Я установил xvfb

xvfb-run -a mvn чистая установка

Это оно

Пол Уилан
источник
Часто это самый простой способ убедиться, что xvfb запущен и используется Selenium / WebDriver.
Самули Пахаоджа
1

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

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

Марли
источник
0

Существует связанный с PhantomJS проект под названием GhostDriver , который предназначен для запуска экземпляров PhantomJS в Selenium Grid с использованием протокола JSON webdriver wire. Вероятно, это то, что вы ищете, хотя этому вопросу уже 4 года.

Джангофан
источник
0

В MacOSX мне не удалось скрыть окно браузера, но, по крайней мере, я понял, как переместить его на другой дисплей, чтобы это не сильно мешало моему рабочему процессу. Пока Firefox выполняет тесты, просто щелкните его значок в доке, удерживая клавишу Control, выберите «Параметры» и «Назначить для отображения 2».

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

Нестор Уркиса
источник
0

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

ЛиамººT
источник