Как мне пождать, когда элементы всплывающего окна полностью погрузятся ? У меня есть поле, куда можно ввести название населенного пункта. Причем при вводе, появляется вспомогающий список, в котором обязательно нужно выбрать нужный пункт. Если данные не корректны(поле пустое, написаны невалидные данные), то список не появляется.
public PersonalDataWindow setTownOfResident(String town) {
$(CITY_OF_RESIDENCE_FIELD)
.shouldBe(Condition.visible.because("The city of residence field is not displayed"))
.setValue(town);
ElementsCollection listPossibleTowns = $$(LIST_OF_TOWN);
//wait
if (!listPossibleTowns.isEmpty()) {
for (SelenideElement el: listPossibleTowns) {
if (el.getText().contains(town)) {
el.shouldBe(Conditions.clickable).click();
break;
}
}
}
return this;
}
Соответственно, понятно, что нужно как-то подождать, когда мой список появится. Если я добавлю на месте wait что-то вроде Thread.sleep(500), то все отлично отработает, но выглядит это как то странно. Как мне используя Selenide решить проблему ?
Подскажите со своей профессиональной точки зрения, если Вас не затруднит, должен ли метод кидать ошибку. По сути я могу в поле записать все, что угодно, но система найдет варианты только при валидном значении. Мой тест выстроен таким образом, что я пытаюсь записать, например, пустое поле или не валидные значения, и данные сохранить. На это система должна ответить предупреждением/ошибкой. В таком случае, если я позволяю записать не валидные значение и пытаюсь сохранить, то мой метод кинет ошибку, так как нужный элемент из списка не найдет. Это верный подход или стоит предпринять шаги, чтобы метод не кидал исключение (например обернуть в try catch)?