Вышла Selenide 6.8.0

Вышла Selenide 6.8.0

Мы тебя найдём даже в shadow dom


Недоброе утро!

Пока в мире творится здипец, мы выпускаем релиз Selenide 6.8.0.
Фич немного, больше обновление зависимостей.

Рекурсивный поиск по shadow dom

Как вы знаете, в селениде есть возможность искать элементы внутри shadow dom. И даже в нескольких вложенных shadow dom:

$(shadowCss("#reportButton", 
     "#shadow-host", "#inner-shadow-host")).click();

Хорошо, что это возможно, но это по-прежнему требует ваших временных затрат на то, чтобы изучить dom и найти точные локаторы для всех этих теневых элементов.

Теперь вы сможете сэкономить время с помощью нового метода shadowDeepCss - он ищет элемент во всех shadow root по всему dom.

$(shadowDeepCss("#reportButton")).click();

Естественно, остаётся риск, что такой “слишком широкий” поиск может найти и не тот элемент, если в ваших теневых областях есть несколько элементов в искомым локатором. В этом случае придётся вернуться к более точечному поиску.

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

См. issue 1946.

Спасибо

  1. Boris Osipov за PR 1947, а также
  2. Georgegriff за проект query-selector-shadow-dom, откуда мы этот код и спёрли.


Добавили метод page(), не требующий параметр Class

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

Теперь в метод page(Class pageObjectClass) больше не нужно передавать параметр Class. Да-да! Вместо

SelectsPage page = page(SelectsPage.class);

вы сможете писать просто

SelectsPage page = page();

Раньше я думал, что Java так не умеет, но потом нашёл хак.

См. PR 1961 и спасибо Тагиру Валееву за хак.


Добавили аннотацию @As

… для задания алиасов полям пэдж обжекта.

1. Без алиасов

Если у вас есть пэдж обжект с аннотациями типа @FindBy:

class PageObject {
  @FindBy(xpath="//table/div[3]/span[4]/h1")
  SelenideElement header;
}

И тест типа page.header.shouldBe(visible),

То в отчётах он выглядит громоздко и непонятно:

| open                                  | https://devclub.eu  | PASS  |
| By.xpath: //table/div[3]/span[4]/h1   | should be(visible)  | FAIL  |

А если тест упадёт, то в сообщении не очень-то понятно, о каком элементе идёт речь:

Element not found {By.xpath: //table/div[3]/span[4]/h1}

Люди часто хотят дать какое-то человеческое название этому элементу, чтобы не видеть в отчётах длинный непонятный xpath.

2. Сопротивление

Я всегда был против этого. Я считаю, что не только отчёты, но и сами тесты должны быть читабельными. Я за чистый код. Не нравится уродливый xpath - ну так измени его, а не прячь!

Но потом я решил дать заднюю.

Ведь если мы не дадим заднюю, то они могут дать заднюю, а вот если мы её дадим, они её не дадут. Заднюю никто не даст больше, кроме нас.

Убедительно же! Поэтому в версии Selenide 5.17.0 мы добавили метод $.as("alias").

3. С алиасами

А с этого релиза - ещё и можете навесить аннотацию @As на поля поля пэджобжектов.

class PageObject {
  @As("Large header")
  @FindBy(tagName = "h1")
  SelenideElement header1;
}

В отчётах он будет выглядеть короче:

| open    | https://devclub.eu   | PASS   |
| title   | should be(visible)   | FAIL   |

А при падении теста будет легче понять, о каком элементе речь:

Element "title" not found {By.xpath: //table/div[3]/span[4]/h1}

См. issue 1903 и PR 1956.

Не забывайте: врут все.

Документация врёт, комментарии врут, пользователи врут. Рано или поздно соврёт и алиас. Локаторы поменяли, а алиас забыли. Или элемент скопировали, а алиас забыли поменять. И т.д.

Отчёты - это хорошо, но в конечном итоге верить можно только коду.


Обновили зависимости

  • BrowserUpProxy from 2.2.2 to 2.2.3
  • LittleProxy from 2.0.11 to 2.0.12
  • Netty from 4.1.80.Final to 4.1.82.Final
  • slf4j from 2.0.0 to 2.0.2
  • JUnit from 5.9.0 to 5.9.1 – см. release notes

Объявлена частичная мобилизация зависимостей!


Новости

Статистика

Свежая статистика скачиваний Селенида нас только радует. Перевалили за 400 тыщ!


Смотрите Масяню!


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

ru.selenide.org