last()未应用

时间:2016-02-05 21:41:09

标签: 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,为什么?

1 个答案:

答案 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),将返回所有

另请参阅: XSLT getting last element