我使用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,为什么?
答案 0 :(得分:3)
//div[@class='t'][last()]
...表示从索引最后的匹配列表中选择元素(其中@class='t'
),这就是你想要的。
使用//div[@class='t' and last()]
,已经计算出的last()
值仅仅基于!= 0应用于列表中的每个匹配,并且它将导致div
匹配器仅当last()
为零时才返回FALSE。换句话说,last()
使用而不是来从列表中选择单个节点。这绝对不是你想要的。
例如:如果last()
评估为5,//div[@class='t' and 5]
将返回列表中的每个匹配元素,因为5!= 0。
最终结果是,如果任何节点匹配(last()
&gt; 0),将返回所有。