Как начать писать UI тесты за 10 минут c помощью Selenide

Привет, сообщество!
Я хочу поделиться с вами видеоуроком: “Как начать писать UI тесты за 10 минут”. В видео создаётся проект на Maven и пишется тест, который открывает браузер и проверяет поиск Google.

Очень часто в форумах задаётся этот вопрос: как научиться писать тесты? С чего начать? Как написать первый тест на Selenium?

Вот наконец есть короткий ответ. Конструктивная критика приветствуется.

7 лайков

Почему я не хотел бы использовать selenide в средних и больших проектах?
Потому, что я боюсь:

  • проект в один прекрасный момент перестанет развиваться и перестанет поддерживать последние версии браузеров
  • по сравнению с “чистым WebDriver” у selenide маленкое community
  • Selenide пишут и развивают несколько человек (1-2) - Selenium же вот все эти люди GitHub - SeleniumHQ/selenium-google-code-issue-archive: Archive, please see main selenium repo

P.S.: проект очень классный, крутой, автор проделал огромнейшую работу, спасибо!
Это лично мое мнение, и если я что-то не правильно понимаю, то поправьте меня.

Спасибо!
Действительно, размер коммьюнити и коммитеров стоит учитывать при выборе фреймворка. Но в данном случае все эти опасения напрасны, ибо Selenide - всего-навсего надстройка над Selenium WebDriver. То есть абсолютно все функции и новые возможности, которые есть в Selenium, можно свободно использовать и с Selenide. Никаких ограничений. Selenide просто добавляет несколько полезных функций. Если эти функции не понравятся или устареют - всегда можно использовать стандартные селениумовские. Так что риск нулевой, можно не беспокоиться.

Спасибо, возник еще один вопрос.
Я хочу иметь такую возможность, как зафиксировать версию slenide, к примеру 2.14, и через пол года, когда webdriver уйдет далеко вперед, к версии 2.49.0 или даже еще больше, по прежнему использовать старую версию selenide. При условии, что расположения классов и пакетов, которые нужны для работы selenide в webdriver, остались прежними.

Как я себе это представляю. По средствам в POM.XML

и еще, хочу спросить по какому паттерну писался selenide? похоже что автор выбрал паттерн Команда (шаблон проектирования) или вот этот Стратегия (шаблон проектирования)

есть ли примеры больших проектов, в открытом доступе, чтоб посмотреть как можно использовать selenide с общепринятимы паттернами проетирования в тестировании

Это то же самое, что спросить сороконожку, по какому паттерну она переставляет ноги :slight_smile: Да я никогда даже не задумывался об этом. Да, похоже, названные шаблоны используются в Selenide. Возможно, ещё какие-то. Ну а какая разница? Зачем вы это спрашиваете? Не забивайте вы себе голову этими шаблонами.

Большой проект с UI тестами в открытом доступе вы вряд ли где-нибудь найдёте, это же суровый энтерпрайз обычно. Есть игра “виселица”: GitHub - selenide-examples/hangman: The hangman game written in Java - она специально сделана примерно как наши большие рабочие проекты.

Про pom.xml вопрос остался незавершённым?

Мне фреймворк нравится, все что написано и рассказано у меня вызывает только “теплые чувства” :smile: если это можно так назвать.

Но…

  • Если я начинающий тестировщик, и только начинаю писать тесты, изучать webdriver, то меня вся это простота только запутает и когда нужно будет более тонко настроить webdriver то я просто не пойму где это сделать.
  • Если я “матерый” тестировщия то я скажу класс, но я напишу свой “велосипед”, зачем мне разбираться в чужом, я напишу свой конкретно под свой проект под свои нужды, со своими отчетами итд.

я не имею ничего против selenide, просто хочу ответить на вопрос:

  • Почему я могу использовать selenide на своих проектах? Какие есть ограничения и когда я их достигну?

Привет! Спасибо за вопросы. Вопросы понятны, попробую ответить.

  • “почему не могу использовать Selenide в своём проекте” - честно, не могу придумать ни одной причины. Можете.
  • “какие есть ограничения” - да практически никаких. Все методы Selenide можно переопределить, все методы из голого Selenium можно использовать.
  • “меня вся эта простота только запутает” - очень распространённое мнение. А почему вас не пугает простота JUnit или TestNG? А простота Java? А давайте все тесты писать сразу на ассемблере, чтобы не пугаться простоты? Давайте тогда уж и компьютеры выбросим , будем на счётах работать? Человечество совершает прогресс, Selenide - это часть прогресса. Сядете в первый вагон или сойдёте на предыдущей станции?
  • “Я напишу свой велосипед” - ещё более распространённое мнение. Это от того, что людям интереснее строить свои велосипеды, чем решать реальные задачи бизнеса, за которые им на самом деле платят деньги. Я понимаю это желание - сам такой - но для бизнеса оно вредное. Во-первых, это мнение строится на неправильном предположении, что “я напишу быстро, чего там писать-то”. Первую версию действительно быстро, но потом потихоньку начнёт вскрываться так много нюансов, что на их изучение и исправление уйдёт масса времени, которое могло бы быть потрачено с пользой. И в третьих - “под свои нужды”. Людям нравится думать, что у них уникальные нужды. А на самом деле “времена всегда одинаковые”. В Selenide вложены, помимо строчек кода, лучшие практики, накопленные нами за годы работы в программировании и автоматизации. Если чего-то в Selenide нет - это скорее всего потому, что этого и не стоит делать. Если Selenide не подходит под ваши нужды - это повод задуматься: может, у вас неправильные нужды . Это как Apple знает лучше вас, какой дизайн для Вас лучше, а JetBrains знают лучше вас, как должна вести себя Ваша IDE. :slight_smile:
    Ну, или мы тупо не успели сделать - тогда эта проблема решается проще всего…
3 лайка

Андрей, здравствуйте! Подскажите пожалуйста, у меня появилась необходимость устанавливать плагин на хром перед прохождением теста, это нужно делать каждый раз при создании нового инстанса браузера, какие есть удобные способы сделать это в Selenide? На чистом вебдрайвере я просто пишу что-то такое:

ChromeOptions options = new ChromeOptions();
options.addExtensions(new File("/path/to/extension.crx"));
WebDriver driver = new ChromeDriver(options);

ЗЫ: Кстати, хочу вас похвалить - я был на Selenium Camp 15, вы там были лучшим докладчиком как по части качества материала, так и по подаче, так держать )

1 лайк

Вроде бы разобрался - достаточно дописать строчку WebDriverRunner.setWebDriver(driver);

Однако так вебдрайвер стартует раз в 10 медленее, почему-то.

Спасибо!

Медленный, может, потому, что у вас включены implicitWait? Или этот плагин реально замедляет работу браузера. Зачем он вообще нужен, что он делает?

Нет, медленный именно старт вебдрайвера с этими опциями - в консоли висит Starting ChromeDriver v2.14 и так продолжается минута-полторы, затем открывается браузер и идёт тест как обычно, т.е. это еще до всяких ожиданий. Не понимаю почему так происходит, в аналогичный же тест на C# стартует почти моментально.

Ну значит точно плагин корявый. А можете его зашарить?

К сожалению не могу, так как плагин внутренний и связан с секьюрностю, часть продукта который мы разрабатываем. Вряд ли он может быть корявый. Решение, однако, я нашел - оказывается, если загружать плагин распакованным, всё работает быстро.

Ах вот оно что… Подозреваю, что по этой же причине Firefox driver медленно запускается - он тоже распаковывает свой плагин каждый раз.

А сколько мегабайт весит плагин? Сколько в нём файлов?

Запакованным он весит чуть менее 4 мегабайт, распакованным 8.6 мегабайт, файлов в нём 20. Вроде бы не такие уж и большие цифры, но разница в скорости запуска очень серьезная.

Да, думаю, в этом может быть проблема. 8 мб не так уж мало, если распаковывать неэффективно.

Андрей, у вас в Selenide Wiki сказано, что нет необходимости закрывать браузер явно, Selenide позаботиться об этом сам, однако в моем случае, браузер закрывается только в том случае, если тест отработал без ошибок, если же он зафейлился или произошла другая ошибка, то браузер не закрываются, в чём может быть проблема?

Должен закрываться и после упавшего теста. Возможно, бага. Возможно, бага вебдрайвера. А какой браузер, какая версия?

Браузер Chrome, версия Version 42.0.2311.22 beta-m (64-bit)