#java #testing #selenium
#java #тестирование #selenium
Вопрос:
Я добавляю веб-тесты в свой проект, используя 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 и following-sibling, это было не слишком сложно.
final WebElement errorElement = web.findElement(By.xpath("//*[@id='" elementId "']/following-sibling::span[@class='error']"));
Это дает мне то, что я хотел, и выдает NoSuchElementException
, когда его здесь нет, а это именно то, что я хочу.
Комментарии:
1. отлично, мне тоже нужен был ответ
2. Это можно даже упростить, используя,
final WebElement errorElement = dateElement.findElement(By.xpath("following-sibling::span[@class='error']"));
если у вас есть фактическийWebElement dateElement
доступный. Вы должны использовать этот элемент в качестве корня поиска, но обратите внимание, что выражение xpath не должно начинаться с//
(или/
) в этом случае, иначе он все равно будет искать из корня документа.3. спасибо neXus, это именно тот метод, который я ищу!
Ответ №2:
elementSelector = "input span[class='error']";
final WebElement dateElement = web.findElement(By.cssSelector(elementSelector));
Комментарии:
1. Почему не
errorElement
вместоdateElement
? А что, если это ошибка, не связанная с dateElement?2. @tishma, потому что это было то, что использовалось для OP