Недоброе утро!
Пока в мире творится здипец, мы выпускаем релиз 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.
Спасибо
- Boris Osipov за PR 1947, а также
- 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
Объявлена частичная мобилизация зависимостей!
Новости
- Продолжается серия от Dilpreet Johal - теперь Upload file with Selenide
- Alchemy or Translating JIRA with Selenide от Tomasz Buga
- Вышла Java 19.
Статистика
Свежая статистика скачиваний Селенида нас только радует. Перевалили за 400 тыщ!
Смотрите Масяню!
ru.selenide.org
24.09.22