Selenium WebDriver получает текст из свойства CSS "content" псевдоэлемента::before
Я пытаюсь проверить текст "Предоставленная информация является недействительной или неполной". отображается с помощью Selenium/WebDriver в Java.
У меня есть следующий HTML:
<div id="validationError">
<ul>
<li>Required: Server Name</li>
<li>Required: Receiving Port</li>
</ul>
</div>
с помощью следующего кода CSS:
#validationError:before {
content: 'The information provided is either invalid or incomplete.';
}
Вот мой текущий код Java:
WebElement errorBox = browser.findElement(By.id("validationError"));
Assert.assertNotNull("Could not find validation errors", errorBox);
System.out.println("Error Explanation: " + error.getCssValue("content") + "\n");
List<WebElement> errorList = errorBox.findElements(By.tagName("li"));
for (WebElement error : errorList) {
System.out.println("Error: " + error.getText());
}
System.out.println("\nError Full Text: " + errorBox.getText());
Это мой вывод приведенного выше кода:
Error Explanation:
Error: Required: Server Name
Error: Required: Receiving Port
Error Full Text: Required: Server Name
Required: Receiving Port
Кажется, я не могу найти способ проверить текст "Предоставленная информация недействительна или неполна". отображается. призвание getText()
на веб-элемент также не возвращает ожидаемую строку, но будет отображать любой другой обычный текст в этом div. Есть идеи?
2 ответа
Я не уверен на 100%, сможет ли WebDriver получить для вас содержимое псевдоэлемента. Я думаю, что вам нужно будет использовать Javascript. Ниже работает, я проверял.
String script = "return window.getComputedStyle(document.querySelector('#validationError'),':before').getPropertyValue('content')";
JavascriptExecutor js = (JavascriptExecutor)driver;
String content = (String) js.executeScript(script);
System.out.println(content);
Это должно напечатать
The information provided is either invalid or incomplete.
Пробовал то же самое, у меня работает.
Создан образец html файла:
<!DOCTYPE html>
<html>
<head>
<style>
p::after {
content: " - Remember this";
}
</style>
</head>
<body>
<p id='b'>My name is Donald</p>
<p>I live in Ducksburg</p>
</body>
</html>
Повторно использовал код Нилеша
String script = "return window.getComputedStyle(document.querySelector('p#b'), ':after').getPropertyValue('content')";
JavascriptExecutor js = (JavascriptExecutor) UIKeyWords.getUIDriver();
String contentValue = (String) js.executeScript(script);
System.out.println(contentValue);
Ну что ж... Все, что нужно веб-драйверу - это просто правильный xpath для поиска веб-элемента в домене. И есть много способов исправить правильный Xpath.
Мы также можем использовать токены как
- потомок::
- ребенок::
- предок::
содержит::
Пример: //div[*/text()='Кредитная карта']/ потомок::input[@id='номер карты']
Вы можете обратиться к этому сайту для получения дополнительной информации о том, как использовать их в xpath.