Всем привет! На излёте сентября вы выкатили Selenide 6.19.0.
Можешь сплетничать, ненавидеть, регистрировать баги, и обсуждать в чате. Но мы же оба понимаем, что при встрече ты будешь мне мило слать пулреквест.
$.highlight()
ElementsContainer
на Container
$.tap()
, $.doubleTap()
для мобилок$.highlight()
для подсветки элементаЧувствую, открываем очередной ящик Пандоры, но что поделать.
В общем, мы добавили метод для подсветки элемента.
Честно говоря, незачем. :)
На данный момент есть два варианта подсветки: цветным фоном (по умолчанию) или рамкой.
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.12.1 на 4.13.0
Вот тут его ченджлог.
Несколько важных багфиксов, но всё ещё бегает на Java8. Ловите, пока он не стал требовать Java 11+! ;)
См. PR 2479.
Если вы используете 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.
28.09.23