Как получить текст только из родительского узла в массиве - PullRequest
0 голосов
/ 05 октября 2018

Я хочу получить текст, связанный с xpath "// p [@ class = 'list-group-item']".

Ниже приведен фрагмент HTML:

<div _ngcontent-c3="" class="list-group bg-trans mar-no">
  <p _ngcontent-c3="" class="list-group-item" style="border-bottom: 1px dotted #ddd;">
    <span _ngcontent-c3="" class="badge badge-pink" id="stat_2" style="background-color: rgb(225, 124, 167);">0</span>
    In Action
  </p>
  <p _ngcontent-c3="" class="list-group-item" style="border-bottom: 1px dotted #ddd;">
    <span _ngcontent-c3="" class="badge badge-purple" id="stat_3" style="background-color: rgb(152, 98, 145);">5</span>
    Completed
  </p>
  <p _ngcontent-c3="" class="list-group-item" style="border-bottom: 1px dotted #ddd;">
    <span _ngcontent-c3="" class="badge badge-dark" id="stat_4" style="background-color: rgb(59, 65, 70);">0</span>
    Closed
  </p>
  <p _ngcontent-c3="" class="list-group-item" style="border-bottom: 1px dotted #ddd;">
    <span _ngcontent-c3="" class="badge badge-defadivt" id="stat_8" style="background-color: rgb(227, 232, 238);">0</span>
    Long Term Solution
  </p>
  <p _ngcontent-c3="" class="list-group-item" style="border-bottom: 1px dotted #ddd;font-weight:bold">
    <span _ngcontent-c3="" class="badge badge-defadivt" id="stat_8">5</span>
    Total
  </p>
</div>

В результате я хочу "В действии", "Завершено", "Закрыто", Всего ".

Ниже приведенокод, который я написал до сих пор.

List<WebElement> lst= driver.findElements(By.xpath("//p[@class='list-group-item']"));
List<String> strgs = new ArrayList<String>();

for(WebElement e1 : lst){
    strgs.add(e1.getText());
}
System.out.println(strgs);

Вывод, который я получил:

[
  0 In Action, 
  5 Completed,
  0 Closed, 
  0 Long Term Solution, 
  5 Total
]

1 Ответ

0 голосов
/ 06 октября 2018

Если вы хотите заполнить значения в текстовом узле, то Selenium не поддерживает его.Например, ваш локатор будет //p[@class='list-group-item']/text()[2], чтобы найти только текст тега <p>, исключая <span>

Альтернативный способ - использовать код ниже JavascriptExecutor для выполнения задачи:

List<WebElement> lst= driver.findElements(By.xpath("//p[@class='list-group-item']"));
List<String> strgs = new ArrayList<String>();

for (WebElement element : lst) {

    JavascriptExecutor js = (JavascriptExecutor) driver;
    String sourceName = (String) js.executeScript("return arguments[0].childNodes[2].textContent", element);
    strgs.add(sourceName.trim());
}

System.out.println(strgs);

Здесь return arguments[0].childNodes[2].textContent - это код javascript, который возвращает второй текстовый узел <p>, который является ожидаемым текстом, который вам нужен.

...