Ожидание элемента в selenide, через ShouldBe

Теги: #<Tag:0x00007f78f66f5f60> #<Tag:0x00007f78f66f5d58> #<Tag:0x00007f78f66f5c90> #<Tag:0x00007f78f66f5ba0>

Привет.
Такая проблема:
Есть список элементов, по нажатию на один из них появляется форма с input.
Обращаемся к input по name, сначала очищаем поле и записываем значение:
$(byName(“name”)).shouldBe(Condition.visible).clear(); $(byName(“name”)).setValue(“qwerty5”);

Проблема в том что когда нажимаем на элемент,через какое то время появляется форма с input и тест падает,пишет что элемент не виден.Но если в начале теста поставить sleep 4 секунды, то все работает.

Попробуйте вместо shouldBe использовать метод waitUntil и передать в него нужное время ожидания.

1 симпатия
  1. По дефолту у Селенида, таймаут 4 секунды. Его можно переопределить глобально через Configuration . Единственная разница между shouldBe и waitUntil в том, что waituntil принимает второй аргумент который может переопределить таймаут на кастомный. То есть если Вам не хватает только вот для этого элемента пары секунд для вейта. WaitUntil то что Вам нужно.
  2. Если Вы не меняли никакие конфигурации селенида (fastValue), то setValue по дефолту вызовет clear(), поэтому рекомендую оставить только setValue.
1 симпатия

Спасибо, с waintUntil сработало!

Более не актуально.
Теперь 'waitUntil(com.codeborne.selenide.Condition, long, long)' is deprecated и у shouldBe появился второй параметр Duration - com.codeborne.selenide.SelenideElement.shouldBe(Condition var1, Duration var2);

Пример:

$("#id").shouldBe(visible, Duration.ofSeconds(30));