Чем отличаются poltergeist / PhantomJS и capybara-webkit?


  1. в чем разница между PhantomJS и capybara-webkit?
  2. в чем преимущества capybara-webkit перед PhantomJS?
  3. какой из двух инструментов является наиболее эффективным?
  4. другие ...
4 58

4 ответа:

полтергейст это драйвер capybara для PhantomJS, безголовый браузер, который построен на WebKit. capybara-webkit-это драйвер capybara, который использует WebKit напрямую.

poltergeist / PhantomJS имеет некоторые большие преимущества перед capybara-webkit:

TL; DR

  • полтергейст / PhantomJS легче настроить
  • полтергейст/PhantomJS имеет меньше зависимостей
  • Capybara-webkit является более стабильным и надежным, и это лучше для CI

долгих:

Я использую Poltergeist + PhantomJS уже более одного года. Мой самый большой проект имеет много вызовов Ajax, загрузок файлов, манипуляций с изображениями, шаблонов JS и чистых анимаций CSS3.

время от времени, Полтергейст и PhantomJS генерируют случайные ошибки.

некоторые из них были мои ошибки. Тестирование Ajax-это сложно. Распространенной ошибкой было то, что в конце успешного теста database_cleaner gem усек базу данных, однако один вызов Ajax все еще выполнялся и создавал исключение в контроллере из-за пустой базы данных. Это не всегда легко исправить, если вы не хотите использовать спящий режим(). (Я не знаю).

однако многие ошибки с полтергейстом не были моими ошибками. У меня есть тест, который делает то же самое в 30 раз (по уважительной причине) и время от времени 1 из 30 раз это не сработало. Полтергейст вообще не нажимал на кнопку. Это была видимая, не анимированная, обычная кнопка. Я мог бы исправить это (нажав на него снова), однако, это уродливый Хак и чувствует себя неправильно.

иногда скрипт, который работал во всех браузерах, генерировал случайные ошибки javascript с Poltergeist/PhantomJS. Около 1 или 2 из 100 раз.

с двумя разными Ajax плагин uploader я испытал, что PhantomJS 1.9 и 2.0 ведет себя по-разному. 2.0 является более стабильным и последовательным, но он далек от совершенства.

Это была огромная боль, с помощью Jenkins. Примерно каждый третий запуск был неудачным, потому что 1 или 2 из 400 функций (тесты браузера js) генерировали случайные ошибки.

две недели назад я попробовал Capybara-webkit. Мне потребовалось несколько часов, чтобы мигрировать, так как они по-разному относятся к невидимым элементам. Капибара-WebKit-это более правильный или строгий в этом. Я заметил то же самое о перекрывающихся элементов.

тестирование загрузки Ajax и манипуляции с изображениями требует пользовательских скриптов, которые мне пришлось изменить для Capybara-webkit.

Я использую Mac OS X для разработки, FreeBSD для производства и Linux для Дженкинса. Capybara-webkit было сложнее настроить, чем Poltergeist, потому что он требует экрана и имеет много зависимостей. Только помощи PhantomJS-это действительно безголовые и автономные. Я мог бы запустить PhantomJS на производстве серверы, если я хотел. Я бы не сделал этого с capybara-webkit из-за зависимостей.

теперь у меня есть 100% стабильный Дженкинс CI. Все случайные ошибки javascript-это воспоминания о прошлом. Capybara-webkit всегда нажимает на кнопку, на которую я хочу нажать. Javascript всегда работает отлично. В настоящее время у меня есть около 20-25 стабильных сборок по прямой линии.

для проектов с большим количеством Ajax, я рекомендую capybara-webkit.

мой совет основан на текущем, последние версии в августе 2015 года.

capybara-webkit и PhantomJS оба используют Webkit под капотом для визуализации веб-страниц без головы, т. е. без необходимости в браузере. Однако это разные инструменты:

  • capybara-webkit служит адаптером для Capybara, Ruby gem, который позволяет писать и выполнять высокоуровневое тестирование пользовательского интерфейса для приложения Rails или Rack.
  • PhantomJS-это инструмент более низкого уровня, который просто позволяет запускать скрипты на веб-странице. Он также может быть использован для написания тестов пользовательского интерфейса (см. Каспер, например, или любой другой инструменты тестирования которые строятся на PhantomJS).

PhantomJS не поддерживает функции HTML5, такие как аудио/видео, которые действительно отстой.