使用xpath在WebDriver中选择元素

时间:2012-05-29 21:04:24

标签: xpath webdriver

如何仅选择父跨度webelement而不选择孩子?

列出summaryLinks = 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-indent-2'] / a / span [@ class ='instancename']

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

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

.// div [@ class ='mod-indent mod-indent-2'] / a / span [position()= 1]

.// div [@ class ='mod-indent mod-indent-2'] / a / span / span [position()= 1]

2 个答案:

答案 0 :(得分: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']");

答案 1 :(得分: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()时,它会返回正确的数字 元素(即仅包括父跨度)。

我不确定这是否仅仅是打印返回问题。我试过了 在将trim()的返回值添加到链接之前toString()getText() 但结果是一样的。