Привет!
Вы любите пазлеры? Соскучались по пазлерам? В последний раз мы показывали пазлеры аж в 2017 году, кто не смотрел - смотрим!
И вот наконец мы опубликовали в твиттере новый пазлер:
Одинаково ли работают эти строки? Или есть какая-то разница?
1. $(".btn").shouldBe(visible, enabled);
2. $(".btn").shouldBe(visible).shouldBe(enabled);
Варианты ответов
Люди в твиттере и чатиках накидали разных вариантов:
- обе строчки работают одинаково (самый популярный ответ)
- первый случай: логическое or, второй: логический and
- Второй работает на %ожидание по умолчанию% дольше.
- Первый должен отработать с одним тайм-аутом, второй должен с двумя тайм-аутами
- в первом случае упадёт, если отсутствует любое из условий, во втором - если не visible, но enabled.
Правильный ответ
В большинстве случаев оба варианта работают одинаково.
Оба варианта - это логическое AND. В обоих вариантах селенид проверит, что элемент соответствует обоим условиям.
enabled | disabled | |
видимый | ok | nok |
невидимый | nok | nok |
Но есть нюанс.
Нюанс
Разница проявится в том случае, если элемент соответствует условиям не сразу, а через какое-то время. Причём первому условию меньше, чем за 4 секунды, а второму - больше. (Допустим, visible он становится через 3.5 секунды, а enabled - ещё через 3.5 секунды).
Всё дело в том, что таймаут (по умолчанию 4 секунды) есть у метода
shouldHave
, а у проверок (visible
,enabled
,cssClass
,text
) никакого таймаута нет - они просто умеют проверить, да или нет.
Пример
Откроем для примера Светофор. Светофор становится зелёным через 3.5 секунды, а текст на нём появляется ещё через 3.5 секунды.
Первый вариант проверяет, что светофор удовлетворит обоим условиям в течение 4 секунд:
$("#light").shouldHave(cssClass("green"), text("GO!")); // таймаут 4 секунды
И эта проверка упадёт, т.к. таймаут на эту проверку - 4 секунды, но элемент не приобретёт и цвет, и текст в течение 4 секунд.
А второй вариант не упадёт:
$("#light")
.shouldHave(cssClass("green")) // таймаут 4 секунды
.shouldHave(text("GO!")); // и плюс ещё 4 секунды
Первая проверка дождётся, пока элемент станет зелёным (и он станет в течение 4 секунд). После этого запустится вторая проверка и запустит новый таймаут с целью дождаться, пока у элемента появится текст. И он дождётся.
Видимо, наиболее близкий к правильному был ответ “Первый должен отработать с одним тайм-аутом, второй должен с двумя тайм-аутами”.
Ваши пазлеры
Есть ли у вас свои пазлеры? Присылайте их нам, давайте будем отгадывать вместе!
ru.selenide.org
22.08.22