2013-04-06 33 views
2

我有以下列表:如何找到一个列表元素(Selenium)?

<ul> 
<li> item1 is red 
</li> 
<li> item1 is blue 
</li> 
<li> item1 is white 
</li> 
</ul> 

我尝试以下打印第一项:

String item = driver.findElement(By.xpath("//ul//li[0]")).getText(); 
     System.out.println(item); 

但是,我得到:NoSuchElementException异常...... 我可以用一个cssSelector但我没有该标识的ul

+0

@fredrik有正确的答案。 – 2013-04-06 23:40:13

回答

7

我认为XPath应该是"//ul/li[1]"。在硒中,第一项是1,而不是0.看看here

+0

+1对于使用C语言进行培训的程序员来说,这是一个常见问题。 XPath从1开始计数,而不是从0开始计数。 – 2013-04-06 23:39:48

2

我知道这不像其他答案那样高效,但我认为它会给你结果。

WebElement element = (WebElement) ((JavascriptExecutor)driver).executeScript("return $('li').first()"); 

String item = element.getText() 
+1

不会对此产生负面影响,因为它可以工作,但是您正在玩一个危险的游戏:假设jQuery已加载。 jQuery不是一个标准。 – Arran 2013-04-07 10:47:12

+0

我同意你的意见。 – IndoKnight 2013-04-07 10:52:37

2
(//ul/li)[1] 

这将选择的XML文档li元素是ul元件的子在第一。

请注意,表达

//ul/li[1] 

选择任何li元素是其ul父母的第一个孩子。因此这个表达通常可以选择多于一个的元素。

1

这里是你如何做到这一点:

List<WebElement> items = driver.findElements(By.cssSelector("ul li")); 
if (items.size() > 0) { 
    for (WebElement we: items) { 
    System.out.println(we.getText()); 
    } 
} 
相关问题