Selenium Java, как получить второй текст, заключенный в двойные кавычки?

#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. О. Спасибо. Я буду изучать это.