Я використовую Selenium RC для автоматизації деяких операцій браузера, але хочу, щоб браузер був невидимим. Чи можливо це? Як? Що можна сказати про селенову сітку? Чи можу я також приховати вікно Selenium RC?
Я використовую Selenium RC для автоматизації деяких операцій браузера, але хочу, щоб браузер був невидимим. Чи можливо це? Як? Що можна сказати про селенову сітку? Чи можу я також приховати вікно Selenium RC?
Відповіді:
Є кілька варіантів:
Ви можете використовувати Selenium Grid, щоб браузер відкривався на зовсім іншій машині (або віртуальній машині), до якої потім можна підключитися через VNC або підключення до віддаленого робочого столу, якщо ви хочете побачити браузер. Також інший варіант: якщо ви запустите процес переднього плану Jenkins на цьому віддаленому сервері, він може виконати ваш тестовий проект на робочому столі.
Ви можете запустити "безголовий" селен на 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.
Що б я зробив, щоб виділити комп’ютер у вашій локальній мережі постійно в мережі та мати запущений 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 -чисте встановлення mvn
Це воно
У багатьох випадках PhantomJS не буде повністю відповідати вашим потребам, я хотів би детальніше розглянути варіант безголового хрому, згаданий у відповіді Дейва Ханта.
chrome 57 щойно запустив цю функцію. Ви можете використовувати його, передавши прапор --headhead через ChromeDriver, для отримання додаткової інформації див. Обговорення в цьому питанні
Існує проект, пов'язаний з PhantomJS , який називається GhostDriver , який призначений для запуску екземплярів PhantomJS у сітці Selenium за допомогою дротового протоколу JSON webdriver. Це, мабуть, те, що ви шукаєте, хоча цьому питанню вже 4 роки.
У MacOSX мені не вдалося приховати вікно браузера, але принаймні я придумав, як перемістити його на інший дисплей, щоб це не настільки порушило мій робочий процес. Поки Firefox запускає тести, просто натисніть і утримуйте клавішу миші на його піктограмі в док-станції, виберіть Параметри та Призначити дисплею 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 було б найкращим вибором, або ви могли б розміщувати повідомлення безпосередньо на сайті, щоб взаємодіяти з ним, що заощадило б багато обчислювальної потужності для інших речей / процесів. Я використовую це під час тестування ботів веб-автоматизації, які шукають взуття на кількох сайтах із використанням важких елементів процесора, чим більше енергії ви економите і чим простіша ваша програма, тим простіше запускати кілька процесів одночасно з більшою швидкістю і muhc і надійність.