Название | Движок | Язык | Преимущества | Ограничения |
---|---|---|---|---|
Feta | Selenium | Java | * Ориентирован на интеграционное тестирование * Уже используется в команде тестирования * Интегрировано с нашим CI и JIRA * Учтены многие многие проблемы |
* Исходный код написан на Java * Требуются знания Java |
Selenium | WebDriver | Java | * Высокая популярность * Развитая экосистема |
* Слишком "косолапое" API * Требуются знания Java |
Thucydides (Serenity) |
WebDriver | Java | * Развитая экосистема | * Требуются знания Java |
Browserstack | WebDriver | JavaScript | * | * Проект в забвении |
webdrvr | WebDriver | JavaScript | * | * Обертка над WebDriver и не более того * Проект в забвении |
Buster | PhantomJS, jsdom | JavaScript | * | * Низкая популярность * Ничего не знает про WebDriver |
Leadfoot | WebDriver | JavaScript | * Проект активно развивается и является частью Intern | * Обертка над WebDriver и не более того |
Testium | WebDriver | CoffeeScript | * Поддерживает автоматическое управление сервером Selenium | * Синхронное API |
webdriver-sync | WebDriver | JavaScript | * | * Обертка над WebDriver и не более того * Проект в забвении |
Kommando | WebDriver | JavaScript | * | * Проект в забвении |
GhostDriver | PhantomJS | JavaScript | * Является полноценной реализацией WebDriver Wire протокола под PhantomJS * Есть клиенты как для Python так и для JavaScript |
* Проект остался без мейнтейнеров * Слишком "косолапое" API |
Selenium-WebDriver | WebDriver | JavaScript | Является полноценной реализацией WebDriver Wire протокола для JavaScript * Поддержка всех современных браузеров, включая Android * Официальный биндинг от SeleniumHQ |
* Слишком "косолапое" API * Требуется Selenium Server |
WD | WebDriver | Java, JavaScript | * Является полноценной реализацией WebDriver Wire протокола для JavaScript * Поддержка всех современных браузеров, включая Android |
* Слишком "косолапое" API * Требуется Selenium Server |
WebdriverIO | WebDriver | Java, JavaScript | * Является полноценной реализацией WebDriver Wire протокола для JavaScript * Поддержка всех современных браузеров, включая Android * Имеется встроенный test-runner * Активно развивается компанией Sauce Labs * Развитая экосистема для всех видов тестрования * Простое и понятное API * Есть возможность отладки (нативный Web Inspector) * Headlessly-режим (xvfb) * Имплементировано большинство методов протокола WebDriver API Appium протокола для тестирования мобильных платформ |
* Нет метода fill (не так страшно) * Требуется вручную запускать Selenium Server (фикс планируется в 4-й версии * Пока отсутствует REPL-интерфейс (планируется в 4-й) |
Dalek | Native Driver | JavaScript | * Исходный код написан на JavaScript * Ориентирован на интеграционное тестирование * Простое и понятное API * Отсутствие в зависимостях Selenium! |
* Проект в состоянии "ушел на покой" * Требует в основных зависимостях CoffeeScript |
PhantomJS | PhantomJS | C++ | * Есть биндинги для Node | * Отсутствует высокоуровневое API для работы с DOM и его окружением * Требуются дополнительные инструменты для формирования "экосистемы" тестирования |
Mozilla Marionette | Gecko | Python | * Поддержка WebDriver GeckoDriver/FirefoxDriver | * Высокая сложность понимания инфраструктуры * Больше ориентирован на тестирование в Firefox Gaia |
NW.js | Node-WebKit | C++ | * Есть биндинги для Node * Возможность использовать API DOM и Node |
* Отсутствует headlessly режим * Требуется сборка через node-gyp * Не решены проблемы с фоновым выполнением задач * См. PhantomJS |
Moonraker | WebDriver | JavaScript | * Функциональность напоминает WebDriverIO | * Не очень удачная реализация паттерна PageObject * См. WebDriverIO |
Nightwatch | WebDriver | JavaScript | * Функциональность напоминает WebDriverIO * Интегрирован с библиотекой с assert'ов * Автоматизировано упраление Selenium сервером |
* См. WebDriverIO * В отличии от WebDriverIO более слабая экосистима |
Nightmare | Electron | JavaScript | * Исходный код написан на JavaScript * Самый популярный из всего списка * Проект развивается коммерческой организацией * Есть система расширений * Умеет делать скриншоты |
* Отсутствует headlessly режим * Большое количество открытых багов * Мейнтейнеры не справляются даже с принятием пул-реквестов в одну строчку * Требуются дополнения для тест-кейсов (аля chai) * Нет валидации форм |
navit | PhantomJS и SlimerJS | JavaScript | * Исходный код написан на JavaScript * Работает поверх PhantomJS и SlimerJS * Простое и удобное API * Умеет делать скриншоты * Есть обертка над DOM-объектами * Умеет выставлять UA * Умеет загружать файлы, отправлять формы, скроллировать страницы * Поддерживает навигацию * Есть состояние ожидания появления элемента * Имеется возможность расширять API * Таймеры * Умеет зумминг * Есть методы для работы с куками и пр. заголовками * Поддерживает авторизацию * Умеет работать с фреймами, табами * Headlessly-режим (xvfb) |
* Нет методов для массовового заполнения полей форм * Нет события submit * Не умеет генерировать события клавиатуры * Очень скромное комьюнити * Расширение функциональности под вопросом * Ограниченное количество движков (Geko и WebKit) * Отсутствует интеграция с существующими test-runner'ами типа Karma * В SlimerJS отсутствует возможность инспектирования кода |
Zombie | jsdom | JavaScript | * См. navit | * Использует виртуальное окружение * Не умеет далать скриншоты |
Horseman | PhantomJS | JavaScript | * Логирование * Умеет инлайнить картинки * Поддерка событий клавиатуры * Возможность загрузить скрипты на страницу * Умеет рендерить страницу как PDF * Поддерживает системные события типа alert и prompt * На борту jQuery * См. navit |
* Не умеет отправлять формы с типом multipart/form-data * Отсутствует API для написания тест-кейсов (аля mocha + chai) * Отсутствуют репортеры * Отсутствуют возможность выбора движка отличного PhantomJS (например SlimerJS) |
Casper | PhantomJS и SlimerJS | JavaScript | * Исходный код написан на JavaScript * Поддерживает CSS и XPath селекторы * Работает поверх PhantomJS и SlimerJS * Отсутствует в зависимостях Selenium! * Большое количество высокоуровневых функций для работы с DOM * Логирование * Отладочный режим * Парсинг * В зависимостях только PhantomJS * CI Travis, Jenkins (XUnit) |
* Требует в зависимостях Python * Для разработки проекта требуется Mono и RPM * В npm лежит пакет 2-х летней давности * Нет мейнтенеров, проект на грани "ушел на покой" * Довольно многословное API * Огромное количество открытых таской (порядка 300) |
Intern | PhantomJS, WebDriver | JavaScript | * Исходный код написан на JavaScript * Репортеры для Sauce Labs * CI для Travis CI, Jenkins * Развивается Dojo * Имеется test-runner * Есть recorder, который позволяет автоматически записывать тест-кейсы. * Позволяет использовать кастомные интерфейсы (API других фреймворков) * Можно писать интеграционные и модульные тесты * Имееются репортеры покрытия кода тестами * Поддержка AMD идет "из коробки" * Окружение тип тестирования не имеет значения (браузер, сервер) |
* Слишком многословное API и запутанная документация * Требуется Selenium Server, который требуется запускать вручную |
Protractor | WebDriver | JavaScript | * Исходный код написан на JavaScript * Репортеры для Sauce Labs * Поддержка WebDriver |
* Ориентирован для работы с AngularJS |
Cucumber | Отсутствует | JavaScript | * Можно подружить с любым фреймворков для интеграционного тестирования | * Ориентирован на BDD-тестирование |
Capybara | Rack::Test, Selenium, WebKit | Ruby | * Очень популярный в "узких" кругах | * |
Poltergeist | PhantomJS | Ruby | * Является двайвером для Capybara | * |
Ghostbuster | PhantomJS | Ruby | * | * Заброшен |
dryscrape | WebKit | Python | * | * |
Вспомогательные инструменты: Chimp, Wallaby
Ниже будут перечисленны только отличительные особенности некоторых инструментов, на которые стоит обратить внимание:
WebdriverIO
[+]
— Возможность использовать 6 различных браузеров (Chrome, Firefox, Opera, IE, Android, Safari), не включая PhantomJS
— Многофункциональное и простое API
— Имеется встроенный test-runner
— Не требует node-gyp
— Имеется npm-пакет для работы с сервером Selenium
— Наличие веб-инспектора в браузере
— Наличие плагинов для Grunt, Gulp, WebRTC, Browserevent
— Подписка на события в браузере
— Интеграция с облачными сервисами типа Sauce Labs, BrowserStack, Travis CI, TestingBot
— Интеграция c CI типа Jenkins и Travis CI
— Инструментарий для визуального регрессионного тестирования
— Наличие репортеров
— Интеграция c BDD-фрейморками типа Mocha, Jasmine (v2.0) и Cucumber
— Возможность запуска тестов в рамках одной сессий Selenium
— Возможность [паралельного запуска инстансов](паралельного запуска инстансов) (уже на стадии релиза)
— Каждая команда возвращает Promise
— Подписка на события тестового сценария
— Биндинг элментов
— Есть событие submit
— Поддерживает xPath
— Проект активно развивается компанией Sauce Labs
— API Appium протокола для тестирования мобильных платформ
— Есть возможность встроить сторонний сторонний код на страницу
[-]
— Не автоматизировано управление Selenium сервером (планируется в 4-й версии)
— Нет метода fill
— Нет SlimerJS (может быть удобно для тех, кто будет запускать тесты локально "для галочки")
— Пока не нашел примера импортирта внешних скриптов
— Пока отсутствует REPL-интерфейс для интерактивной отладки запущенного процесса (см. пример). Планируется в 4-й версии.
CasperJS
[+]
— Самый популярный из списка;
— Есть метод fill
— Есть ассерты
— Встроенные методы для Unit-тестирования
— Есть репортеры типа XUnit
— Подерживает два движка SlimerJS и PhantomJS
— Есть логирование
[-]
— Требует в зависимостях Python;
— В npm лежит пакет версия 2-х летней давности
— Нет мейнтенеров, проект в стадии "заброшен"
— Относительно многословное API
navit
[+]
— Подерживает два движка SlimerJS и PhantomJS
— Самое простое в хорошем смысле слова API из всех
[-]
— Пока очень скромная аудитория
— Нет метода fill
— Нет метода для отправки форм используя событие submit (можно написать свой метод или использовать get.evaluate)
Nightwatch
[+]
— По функциональности практичкски не уступает WebdriverIO
— Интегрирован с библиотекой с assert'ов
— Автоматизировано управление Selenium сервером
[-] — В отличии от WebdriverIO все свалено в одну кучу. WebdriverIO работает как сервис — репортеры, фреймворки, плагины все это отдельные пакеты, которые устанавливаются только по требованию.
Intern
[+]
— По функциональности не уступает WebdriverIO и даже в чем-то превосходит
— Позволяет использовать кастомные интерфейсы (API других фреймворков)
— Есть recorder, который позволяет автоматически записывать тест-кейсы.
— Можно писать интеграционные и модульные тесты
— Имееются репортеры покрытия кода тестами
— Поддержка AMD идет "из коробки"
— Окружение тип тестирования не имеет значения (браузер, сервер)
[-]
— Отсутствует метод wait (selector [, time])
(вместо него используется setFindTimeout
, который завязан только на время)
— Не автоматизировано управление Selenium сервером
— Слишко многословное API:
define(function (require) {
let registerSuite = require('intern!object'),
assert = require('intern/chai!assert');
registerSuite({
name: 'section',
'case': function () {
return this.remote
.get(require.toUrl('/user/login'))
.setFindTimeout(5000)
.findByCssSelector('button[data-name="submit"]')
.click()
.end()
.then(function () {
assert.strictEqual(...);
});
}
});
});
Этот же пример WebdriverIO
suite('section', () => {
test('case', function *() {
yield browser
.url('/user/login')
.waitForExist('form[name="login"]')
.click('button[data-name="submit"]')
});
});
Вывод — CasperJS и navit в значительной степени уступают по многим показателям Intern, Nightwatch, Moonraker и WebdriverIO, однако у последнего более простое и понятное API