Селен: найти элемент "рядом с" другим элементом
Я добавляю веб-тесты в свой проект с использованием 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, поэтому его нелегко изменить напрямую. Возможно, я думаю, но я бы предпочел не делать этого.
Любая альтернативная идея приветствуется.
Ответы
Ответ 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));