Подтвердить что ты не робот

Селен: найти элемент "рядом с" другим элементом

Я добавляю веб-тесты в свой проект с использованием Selenium. У меня уже есть куча тестов, которые проверяют конкретный элемент, используя:

final WebElement dateElement = web.findElement(By.id(elementId));

И это прекрасно работает. Теперь у меня есть еще одно требование. Это на моей сгенерированной странице:

<input type="text" id="dateElement" name="dateElement" value="bunch of monkeys" tabindex="101" placeholder="yyyy-mm-dd">
<span class="error">dateElement is an invalid date</span>

Как я могу получить сообщение об ошибке? Я хотел бы что-то, что позволяет мне запрашивать элемент span с классом "ошибка", который сразу после dateElement.

(Это сообщение об ошибке было передано с помощью Spring MVC, поэтому его нелегко изменить напрямую. Возможно, я думаю, но я бы предпочел не делать этого.

Любая альтернативная идея приветствуется.

4b9b3361

Ответ 1

ОК, я уже нашел решение с использованием Xpath и следующего-брата, это было не слишком сложно.

final WebElement errorElement = web.findElement(By.xpath("//*[@id='" + elementId + "']/following-sibling::span[@class='error']"));

Это дает мне то, что я хотел, и бросает NoSuchElementException, когда он не здесь, что именно то, что я хочу.

Ответ 2

elementSelector = "input + span[class='error']";

final WebElement dateElement = web.findElement(By.cssSelector(elementSelector));