java - 未应用last()

标签 java selenium xpath selenium-webdriver

我正在使用 Selenium 和 Java 编写测试,下面是我的 DOM:

<body>    
<div class='t'><span>1</span></div> 
<div class='t'></div> 
<div class='t'><span>2</span></div> 
<div class='t'><span>3</span></div> 
<div class='t'><span>4</span></div> 
<div class='t'><span>5</span></div> 
<div class='t'><span>6</span></div> 
<div class='t'><span>7</span></div> 
<div class='tt'></div> 
</body>

当我使用: //div[@class='t'][last()] 我得到:

<div class="t"><span>7</span></div>

但是当我使用: //div[@class='t' and last()] 我得到:

<div class="t"><span>1</span></div>
<div class="t"/>
<div class="t"><span>2</span></div>
<div class="t"><span>3</span></div>
<div class="t"><span>4</span></div>
<div class="t"><span>5</span></div>
<div class="t"><span>6</span></div>
<div class="t"><span>7</span></div>

就像 last() 没有应用于第二个 xpath,为什么?

最佳答案

//div[@class='t'][last()] ... 表示从匹配列表中选择元素(其中 @class='t') 的索引是最后一个,这就是你想要的。

使用 //div[@class='t' and last()],已经计算出的 last() 值将应用于列表纯粹基于 != 0,并且仅当 last() 为零时,才会导致 div 匹配器返回 FALSE。换句话说,last()用于从列表中选择单个节点。这绝对不是您想要的。

例如:如果 last() 的计算结果为 5,//div[@class='t' and 5] 将返回列表中的每个匹配元素,因为 5 != 0。

最终结果是,如果任何个节点匹配(last() > 0),所有都将被返回。

另请参阅: XSLT getting last element

关于java - 未应用last(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35234034/

相关文章:

java - 如何使用 Selenium 查找页面上是否存在文本

python - 网站上的选项卡是 "Not Clickable"使用 Selenium 和/Python

java - 如何在 Java 中使用 xpath 从特定属性中选择所有属性值

Python 的 filter() 的 Java 模拟?

java - 在java线程中,如何调用notify来进行特定的notify工作?

javascript - 如何在 JMeter 的 Webdriver Sampler 中获取警报消息?

php - 使用 DOMDocument PHP 获取 Xpath 父节点?

xml - 使用 Xpath 进行 XSLT 处理的说明

java - 无法使用 Xpath 找到元素

java - 具有多个条件的 Spring JPA 自定义存储库