- Headed and Headless devices
- Headed mode
- Headless mode
- Changing the mode
- Finding your headless device
- Running Firefox in headless mode on Windows container with windows/servercore
- Headless mode on Windows 7 causes timeout, never completes #2391
- Comments
- joshas commented Apr 16, 2018 •
- Steps to reproduce
- vsemozhetbyt commented Apr 16, 2018
- TheCloudlessSky commented Apr 17, 2018
- joshas commented Apr 17, 2018
- TheCloudlessSky commented Apr 17, 2018
- hbowden commented Sep 11, 2018 •
- SmilingJoe commented Mar 22, 2019
- Headless тестирование в браузере. Плюсы и минусы
Headed and Headless devices
Windows 10 IoT Core can be configured for either headed or headless mode.
Headed mode
Headed mode is defined by the presence of UI. In headed mode, a single UI app will be launched at system boot and there can additionally be 0 or more «Background Apps» (StartupTasks).
Headless mode
Headless mode has no UI. Devices that don’t need UI functionality can be set to headless mode. The UI stack is disabled and UI apps will not launch. This reduces the amount of system resources used. If you attach a monitor to your device, the screen will be black.
If you put your device into headless mode, then you can use the Windows 10 IoT Core Dashboard application, described below, to find its IP address.
Changing the mode
You can modify the headed/headless state of your device from a Windows PowerShell session or an SSH session. To learn more about PowerShell, see the PowerShell for IoT Core page. To learn more about SSH, see the SSH for IoT Core page.
- To display the current state of your device, use the setbootoption utility:
- To modify the state of your device to enable headless mode, use the setbootoption utility with the headless arg:
- To modify the state of your device to enable headed mode, use the setbootoption utility with the headed arg:
Finding your headless device
An IoT Core device that is in headless mode can be discovered using the Windows 10 IoT Core Dashboard application. To download the IoT Dashboard, see the Downloads page. When running, the application listens for pings from any IoT Core devices on the local network and displays device information such as the name, IP address, and more.
Running Firefox in headless mode on Windows container with windows/servercore
In order to supply Windows Selenium WebDriver Grid, I started preparation of Dockerfile that would allow to serve as grid node. The original cause was to prepare an image with controllable Firefox/GeckoDriver version. Encouraged by the successful preparation of the Chrome image with the same purpose in mind, I started with the following Dockerfile:
Now, once container is started, the response from spawned geckodriver in WebDriver (executed with logs on TRACE level) hangs at:
So it’s a matter of Firefox being not launched correctly since GeckoDriver was able to spawn it but not interact with it. Moreover, running firefox.exe directly in the container causes firefox.exe process to appear once the tasklist is executed, but it’s just one process taking 6MB of RAM (unlike Chrome, which spawn dozens of processes and has no problem in running headlessly, same for the Firefox executed on Windows 10). I assume that there’s some kind of an obstacle that prevents Firefox from being opened and since Server Core has no GUI, it cannot be displayed and cannot be diagnosed. Sadly, I haven’t found any information about Firefox logs stored on disk or run Firefox in more verbose mode from command line. The things I already tried:
- change Firefox to 32-bit
- various Firefox versions
- Install subset of DirectX
- Install Firefox without chocolatey
- various Windows Server Core versions
To sum up, even if it’s not possible (but why? It was possible with Chrome), I’d like to know what’s the actual error and what’s the reason of failure. More verbose info from the Firefox itself would be handy as well.
I know that the easiest way to do it would be to switch to Linux, but long story short, it’s not possible at the moment.
- Docker: 18.09.2, build 6247962
- Firefox: 66.0.3
- GeckoDriver: 0.24.0
Headless mode on Windows 7 causes timeout, never completes #2391
Comments
joshas commented Apr 16, 2018 •
Steps to reproduce
Tell us about your environment:
- Puppeteer version: 1.3.0
- Platform / OS version: Windows 7 x64
- URLs (if applicable):
- Node.js version: 8.9.4
What steps will reproduce the problem?
- npm install puppeteer
- node index.js
What is the expected result?
Script runs and outputs screenshot.png into working directory.
What happens instead?
Script runs for a long time until it produces timeout warnings.
If puppeteer.launch option «headless» is set to false, same script delivers expected result in about 5 seconds.
Capturing screenshot from http://info.cern.ch/ works in headless mode, so issue might be related to complexity of the page.
The text was updated successfully, but these errors were encountered:
vsemozhetbyt commented Apr 16, 2018
I cannot reproduce on Windows 7 x64 with the mentioned code and puppeteer 1.3.0-post (chromium_revision 549031)
TheCloudlessSky commented Apr 17, 2018
joshas commented Apr 17, 2018
@TheCloudlessSky Yes, adding proxy arguments works. Thank you. Is headless mode by default running through proxy?
TheCloudlessSky commented Apr 17, 2018
@joshas It shouldn’t be. but I’ve ran into serious problems with this too. I’ve added this comment to my code for those arguments:
hbowden commented Sep 11, 2018 •
@TheCloudlessSky Why was this closed? While the work around works shouldn’t the bug be fixed in puppeteer it’s self so that Windows 7 users don’t need a workaround?
SmilingJoe commented Mar 22, 2019
@TheCloudlessSky Why was this closed? While the work around works shouldn’t the bug be fixed in puppeteer it’s self so that Windows 7 users don’t need a workaround?
I have spent a few days trying to track down why I wasn’t getting any output generated from my headless:true, fullPage:true puppeteer script because of this issue. Finally found this thread after reproducing the problem using Puppeteer’s basic example and having that throw an exception. Would really be nice to have this reopened — or at the very least update the documentation around the «fullPage:true» option to include a note for Windows 7 users to try this is they run into issues.
Headless тестирование в браузере. Плюсы и минусы
И снова здравствуйте. Данная публикация приурочена к запуску курса «Автоматизация веб-тестирования», который стартует уже на этой неделе. Приятного прочтения!
Что такое Headless тестирование?
Headless тестирование представляет собой запуск в браузере теста на работоспособность каких-либо составляющих UI без отображения этого самого UI. Такое тестирование запускает скрипты в браузере, но не запускает и не показывает сам по себе UI.
Почему вам может понадобиться использовать Headless-браузеры? У этого подхода есть множество плюсов и минусов. Использование headless браузера может быть не очень полезным для серфинга в сети, но для автоматизации задач и тестирования он незаменим.
Почему стоит использовать headless browser?
Следовать за деньгами – это клише, однако я все же считаю, что это ключевой индикатор появления трендов, а следовательно того, на что обязательно надо обратить внимание. Например, Sauce Labs только что выпустила новый сервис под названием Sauce Headless, облачное решение для headless тестирования ваших решений.
Я знаю, что люди в Sause – это умные люди. Они не будут ничего разрабатывать просто так. Им необходимо получить обратную связь от пользователей, чтобы понять, что какой-либо функционал является необходимым.
Я уверен, что они не будут одиноки в своем стремлении развивать headless тестирование.
По мере того, как мы продвигаемся дальше по жизненному циклу разработки программного обеспечения, тестировщикам необходимо быстрее и быстрее выдавать обратную связь разработчикам. Один из способов этого добиться – это проводить быстрые проверки headless браузером.
Автоматизация в разработке программного обеспечения
Я всеми руками «за» автоматизацию, но автоматизация это не только про тестирование.
Это история про все аспекты, которые вы можете автоматизировать, чтобы сохранить время или усилия в жизненном цикле разработки программного обеспечения, контроля качества или тестирования, DevOps или установки. Headless браузеры являются одним из мощных средств автоматизации.
Headless браузеры быстрее обычных браузеров
Одно из важнейших отличий headless браузеров от обычных браузеров – это скорость их работы. Дело в том, что, когда вы загружаете страницу в браузере без GUI, ему не нужно тратить время на загрузку CSS, JavaScript и рендеринг HTML.
Я бы не сказал, что разница будет колоссальной, однако в некоторых случаях можно проследить увеличение скорости в два раза или даже в 15. Таким образом, если вам важна производительность, то headless браузер будет хорошим выбором.
Скрапинг с помощью headless браузера
Другое преимущество headless браузеров заключается в их способности собирать данные с веб-сайтов. Чтобы это сделать, вам не придется вручную запускать браузер. Вы можете использовать headless технологию, чтобы просто скрапить HTML. И рендерить весь браузер совершенно не обязательно.
Скажем, что в вашем кейсе требуется спортивная статистика или сравнение цен на различных сайтах.
Поскольку вам нужны лишь данные, не имеет смысла запускать полноценную сущность браузера и излишне нагружать машину, поскольку чем меньше нагрузка, тем быстрее вы получите результат. Это не обязательно может быть тестирование, просто вам нужно использовать правильный инструмент для работы. Я вообще считаю, что тестировщики зря недооценивают headless браузеры в своем деле.
Таким образом, если вам нужно получить данные с веб-страницы, ее не нужно открывать и давать дополнительную нагрузку, открывая браузер, весь необходимый функционал в состоянии обеспечить headless браузер.
Сохранить время разработчиков
Я знаю, что много разработчиков используют headless браузеры для модульного тестирования своих сайтов и приложений. Возможность использовать его из командной строки без ручного обновления или запуска браузера сохраняет им много времени и усилий. Например, Роб Фризел, автор PhantomJS CookBook в интервью TestTalks пояснил, почему его разработчики используют headless браузер PhantomJS:
«Несмотря на то, что сам по себе PhantomJS не является фреймворком для тестирования, однако он является полезным «лучиком света в угольной шахте», который придает уверенности; если все тесты пройдены, то вы становитесь гораздо увереннее в том, что ваш код действительно хорош.»
Мониторинг производительности с помощью скриптов Headless браузера
Еще один вариант использования headless браузера – это мониторинг производительности сетевых приложений.
Некоторые даже используют их для автоматизации рендеринга и получения скриншотов экрана веб-сайта, чтобы проводить тестирование разметки в автоматизированном стиле.
Я думаю, это одна из причин, по которой Google разработал новый headless Chrome API, который называется Puppeteer. Он нацелен в первую очередь на помощь разработчикам.
Основные идеи Headless браузер тестирования
Помимо предыдущей идеи, есть также и другие варианты использования headless браузеров, о которых я вам сейчас и расскажу:
- Запускать тесты на машине без монитора;
- Настройка данных;
- Тестирование SSL;
- Симуляция множества браузеров на одной машине;
- Запуск тестов на headless системе, как например Linux без GUI;
- Получение и визуализация PDF-файлов;
- Тестирование разметки, поскольку headless браузеры могут рендерить HTML и CSS, как полноценные браузеры, соответственно вы можете тестировать ими стили.
Случаи, когда вам не захочется использовать Headless браузер
Конечно же, бывают случаи, когда вам может захотеться использовать полноценный браузер, вместо headless браузера. Например:
- Вам нужно имитировать реальных пользователей;
- Вам нужно видеть, как отрабатывает тест;
- Если вам нужно проводить дебаг, это может быть сложно с headless браузером.
Популярные Headless браузеры
- Google Puppeteer – Headless браузер Puppeteer это библиотека Node. Он обеспечивает высокоуровневое API для управления headless Chrome или Chromium с помощью протокола DevTools. Его также можно настроить для использования полноценного (non-headless) Chrome или Chromium.
- Google Chrome с версии 59;
- Firefox версии 55 и 56;
- PhantomJS – headless webkit на JavaScript API. У него есть быстрая и нативная поддержка для различных веб-стандартов: обработка DOM дерева, CSS селекторы, формат JSON, Canvas и SVG. * Сейчас он не поддерживается. Из-за этого вам может не захотеться его использовать.
- HtmlUnit – это браузер без GUI под Java код. Он моделирует HTML документы и предоставляет API, который позволяет открывать страницы, заполнять формы, нажимать на ссылки и т.д. Также, как и в вашем «обычном» браузере.
- Splinter – Splinter – это headless браузер, ориентированный на Python. Он имеет открытый исходный код и используется для тестирования веб-приложений с использованием Python. Например, вы можете использовать его для автоматизации действий браузера, таких как посещение веб-страниц и взаимодействия с их элементами.
- jBrowserDriver – Программируемый, встраиваемый драйвер веб-браузера, совместимый с Selenium WebDriver spec – headless, основанный на WebKit, на чистой Java.
Когда следует использовать headless браузер для тестирования?
Ответ на этот вопрос зависит от целей вашего тестирования.
С одной стороны, люди часто говорят: «Никогда не используйте headless браузеры. Реальный пользователь никогда не будет им пользоваться, так почему вы должны?» Хотя, с другой стороны, мы слышим: «Вам следует всегда использовать headless браузер, поскольку он быстрее, а быстрее в вопросах тестирования – значит, лучше»
Как мы знаем, у каждой позиции найдутся сторонники и найдется оппозиция, однако здесь ставится лишь вопрос выбора правильного инструменты для решения тех или иных задач.
Помните о том, что вы должны использовать оптимальный инструмент для работы и всегда спрашивать себя, как это затронет конечного пользователя, должны спрашивать себя в чем цель тестирования каждый раз, когда делаете выбор между этими двумя точками зрения.
По устоявшейся традиции ждем ваши комментарии, а также напоминаем о том, что уже через несколько часов пройдет день открытых дверей, где можно будет подробно узнать о нашем курсе.