Как стать автором
Обновить

Комментарии 38

прощайте тесты на Python'е, прощай Selenium.

Здравствуй SeleniumWebdriver :)
Так что прощай Java, прощайте тесты на Python'е, прощай Selenium.

Привет JS, привет непонятная либа, привет стремный мир javascript разработки?


Как-то шило на мыло получилось :)


Никогда не понимал в чем проблема писать тесты на Python. Язык то вроде простой как два пальца.

Совсем недавно занимался переносом автотестов с Ruby+Capybara на Javascript+webdriver.io.


Дело не в том, простой язык или нет, а дело в том, что он инородный для команды JS-разработчиков в целом. Ruby (ну или Python, Java, whatever) будет сложно интегрировать с основным флоу сборки, построенном на каком-нибудь Gulp.

проблем никаких, но зачем?)

плюс, это позволяет избежать смешения кода из разных языков — если потребовалось выполнить какой-то яваскрипт в браузере в процессе теста (вызов функции execute в примере)

вообще основной поинт статьи был в том, чтобы показать как можно максимально быстро начать использовать автотесты человеку без опыта в этой сфере — фронтендеру, например)
если потребовалось выполнить какой-то яваскрипт в браузере в процессе теста

На этом месте я бы уже задумался о качестве тестов.

как можно максимально быстро начать использовать автотесты человеку без опыта в этой сфере

«Скругляем инструмент согласно изгибу рук пользователя...»
Да и Java с точки зрения написания тестов не очень то и сложна. Ну по опыту коллег, которые как раз автотесты пишут.
image

всегда актуально ;)

Вот что мне не понятно, так это что мешало раньше использовать все то же самое с chrome в "обычном" режиме, если так не хотелось использовать Java+Selenium? Разъясните, пожалуйста.

смысл в том, что эту систему можно развернуть на сервере без иксов! (на самом деле, раньше тоже можно было через xvfb, но, поверьте, это более сложный путь)
Да ладно)))) Не знаю, как на JS, на Java минут 5 все в общем сложности. А с приходом докера вообще сущией пустики

С этим не спорю. Сюда же дополнительный профит в виде отсутствия затрат на отрисовку страниц.


Так что прощай Java, прощайте тесты на Python'е, прощай Selenium.

Однако автор, по моему скромному мнению, ощутимо более существенным выделяет тезис именно против Selenium и "скачков" из рабочего окружения (js) в тестировочное (java и т.д.), а главное событие — появление headless browser — как-то скралось на его фоне...


Странно, что вообще gui-free-режимы в браузерах стали появляться только сейчас. Автотесты вроде бы уже давно практикуются. И если разработчики тех же firefox и opera подключатся к тренду (в чем я немного сомневаюсь, во всяком случае в плане сроков ожидания данной фичи), то будет великое счастье уже всем тестировщикам и всем тем, кто так или иначе связан с написанием и развертыванием этих тестов.

Хорошая альтернатива Nightshift, раз уж ноду используете.
http://codecept.io/
так сразу непонятно может ли он webgl рендерить

Суть тестировщика не в том, чтобы ручками тыкать в браузер, а в дизайне тестов. Этот специально обученный человек должен разработать тесты, которые покроют больше функциональности и найдут больше багов, чем если их будет разрабатывать программист. Как эти тесты будут выполняться — автоматически или вручную — второй вопрос.


И вообще, мы же все снисходительны к себе и результатам своего труда. Свой код тестировать не так эффективно, как чужой. А ещё у разработчика и тестировщика разные образы мышления — не так-то просто переключаться между ними.


лучше давайте купим наконец-то кофе-машину

У вас там либо очень дешевые тестировщики, либо очень дорогие кофе-машины.

Мне любопытно, ведь с помощью хедлесс хрома можно сделать следущую конструкцию:


  1. Сайт написаный плохо.
  2. Хром
  3. chromedriver, который перегоняет новости в rss
  4. Rss ридер
  5. Профит.

Профит в том, что большинство современных сайтов написаны настолько плохо, что пользоваться на телефоне невозможно, а на ультрабуке — затруднительно. Но контент на них может быть хорошим.

А я запускаю с Селениумом в докер-контейнерах, без иксов. И не парюсь. Если хочется подебажить глазами: гашу контейнер с селениумом, запускаю селениум локально, и любуюсь в иксах.
Под селениум все уже написано до нас, и ничего сложного нет в том, чтобы под любой язык настроить решение. Может не пол часа, но зная свой стек и приложение, пусть час. Основная сложность автотестов не в том чтобы программно запускать браузер.


Не разделяю эйфории автора от описанного велосипеда.

На правах рекламы. Путь с xvfb пройден нами полностью. Готовое решение для запуска браузеров в Docker под запрос выложено на Github: http://github.com/aerokube/selenoid Это если вам нужно не только Хром 59+, а любые версии браузеров и желательно, чтобы не загаживать ими систему. Ставится за 5 минут, также не требует Java. В контейнерах Xvfb, но можно смотреть на браузер во время выполнения сессии через мордочку.
Как это легко сделать описано в статье:

https://habrahabr.ru/post/327184/
взяли готовую либу, готовый Chromedriver и готовый Headless Chrome. по каким признакам велосипед-то?)

а ваш комментарий звучит как «я пользуюсь тем, чем пользуюсь и знать не хочу ничего нового» :)

… по поводу того, что «основная сложность автотестов не в этом» — в принципе, согласен. всё веселье начинается, когда, например, хром внезапно начинает просто зависать на каких-то страницах и начинаешь гадать, что могло послужить причиной) и всё же стереотип по поводу того, что «автотесты — это только для энтерпрайза, а мы пока не доросли» — существует, согласитесь.
Аналогия с велосипедом, чисто субъективная, не хотел обидеть.
Навеяна тем что есть готовое решение без иксов, java, но со скриншотами: докерезированный selenium.
А либы предоставляющие биндинг с API selenium есть практически для любого языка.
Т.о. не вижу конкурентных преимуществ Вашего решения. Единственно, если проект на js и команда тоже, а docker не используется. Тогда да, м.б. быстрее.

У меня такого стереотипа нет. Бывал как в интерпрайзе без тестов, так и в стартапах с тестами. Реально внедрить и там и тут, если менеджмент не мешает.
готовое решение без иксов, java, но со скриншотами


в том-то и дело, что тут тоже со скриншотами)

либы предоставляющие биндинг с API selenium есть практически для любого языка


да, Nightwatch.js — это по сути и есть такая либа для JS'а

мне просто персонально нравится делать то, что можно делать без докера — без докера)

… но в целом понял вашу точку зрения, спасибо за комментарии!

С основным тезисом статьи про миграцию тестов на JS и headless Chrome, я согласен, но Nightwatch я бы не выбрал.


Дело в том, что этот инструмент является сразу и инструментом для общения с браузером, и тестовым фреймворком, и библиотекой ассертов. Такой комбайн будет трудно сочетать, например, с остальными тестами, написанными на Mocha или Jasmine.


Гораздо лучше взять отдельные специализированные инструменты для каждой задачи. Я для этого обычно использую такую связку: Mocha, webdriver.io и Allure. Каждый инструмент делает здесь только одну задачу, а значит, делает её хорошо.

Отдельные выражения в адрес Джавы и Питона, скажем, не совсем нейтральны, как будто это что-то плохое. Лучше следовало бы объяснить доступным языком, что если раньше на протяжении долгого времени у разработчика не было выбора, на чем писать тесты, то теперь, с появлением стандарта WebDriver, можно автоматизировать браузер с помощью любого языка.


WebDriver — это веб-сервер на локальном хосте, прокладка между разработчиком и сокет-сервером самого браузера. Это значит, что для написания либы потребуется только HTTP-клиент и парсинг джейсона. Например, клик по ссылке — это запрос вида POST /session/{session id}/element/{element id}/click. Управлять браузером становится технически легко (но остается много тонкостей под капотом).


Что касается nightwatch, ты мы использовали эту либу в проекте. У меня сложилось впечатление, что она жульничает. Например, кликает по элементам нулевой толщины. Я полагаю, что под капотом она делает это (а так же другие операции) через Джаваскрипт, что есть читерство. После замены nightwatch на чистый WebDriver-протокол, при использовании тех же селекторов полезли ошибки, что по ним кликать нельзя.


Пользуясь случаем, попиарю свою библиотеку для Кложи — Etaoin. На ней сейчас гоняются наши тесты, полет нормальный.

И вот что: Headless Chrome не умеет делать скриншоты. Возвращает картинку сплошь залитую серым. Я рекомендую вам использовать обычный Хром. На CircleCI настроен X Display, тесты проходят без проблем.

вот тут неправда ваша, умеет, проверенно
*проверено

Есть шикарный selenium-grid в докере. Вообще ничего делать не надо, просто работать с ремоутным селениумом.

Все это давно делалось с использованием protractor (при установленной node.js):
npm install protractor

Конфигурированием файла protractor.conf.js для автоматического запуска селениума и использования драйвера хрома
exports.config = {
  seleniumServerJar: './node_modules/protractor/selenium/selenium-server-standalone-2.45.0.jar',
  chromeOnly: true, chromeDriver: './node_modules/protractor/selenium/chromedriver',
  capabilities: {
    browserName: 'chrome'
  },
 
  specs: ['./test/e2e/**/*.spec.js'],
  onPrepare: function () {   
    browser.ignoreSynchronization = true;// Позволяет работать со страницами без angular
  }


+ установка системы тестирования mocha+chai или jasmine.

Но это конечно с окном chrome — надо будет попробовать эту же связку в headless режиме
я почему-то думал, что protractor — это что-то из мира Angular'a…

но тут у вас опять нужен Selenium Server, т.е. нужна Java)
Посмотрел обновления доки у протрактора — в настройках protractor-a можно поставить подключение к хром-драйверу напрямую без силениума directConnect: true, а также запускать в режиме без окна
capabilities: {
  browserName: 'chrome',
  chromeOptions: {
     args: [ "--headless", "--disable-gpu", "--window-size=800x600" ]
   }
}

protractor и страницы без ангуляра отлично работает с параметром browser.ignoreSynchronization = true;
Не знаю как тесты, но для парсеров будет полезно
Всем привет. У нас с ребятами, есть свой чат в Telegram, где мы обсуждаем фичи Nightwatchjs, также делимся фишками, присоединяйтесь https://t.me/nightwatchjs
Почему прощай Selenium, ведь NightwatchJS — это одна из его оберток. То есть там, где будут проблемы у Selenium с WebDriver ровно там будут проблемы и у NighwatchJS. Ну плюс еще и свои собственные.

Зато и поддерживается один только Chrome.


С остальными браузерами что делать?

Если нужны разные браузеры, то нужен Silenium. Если нужен один браузер, без зависимостей, который можно запустить в консоли, то Headless Chrome хорошо подойдет.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации