Всем привет! На излёте сентября вы выкатили Selenide 6.19.0.
Можешь сплетничать, ненавидеть, регистрировать баги, и обсуждать в чате. Но мы же оба понимаем, что при встрече ты будешь мне мило слать пулреквест.
Новый метод $.highlight()
для подсветки элемента
Чувствую, открываем очередной ящик Пандоры, но что поделать.
В общем, мы добавили метод для подсветки элемента.
Зачем это надо?
Честно говоря, незачем. :)
- Когда у вас тесты автоматически бегают на CI, никто на них смотреть не должен, и подсвечивать ничего не нужно.
- Но вот если надо сделать крутое демо на конференции или просто показать коллегам - тут подсветка может пригодиться. Или, скажем, когда вы дебажите какой-то тест, сложный случай, когда непонятно, что куда кликается.
Как именно он подсвечивается?
На данный момент есть два варианта подсветки: цветным фоном (по умолчанию) или рамкой.
import static com.codeborne.selenide.HighlightOptions.*;
$("h1").highlight(); // по умолчанию - background()
$("h1").highlight(background()); // цветной фон
$("h1").highlight(border()); // цветная рамка
Фону и рамке можно задать свои стили:
$("h1").highlight(background("rgb(85, 180, 250);"));
$("h1").highlight(border("3px solid blue"));
А можно и задать полностью крафтовый стиль для выделения элемента:
$("h1").highlight(style("color: white; background-color: red;"));
Дальнейшее развитие
Пока что метод подсвечивает только тот элемент, который вы скажете. В будущем, наверное, стоит добавить автоматическую подсветку каждого элемента, с которым происходит взаимодействие. Как раз такая подсветка позволит и демо эффектное сделать, и плавающую ошибку подебажить.
В общем, делитесь идеями, будем думать.
См. issue 1277, issue 2395 и PR 2481.
Убираем невидимые пробелы в текстах коллекций
Как вы помните, в Selenide 6.16.0 мы ускорили работу с коллекциями с помощью вставок JavaScript кода. Оказалось, что при этом мы чуть изменили поведение для элементов, содержащих невидимые пробелы и прочие хитрые символы.
Допустим, у нас на страничке есть такой элемент:
<div id="status">
<span> Боевой дух</span>
<span> ипучая \u200Bдействительность </span>
</div>
И раньше проверка типа
$$("#status span").shouldHave(texts("Боевой дух", "ипучая действительность"));
падала:
Expected :[Боевой дух, ипучая действительность]
Actual :[Боевой дух, ипучая действительность]
Причём выглядит сообщение так, как будто тексты одинаковые. Но в первой строке - обычный пробел, а во второй - невидимый пробел “
”.
Теперь же селенид будет вычищать такие невидимые пробелы. Правильно это или нет, можно спорить, но так велит нам стандарт WebDriver, и так работает Selenium. И мы тоже будем соответствовать.
См. issue 2469 и PR 2482.
Спасибо Maksim Au6ojlut за подсказку с чёртовыми пробелами.
Обновились на Selenium 4.13.0
Обновили Selenium с 4.12.1 на 4.13.0
Вот тут его ченджлог.
Несколько важных багфиксов, но всё ещё бегает на Java8. Ловите, пока он не стал требовать Java 11+! ;)
См. PR 2479.
Убрали строгую проверку на “/wd/hub”
Если вы используете Selenoid, то раньше плагин selenide-selenoid
проверял, чтобы URL заканчивался строкой /wd/hub
.
Оказалось, что URL бывает и другим, и поэтому мы эту проверку убрали.
См. issue 2475.
Спасибо Dmitry Plodukhin за PR 2476.
Заменили класс ElementsContainer
на интерфейс Container
Как вы помните, недавно мы запретили пэдж обжектам наследоваться от ElementsContainer
.
Такой вариант больше не работает:
class LoginPage extends ElementsContainer {
}
Я по-прежнему настаиваю, что это не нужно, но нашлись такие проекты, где это необходимо из-за текущего наследия и невозможности всё переписать.
Для таких проектов мы добавили интерфейс Container
:
class LoginPage implements Container {
}
Для обычных виджетов тоже рекомендуется поменять extends ElementsContainer
на implements Container
.
Разница только в том, что это интерфейс, а не абстрактный класс (надо писать “implements” вместо “extends”), и в нём не будет метода getSelf()
.
Ну и не надо.
См. issue 2439 и PR 2465.
Добавили методы $.tap()
, $.doubleTap()
для мобилок
import static com.codeborne.selenide.appium.SelenideAppium.$;
$(By.name("ComputeSumButton")).tap();
$(AppiumBy.xpath("//android.widget.Button")).doubleTap();
$(AppiumBy.xpath(".//*[@text='Лютая арта']")).tap(longPressFor(ofSeconds(4)));
Добавили селектор по классу и индексу для мобилок
import static com.codeborne.selenide.appium.AppiumSelectors.byClassNameAndIndex;
import static com.codeborne.selenide.appium.SelenideAppium.$;
$(byClassNameAndIndex("android.widget.TextView", 7)).tap();
Спасибо Amuthan Sakthivel за PR 2440.
Новости
- Selenium logger - новый проект от Titus Fortner
- Introduction to Selenide - Исторический момент! Пост на легендарном сайте Baeldung.
- Selenide appium - Видос с последней конференции LambdaTest от Amuthan Sakthivel
- Selenide test automation: using Selenoid in docker by Dora & Margarita
- Things to keep in mind when using Selenide - пост на японском от nilwurtz
- Intro to Selenide By Updates4Devs.com
- Non-static Selenide: пробуем жить с selenide-core и что это нам даст - интересная нетривиальная тема от Дмитрий Тучс
- Почему наследование в автотестах это антипаттерн? - пост (не про Selenide) от Ruslan Galliamov
ru.selenide.org
28.09.23