Мы хотим отправить некоторые ключи элементу, идентифицированному по имени.В приложении может быть несколько элементов с одинаковым именем, но в этом случае будет виден только один элемент.Для этого у нас есть такой фрагмент кода (упрощенный код, без производственного кода):
List<WebElement> list = driver.findElements(By.xpath("//[@name='title']"));
for (WebElement elem : list) {
try {
elem.sendKeys(value);
break;
} catch (Exception e) {
// ignore
}
}
Если элемент title еще не существует, мы ожидаем его появления с использованием неявного ожидания.Так что обычно это будет работать нормально.В любом случае, иногда мы имеем дело с тем, что уже есть элементы с таким именем (но они скрыты), и правильный будет просто создан асинхронным кодом.Но в этом случае код не будет работать.Поскольку findElements()
вернется немедленно (без неявного ожидания), просто вернув невидимые элементы.В этом случае sendKeys()
будет ждать, пока элемент станет видимым, но этого никогда не произойдет (игнорируя новые элементы, созданные после findElements
), и поэтому произойдет сбой после неявного тайм-аута ожидания.
В основном нам нужна возможностьскажите findElements()
, что мы просто хотим иметь видимые элементы.Если видимых элементов нет, Selenium должен дождаться неявного ожидания.Это возможно?