#java #selenium
Вопрос:
Я получил эту веб-страницу, чтобы проверить, содержит ли этот элемент определенное ключевое слово.
<div>
"amp;nbsp;"
"Network interface updated successfully"
</div>
Это HTML-код, и xpath, который я пытаюсь получить, это
//div[contains(text(),'interface')]
Но этот xpath вообще не находит этот элемент. Поэтому я попробовал другой способ выяснить, как это работает.
//div/text()[2]
Этот xpath соответствует элементу, но для меня это не лучшая практика.
Комментарии:
1. когда вы пробуете xpath, сколько элементов вы получаете ?
Ответ №1:
Я нашел здесь что-то похожее на ваш пример
теперь, если вы хотите, чтобы весь текст был заключен в этот элемент, и вы не хотите индексировать его с помощью сценариев, вы можете сделать это с помощью исполнителя java script
запустите приведенную ниже инструкцию с помощью java script executor, и она вернет весь текст, как только вы получите текст, который вы можете утверждать, содержит ли он ожидаемый текст.
‘вернуть $x(«//div[@class=’jconfirm-content’]//div//div»)[0].Текстовый контент’
Комментарии:
1. Если текст состоит из одной строки, он соответствует xpath, но веб-приложение, на которое я смотрю, состоит из двух строк. Это выглядит как массив. Вот почему он соответствует xpath //div/text()[2]
2. Я добавил скриншот GIF, чтобы вы могли видеть, о чем я говорю.
3. я обновил свой ответ аналогичным примером, как и ваш, вы можете посмотреть и посмотреть, работает ли он для вас
Ответ №2:
если вы так уверены, что во 2-м элементе есть текст. пожалуйста, используйте следующий код.
List<WebElement> rows = driver.findElements(By.xpath("your xpath"));
String secondTxt = rows.get(1).getText();
индекс элемента начинается с 0, поэтому ниже приведены соответствующие
0-й элемент содержит 1-й текст
1-й элемент содержит 2-й текст
если текстовый индекс меняется в каждой среде выполнения, вы не должны получать текст на основе индекса. вы должны повторить каждый элемент и получить текст.
Комментарии:
1. Ну, причина, по которой я хочу получить элемент xpath, заключается в том, что я буду использовать этот xpath в качестве локатора. Так что это должен быть действительный xpath для .. пока(Ожидаемые условия.visibilityOfElementLocated(По.xpath ( ?????) );
2. вы не можете напрямую получить 2-й текст, так как он содержит тот же текст и двойные кавычки, поэтому вы должны получить через count. не могли бы вы, пожалуйста, попробовать это >>>>>>>>>> Список>>>><WebElement> строки = driver.findElements(По.xpath(«Сетевой интерфейс успешно обновлен»)); Строка secondTxt = строки.get(1).getText();
Ответ №3:
Это не обычный текст, а текстовый узел. Если вы примените /text()
селен, возникнет ошибка, потому что он не поддерживается Селеном, пожалуйста, используйте JavascriptExecutor
Код :
WebElement e = driver.findElement(By.xpath("//span[contains(@class, 'jconfirm-content')]//child::div[1]"));
String el = (String)((JavascriptExecutor)driver).executeScript("return arguments[0].childNodes[1].textContent;", e);
System.out.println(el);
Комментарии:
1. О. Спасибо. Я буду изучать это.