Подтвердить что ты не робот

HtmlUnitDriver (HtmlUnit) против GhostDriver (PhantomJS)?

Мы находимся в середине выбора нашего драйвера безгласного браузера, который будет представлять собой реализацию Selenium WebDriver. Существует GhostDriver, который использует PhantomJS в бэкэнд с одной стороны и HtmlUnitDriver, который основан на HtmlUnit с другой.

PhantomJS использует WebKit, механизм рендеринга Safari, для отображения страниц, в то время как HtmlUnitDriver использует движок Rhino, который не используют никакие другие браузеры (он просто "имитирует" поведение браузера. Последний факт считается con, поскольку поведение рендеринга может значительно отличаются от популярных браузеров.

По нашему мнению, PhantomJS является гораздо более сильным кандидатом. Но мы не знаем все:) Есть ли другие соображения и компромиссы, которые мы должны принимать во внимание с нашим решением? другие сценарии, где HtmlUnitDriver может быть лучшим решением?

4b9b3361

Ответ 1

Из моего опыта работы с несколькими браузерами без головы я бы сказал:

HtmlUnitDriver: самая быстрая из всех реализаций, с которыми я столкнулся, и идеально подходит для простых статических страниц, особенно без JavaScript. Кажется, что любая удаленно сложная страница создает проблемы - это мой практический опыт, даже если я не могу обосновать подробно. Идеально подходит для тестирования функций Selenium на демонстрационных страницах, страниц соскабливания и т.д.

PhantomJSDriver (PhantomJS + GhostDriver): не так быстро, как вы могли бы надеяться, и настольные браузеры, однако, гораздо проще настроить, чем Firefox + xvfb. По умолчанию скриншоты могут выглядеть немного странно, но , что обычно оказывается потому, что PhantomJS по умолчанию имеет узкое окно, если явно не установлено (читайте ниже почему).


Обновить: немного подробнее о версиях PhantomJS, от моего другого ответа.

Как и Safari, PhantomJS использует WebKit для рендеринга (например, Firefox использует Gecko)

Различные версии PhantomJS создаются для разных версий WebKit. PhantomJS 2.x использует WebKit 538.x, что делает его эквивалент Safari 7 или 8. тогда как PhantomJS 1.9.8 использует WebKit 534.34, что эквивалентно Safari 5.

Это может быть проблемой для вас, поскольку Google определяет Safari 5 как "старый" браузер и поэтому потенциально по-разному отображает страницы поиска.

Таким образом, гарантируя, что вы используете PhantomJS 2.x, можно уменьшить различия в рендеринге, которые многие люди сообщают против настольных браузеров.


Еще одна интересная возможность - SlimerJS. Тем не менее, я еще не получил его достаточно надежно.

У меня никогда не было проблем с надежностью ни с HtmlUnitDriver, ни с PhantomJSDriver (единственным раздражающим было HttpClient 4.5/HtmlUnit 2.17 проблема несовместимости).

(В ответ на комментарий об изменении HTTP-запросов я лично рекомендую придерживаться API WebDriver и использовать прокси, например BrowserMob, чтобы мутировать запросы и ответы, а не использовать особенности, характерные для браузера.)

В целом, я бы посоветовал не создавать инструмент или процесс, чтобы заставлял выбирать один браузер над другим. Если возможно, позвольте им настроить или переопределить. В большинстве случаев я был бы пухлым для PhantomJS, так как он вас не подведет. Тем не менее, производительность HtmlUnit следует рассматривать для простейших страниц.

См. также (возможно): http://www.guru99.com/selenium-with-htmlunit-driver-phantomjs.html и < а10 >

Ответ 2

Я использовал phantomJS в нескольких проектах за последние пару лет, но часто имел проблемы с ним. Например, javascript на страницах, которые ведут себя по-разному: chrome, firefox, internet explorer. Некоторые страницы просто не загружаются, возможно, из-за переадресации, но я не уверен (например, журнал сообщений на клавиатуре).

Я не использовал HtmlUnit столько же, но по мере того, как я набираю это, он избегает некоторых из вышеперечисленных проблем phantom для меня на тестах с страницами входа в keycloak.