我正在使用 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),所有都将被返回。
关于java - 未应用last(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35234034/