2012-05-29 79 views
0

如何仅选择父跨度webelement而不是子项?使用xpath在WebDriver中选择元素

列表摘要链接= summary.findElements(By.xpath(“”));

我的HTML代码:

<li> 
<div class="mod-indent mod-indent-2"> 
<a href="http://mysite.com"> 
<img class="activityicon" alt="URL" src="http://mysite.com"> 
<span class="instancename">LinkText <span class="accesshide "> URL</span></span> 
</a> 
</div> 
</li> 

我试过以下的XPath,但没有奏效
.//div[@class='mod-indent MOD缩进-2' ]/A/SPAN [@类= '实例名']

.//div[@class='mod-indent MOD-缩进-2' ] /一个/跨度[1]

.//div[@class= 'mod-indent mod-indent-2']/a/span /。

.//div[@class='mod-indent MOD-缩进-2' ] /一个/跨度[位置()= 1]

.//div[@class='mod-indent MOD-缩进-2' ] /一个/跨度/跨度[位置()= 1]

回答

5

多种方式,但只是几个:

By.XPath("//div[contains(@class, 'mod-indent-2')]/descendant::span[@class='instancename']"); 

By.XPath("//span[@class='instancename']"); 

By.XPath("//span[@class='accesshide ']/.."); 

By.ClassName("instancename"); 

By.CssSelector("span.instancename"); 

By.XPath("//span[text()='Link Text']"); 
+0

我一直在尝试从嵌套的span元素中获取链接文本,以便我可以迭代并单击这些链接。但是,使用getText() 将从两个跨度中插入新行的文本。我似乎没有 以获得它为什么它通过CSS隐藏子元素 时打印奇怪的结果。 – StatusQuo

0

webdriver的代码:

List <WebElement> summaryLinks = 
summary.findElements(By.cssSelector("span.instancename")); 
List <String> links = new ArrayList <String>(); 
for (int i=0; i<summaryLinks.size(); i++){ 
     WebElement element =summaryLinks.get(i); 
     if (element.isDisplayed() && element.isEnabled()){ 
     String str = element.getText(); 
     links.add(str);}} 
System.out.println(links); 

结果在以下输出中:

[Announcements 
Forum, Student Lounge 
Forum, Welcome 
Page, Instructor Bio 
URL, Course Schedule 
Page] 

现在,当我返回links.size()它返回 元件的正确数目(即仅包括父跨度)。

我不确定这是否只是一个打印退货问题。在将getText()的回报添加到链接 之前,我尝试了 trim(),toString(),但其结果是相同的。

+0

使用“\ n”和返回的子字符串排除该行的新行的找到的索引,它工作正常 – StatusQuo