xpath根据非空索引获取<ul> list元素

时间:2017-06-22 09:16:23

标签: html css xpath

<ul id="statsArrayRow">
    <li></li>
    <li>19</li>
    <li>44</li>
    <li>48</li>
    <li>35</li>
</ul>

在上面的列表中,第一个元素没有文本内容。我想基于非空索引获取元素。 第一个非空元素是19,第二个是44,依此类推。

以下xpath通过索引2返回19,但我想通过索引2得到44

//ul[@id='statsArrayRow']/li[2])

我试过

//ul[@id='statsArrayRow' and string-length(text()) > 0]/li[2])

它也返回19而不是44。

我们如何忽略索引的非空元素?

1 个答案:

答案 0 :(得分:1)

Xpath获取第二个非空li元素:

(//ul[@id='statsArrayRow']/li[string-length(text()) > 0])[2]

它是如何构建的:

  • //ul[@id='statsArrayRow']/li搜索ul父元素
  • 中的所有li
  • //ul[@id='statsArrayRow']/li[string-length(text()) > 0]获取带有文字的li元素
  • (//ul[@id='statsArrayRow']/li[string-length(text()) > 0])[2]获取第2条,文字添加()[2]部分

对于那些使用webdriver + java的人:

在java中,您可以获取所有元素,只过滤掉空元素

driver.findElements(By.id("statsArrayRow"))
                .stream()
                .filter(e->!e.getText().equals(""))
                .collect(Collectors.toList())
                .get(1);