【问题标题】:selecting elements in WebDriver using xpath使用 xpath 在 WebDriver 中选择元素
【发布时间】:2012-05-29 21:04:24
【问题描述】:

如何只选择父跨度 web 元素而不选择子元素?

列出 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]

【问题讨论】:

    标签: xpath webdriver


    【解决方案1】:

    多种方式,但只有几种:

    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']");
    

    【讨论】:

    • 我一直在尝试从嵌套的 span 元素中获取链接文本,以便可以迭代并单击这些链接。但是,使用 getText() 从两个跨度返回文本并插入新行。我似乎不明白为什么当通过 CSS 隐藏子元素时它会打印出奇怪的结果。
    【解决方案2】:

    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() 的返回添加到链接之前 但结果是一样的。

    【讨论】:

    • 使用“\n”找到新行的索引并返回不包括该索引的子字符串,它工作正常
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-03
    • 1970-01-01
    • 2015-06-26
    • 1970-01-01
    • 2021-02-23
    • 2011-11-06
    • 2020-08-06
    相关资源
    最近更新 更多