Quantcast
Channel: Selenide
Viewing all 47 articles
Browse latest View live

Вышла Selenide 3.8

$
0
0

Привет!

Мы выпустили Selenide 3.8! В нём мы подправили много мелких недочётов и сделали некоторые небольшие, но полезные полезности.


Исправлена загрузка файлов (upload) на удалённых браузерах в гриде

Спасибо Alexei Vinogradovза исправление грида!

Теперь можно отключать создание *.html файлов

Когда ваш драгоценный тест падает, по умолчанию Selenide создаёт 2 файла:

  1. Скриншот - файл *.png
  2. Исходный код текущий страницы - файл *.html

Оказалось, что не все хотят сохранять *.html-файлы. Например, в случае одностраничных приложений в этот html-файл попадал html-код всех-привсех страниц приложения, то есть файлы получались большими и бессмысленными.

Теперь можно отключить сохранение html-файлов - как обычно, либо через системную переменную:

  mvn test -Dselenide.savePageSource=false

либо прямо в коде:

Configuration.savePageSource=false;

Спасибо Boris Osipovза этот pull request!

Добавлен метод $.dragAndDropTo(WebElement)

До сих пор в Selenide был только метод $.dragAndDropTo(String), где строковой параметр - это CSS селектор целевого элемента. А иногда хочется определять целевой элемент и по-другому.

Для таких случаев теперь есть метод $.dragAndDropTo(WebElement)позволяет перетащить элемент в другое место. Например:

SelenideElementtarget=$(byText("Drop here"));$("#from").dragAndDropTo(target);

См. issue #355

Теперь аннотации SimpleReportи SoftAssertsдля TestNG - потокобезопасные

Если вы используете аннотации SimpleReportили SoftAssertsи фреймворк TestNG (бедняги!), да ещё и запускаете тесты параллельно в несколько потоков, то вы могли замечать, что иногда отчёт о прохождении тестов пустой. А иногда могли ловить ConcurrentModificationException.

Оказалось, TestNG конкретная редиска и вообще нехороший фреймворк. Если вы объявляете @Listener(SoftAsserts)у одного класса, TestNG создаёт только один инстанс класса SoftAssertsи использует для всех тестов, даже параллельных.

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

В общем, теперь мы это исправили, и SoftAssertsумеет работать параллельно в нескольких потоках даже в TestNG.

См. issue #364и #303.

Добавили методы в класс Selectors: byCssSelector()и byClassName()

Я до сих пор не уверен, что это так уж нужно, но народ просил.

Теперь в классе Selectorsесть by*аналоги всех методов из селениумовского By.*.

См. #360.

Исправили JavaScript ошибку при запуске браузера Edge

Теперь Selenide можно использовать и с новым микрософтовским браузером Edge. Говорят, он быстр и свеж, как Тимати.

См. #339.

Теперь метод $.screenshot()сохраняет скриншот в правильное место

Есть в Selenide такой метод, который сохраняет скриншот не всей страницы, а одного элемента:

StringscreenshotFile=$("#footer").screenshot();

Всё бы хорошо, но он сохранял скриншоты в корневую папку проекта. Теперь мы его исправили, и он складывает файлы в папку build/reports, как и остальные методы для снятия скриншотов.

См. #290.

Добавлена защита против неправильного использования soft asserts

Теперь Selenide кинет ошибку, если вы включите режим “Soft asserts”, но забудете добавить соответствующую аннотацию к тест-классу.

См. #302.

В Javadoc всех методов SelenideElementдобавлены ссылки на имплементации этих методов

Например, метод $(“input”).setValue(“hello”)реализован в классе SetValue

См. #367.

Обновились до htmlunit 2.23

См. список изменений


Новости

Десерт

И на десерт - свежая шутка про Чака Норриса:

Чак Норрис не использует Selenide.
Чак Норрис пишет тесты на голом селениуме.
А что, он же бессмертный, у него есть на это время.



Обновляйтесь!

Андрей Солнцев

ru.selenide.org


Вышла Selenide 3.9.1

$
0
0

Привет!

Мы выпустили Selenide 3.9.1!



Киллер фича! Selenide умеет скачивать любые файлы! Откуда угодно.

Мы хотели сделать это давно, и вот наконец свершилось! Бесконечные проблемы со скачиванием файлов в селениуме ушли в прошлое. Теперь это легко. Всегда. Один простой метод на все случаи жизни:

Filereport=$("input#submit").download();

В Selenide метод downloadсуществует давно. Но до сих пор он умел скачивать файлы только по ссылке с атрибутом href: <a href.

Это было круто, но в некоторых случаях недостаточно. Например:

  • Клик по кнопке сабмитит форму, а в результате сабмита начинает скачиваться файл.
  • Клик по кнопке открывает PDF в новом табе (режим “inline” - встроенный просмотрщик PDF в браузере)

Теперь же Selenide умеет скачивать любые файлы. Для этого он использует встроенный proxy-сервер (а именно, BrowserMobProxy)

Как именно работает скачивание:

  1. Тест вызывает команду $("selector").download();
  2. Selenide активизирует прокси-сервер
  3. Selenide кликает элемент
  4. Прокси сервер запоминает все ответы сервера (response), которые содержат http-заголовок Content-Disposition. Из него Selenide достаёт имя файла и сохранят файл с таким именем в папке build/reports/tests.
  5. Selenide ждёт (до 4 секунд), пока в списке не появится хотя бы один файл
  6. Метод $.download()возвращает первый скачанный файл.
  7. Если за это время появились новые окна, Selenide закрывает всех их. Это нужно для тех случаев, когда PDF открывается в новом окне браузера.

См. issue #196и pull request #267.

Огромное спасибо Дмитрию Деминуза вклад в эту фичу, предложения и обсуждения!

Прокси-сервер

Да, теперь Selenide запускает свой прокси-сервер во время запуска тестов.

В будущем мы сможем использовать прокси-сервер для реализации многих других полезных возможностей. Например, проверять http статусы страниц и других ресурсов, внедрять свой код в страницы и пр.

Кидайте идеи, давайте побрейнстормим!

Предупреждение о слишком больших запросах и ответах

А вот и первое использование прокси-сервера (помимо скачивания файлов). Теперь Selenide отслеживает размер запросов-ответов и пишет предупреждение в лог, если размер какого-то реквеста или респонса превышает 2 MB.

Пока это экспериментальная фича. Расскажите, как она прижилась у вас. Обнаружили что-то полезное? Были ли проблемы?

См. issue #383

Теперь листенер SoftAssertsнормально работает с TestNG

Оказалось, TestNG конкретная редиска и вообще нехороший фреймворк. Если вы объявляете @Listeners(SoftAsserts.class)у одного класса, TestNG автоматически применяет его ко всемвашим классам. Нет, ну это надо было додуматься, а!

Мы нашли решение для этой проблемы. Теперь листенер SoftAssertsсам проверяет, объявлен ли он у текущего тестового класса (или его предка).

См. issue #384

Теперь аннотация SoftAssertsдля TestNG игнорирует тесты с атрибутом “expectedExceptions”

Если у вас есть такой тест:

@Listeners(SoftAsserts.class)publicclassMyTest{@TestpublicvoidmyCheckA(){...}@Test(expectedExceptions=...)publicvoidmyCheckB(){...}}

то очевидно, что SoftAssertsдолжны включаться в методе myCheckA, но недолжны в методе myCheckB. Потому что он ожидает какую-то конкретную ошибку, и если SoftAssertsеё спрячет, испортит всё дело.

См. issue #372

Исправили ошибку с basic auth в браузере IE

См. issue #366и pull request #369

Спасибо Anton Aftakhovза этот pull request!

Обновились до библиотеки gson 2.7

Сам Selenium использует довольно старый gson 2.3.1, а в некоторых проектах бывает нужен более новый.


Новости



Обновляйтесь!

Андрей Солнцев

ru.selenide.org

Вышла Selenide 3.9.2

$
0
0

Привет!

Мы выпустили Selenide 3.9.2!



Скачивать файлы можно по-разному

Как вы знаете, в Selenide 3.9 вы изменили способ скачивания файлов. Отзывы пользователей были кардинально разные: для одних новый способ работал там, где старый не работал, но у других, наоборот, новый способ не работает там, где старый работал.

Поэтому мы решили дать пользователю выбор.

Теперь вы можете выбирать, каким способом скачивать файлы.

“Новый” способ - PROXY

Это способ включен по умолчанию.

Этот способ скачивает файлы с помощью встроенного прокси-сервера.

Плюсы:

  • Этот способ лучше тем, что он более универсальный: он работает не только с <a href, но и при сабмите форм, да и вообще в любом случае, когда сервер выдаёт ответ с файлом.

Минусы:

  • Если вы запускаете свой вебдрайвер (и добавляете его в Selenide с помощью команды setWebDriver()), то он не будет ничего знать о селенидовском прокси-сервере, который поэтому не получит доступ к ответам сервера. Мы подумаем, как это можно улучшить, а пока -

“Старый” способ - HTTPGET

Если вы хотите использовать старый способ, пропишите настройку -Dselenide.fileDownload=HTTPGET. Или прямо в коде:

Configuration.fileDownload=HTTPGET;

Плюсы:

  • Работает независимо от наличия прокси-сервера.

Минусы:

  • Работает только элементами с <a hrefи умеет делать только GET запросы.
  • Может не работать, если с машины, где запускаются тесты, нет доступа к тому серверу, с которого скачиваются файлы.

Теперь вам точно ничто не мешает обновиться на Selenide 3.9.2


Новости

Немного статистики

Статистика скачиваний Selenide за август 2016:



Обновляйтесь!

Андрей Солнцев

ru.selenide.org

Вышла Selenide 3.10

$
0
0

Привет!

Мы выпустили Selenide 3.10!

Прокси-сервер выключен по умолчанию

Мне грустно говорить об этом, но эксперимент с прокси-сервером, кажется, пока не удался.

Проблема с новым способом скачивания файлов через встроенный в Selenide проекси-сервер. На всех моих проекатх он работает, но многие жалуются, что у них не взлетело. Почему - пока неясно. Возможно, не работает у тех, кто использует Selenium Grid.

В общем, пока вернулистарый способ скачивания по умолчанию. Кто хочет - включайте скачивание через прокси с помощью настройки:

-Dselenide.fileDownload=PROXY

Или прямо в коде:

Configuration.fileDownload=PROXY;

Кстати, мы исправили ошибку 393: Selenide даже не пытается стартовать прокси-сервер, пока соответствующая настройка не будет включена.

Добавлена поддержка множественных селектов

Знаете, бывают такие выпадающие списки, в которых можно выбрать несколько опций (<select multiple>). Теперь в Selenide можно тыкать и в такие. Несколько опций можно выбрать всего одной командой:

select.selectOption("Маргарита","Theodor Woland");// по текстуselect.selectOption(0,2,3);// по индексуselect.selectOptionByValue("cat","woland");// по значению

А также мы добавили метод для получения списка всех выбранных опций:

select.getSelectedOptions().shouldHave(texts("Маргарита","Theodor Woland"));

См. issue 400

Можно печатать отчёт только для упавших тестов

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

Для JUnit:

@RulepublicTestRulereport=newTextReport().onFailedTest(true).onSucceededTest(false);

Для TestNG:

@Listeners(TextReport.class)publicclassGoogleTestNGTest{@BeforeMethodpublicvoidsetUp(){TextReport.onSucceededTest=false;TextReport.onFailedTest=true;}}

См. issue 408

Исправили парсинг заголовка Content-Dispositionс указанием кодировки

Теперь Selenide использует правильное имя файла в случае, если заголовок Content-Dispositionвключает кодировку:

Content-Disposition: filename=Prices.csv;charset=UTF-8

См. issue 398

Исправили багу 401: “Selenide swallows exception in some cases”

Никогда не пишите catch (Throwable). Никогда!

См. issue 401

Метод open(url)теперь работает и для URL большими буквами

Это странно, но кому-то понадобилось ввести url большими буквами, и оказалось, что Selenide не умеет открывать такие файлы. УПС. Исправили.

См. issue 407

Вернули старый закомментированный тест

Хотя, кажется, его скоро снова придётся закомментировать, потому что в Selenium 3.0 этот баг вернулся. :(

См. issue 379


Новости



Обновляйтесь!

Андрей Солнцев

ru.selenide.org

Вышла Selenide 3.11

$
0
0

Привет!

Мы выпустили Selenide 3.11! Не то чтобы тут много чего поменялось, скорее это просто исторический релиз. Это последний релиз из серии 3.x - последний, что работает на Java 7 и с Selenium webdriver 2.x

Дальше будет Selenide 4.x: selenium webdriver 3.x и Java 8.

Итак, что же вошло в последнюю троечку:

Добавили условие checked

Теперь можно написать нормальное условие для проверки чебокса:

$("#i-agree").shouldBe(checked);

Раньше приходилось писать $.shouldBe(selected), что нечевидно. Раз есть чекбокс - значит, он должен быть “checked”.

См. issue 416

Оптимизация getMessage()

В селениуме есть такая странная особенность. Когда вы получаете ошибку из вебдрайвера (то есть любой подкласс SeleniumException), у него вызывается метод getMessage().

А вот этот метод SeleniumException.getMessage()пытается быть слишком умным и добавляет в сообщение об ошибке IP и имя текущего компьютера. А это может занимать очень продолжительное время в зависимости от фазы луны. И оказалось, что Selenide дёргает этот несчастный метод несколько раз подряд.

У меня однажды так и было: я оказался в необычной WiFi сетке, и внезапно мои тесты стало дико тормозить. Пара часов ушло на поиск причины, но это ещё полбеды. Беда в том, что исправить это невозможно - этот код зашит в selenium webdriver.

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

Но авторы селениума прислушаться желают. И всё, что мы можем сделать - это только оптимизировать вызовы getMessage()в Selenide, так чтобы этот злосчастный метод не дёргался повторно.

Что мы и сделали.

См. issue 415



Все в предвкушении Selenium 3.0…

Андрей Солнцев

ru.selenide.org

Вышла Selenide 4.0

$
0
0

Привет!

Это свершилось!

После трёх лет ожидания вышел Selenium Webdriver 3.0!

А мы выпустили Selenide 4.0.

Что изменилось?

Собственно, для вас ничего не должно поменяться - они просто подчистили какой-то старый мусор из селениума (который в Selenide никогда и не использовался).

Но что важно - теперь Selenide требует Java 8.

Ура, теперь весь QA мир перейдёт наконец на Java 8.

Вот мы теперь с лямбдами-то заживём!

А можно поподробнеее?

Конечно. Вот полный список изменений selenium webdriver 3.0.0.


Новости



Обновляйтесь!

Андрей Солнцев

ru.selenide.org

Обёртка или чистый вебдрайвер?

$
0
0

Бытует мнение, что для настоящего автоматизатора использовать Selenide - несерьёзно. Настоящий труёвый автоматизатор должен использовать чистый вебдрайвер - чтобы знать, как оно там внутри работает.

И вот почему это плохо.

Вам шашечки или ехать?

Представьте себе: вы очень торопитесь на самолёт. Садитесь в такси, говорите: “Срочно в аэропорт!” А таксист вам говорит: сейчас я поставлю на раму мотор, прикручу колёса, залью топливо - и мы поедем!

Ты офигеваешь, но ок, раз в этой индустрии так принято - значит, надо подождать.

Покрытие

Ждёшь пять минут, нервно посматривая на часы. Говоришь: “Ну что, едем уже?” И слышишь: “Да, я уже половину гаек в моторе прикрутил.” И гордо добавляет: “У меня покрытие гайками 70%!”

Отчёты

Ещё через пять минут ты снова нервно спрашиваешь и слышишь: “Да-да, всё круто! Сиденья уже почти установлены.” И гордо добавляет: “Можете посмотреть отчёт с картинками о проделанных шагах.”

Зато если что

Ты громко ругаешься матом и говоришь: “Да какого чёрта? Почему бы нам просто не сесть в машину и не поехать?” А водитель говорит: “Пусть джуны ездят на заводских автомобилях. А настоящие водители должны знать, как оно там внутри работает.” И гордо добавляет: “Зато если что, я смогу разобраться, что сломалось.”

Готовые решения

Стоит ли говорить, что через пять минут после начала движения у вас заливает свечи. Водила говорит: “Да, это типичная проблема. Я знаю, что делать. У меня так уже было. Там надо слип поставить в двух местах.”

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

Да, ребята, это тот чувак, который предпочитает голый селениум.

Сел и поехал

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

А это автоматизатор, использующий Selenide.

Так что же, не развиваться?

Надеюсь, на этом месте вам смешно. А многим - обидно. И это хорошо! Чем обиднее, тем лучше. Тем больше шансов, что это заставит задуматься о том, куда катится наша индустрия.

Когда обида поутихнет, у вас должен возникнуть закономерный вопрос.

Так что же, пользоваться готовым и не вникать в подробности? Неужто настоящий водитель не должен разбираться в том, как устроен двигатель и куда заливать масло? Неужто настоящий водитель не должен уметь починить машину, если она вдруг сломается посреди дороги?

Если все будут ездить на всём готовом, у нас же настоящих спецов скоро не останется!

Развиваться!

Конечно, развиваться надо! Обязательно.

Плох тот автоматизатор, который не мечтает написать свой фреймворк.

Но не за счёт клиента!

Разбирайте двигатель. Копайтесь в железках. Играйтесь с солидолом. Но у себя в гараже. А на работе - будьте добры работать. Когда у вас есть свободное время и силы - совершенствуйтесь. Когда клиенту нужно в аэропорт - везите в аэропорт и используйте для этого наиболее эффективные средства. То есть Selenide, да.



Андрей Солнцев

ru.selenide.org

Viewing all 47 articles
Browse latest View live