Вышла Selenide 5.2.7

Вышла Selenide 5.2.7

Аппиум, аппиум - все ошибки сцапаем
01.08.19

Всем летний привет!

Мы выпустили несколько минорных обновлений Selenide: 5.2.5-5.2.7. Давайте расскажу, зачем понадобилось несколько.


Подправили сообщения об ошибках при запуске Selenide+Appium

Appium - это вебдрайвер для мобилок (AndroidDriver, IOSDriver). Казалось бы, хорошая идея - использовать для тестирования мобилок знакомый протокол Selenium WebDriver. Только вот многие вещи, казавшиеся логичными и стандартными в вебе, в мобилках работают по-другому или вовсе не работают.

Appium для Selenium - это как геометрия Лобачевского для геометрии евклидовой: всё круглое и через жопу.

Из-за этого, в частности, Селенид выдавал некорректные сообщения об ошибках при падении тестов. Потому, что при попытке сформировать сообщение об ошибке Селенид вызывает некоторые “стандартные” методы, которые до аппиума всегда работали во всех браузерах: $.getTagName(), $.isDisplayed(), executeJavascript(), но которые падают в Appium (или в Android, или в iOS, или везде).

В общем, для исправления этой неприятности пришлось нам добавить несколько catch (NoSuchElementException | UnsupportedOperationException | UnsupportedCommandException | WebDriverException), по сути нужных только в случае аппиума. В общем-то версии 5.2.6 и 5.2.7 как раз и понадобились для того, чтобы добавить очередной catch для очередного странного кейса.

Ну ничего, зато теперь Селенид с мобилками работает стабильнее.

См. issue 496 - Fix $.toString() in Appium

NB! Примеры тестов Selenide для мобилок можно найти на гитхабе.


Добавили метод open() без параметров

Этот метод просто открывает браузер. Пустой, blank. Без ссылки, blank.

Это тоже нужно для мобилок - ведь Селенид 5.+ требует, чтобы браузер был открыт перед тем, как совершать какие-либо операции с элементами. А в аппиум традиционный метод open(URL) не работает - там ведь нет никакого URL.

Глупая ситуация, но выход мы нашли элегантный, правда? :)

(Люди ведь и раньше просили возможность открыть пустой браузер. Как это ни странно.)

Спасибо yaroslav-orel за PR 956.


Добавили метод because для коллекций

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

$("#login").shouldBe(disabled);
$("#login").shouldBe(disabled.because("Этот неудачник ввёл неверный пароль 3 раза"));

Теперь такой же метод есть и для коллекций:

$$(".cv").shouldHave(size(3));
$$(".cv").shouldHave(size(3).because("У Пети два CV, а у Ани одно."));

Спасибо Roman Kliuha за PR 904


Исправили казус с open внутри open

А это прямо анекдотичный случай. Вызываешь ты такой метод open(url), а он тебе кидает ошибку:

IllegalStateException: No webdriver is bound to current thread: 19. You need to call open(url) first.

Типа, “вызвать open нельзя, потому что сначала нужно вызвать open”. Вызывать open экономически невыгодно.

Дело оказалось в связке Selenide+Allure.

  1. Селенид попытался открыть браузер
  2. не смог (например, не нашёл бинарник Chrome в PATH)
  3. Аллюр попытался добавить эту ошибку в свой лог
  4. Аллюр захотел для этого сделать скриншот
  5. обратился к текущему браузеру - получил ошибку.

См. фикс в


Новости

Яков Крамаренко, в своём время активный продвигатель идей селенида, проснулся от зимней спячки и бесплатно опубликовал свои курсы по автоматизации. А также начал писать книгу про Selenide:


Конференции

  • Я выступаю в Киеве 20-21 сентября на конференции QA Fest. Приезжайте, приходите! Говорят, Киев в сентябре прекрасен.


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

ru.selenide.org

01.08.19