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.

Другие вопросы по тегам