div中所有// a [@href]标记的XPath,其中第一个/ li标记文本为“ Something”

时间:2019-12-10 00:44:46

标签: html xml selenium xpath testng

我必须从页面中按类别查找所有URL。类别是<li>标记中的第一个<div>标记。该页面如下所示。

    <div class="c1">
        <ui>
            <li class="d1"> someText </li>
            <div>
                <li> <a href="some url1"> 
            </div>
            <div>
                <li> <a href="some url2"> 
            </div>
            <div>
                 <li> <a href="some url3"> 
            </div>
        </ui>
    </div>

如何找到与“ someText” hrefs标记相对应的所有li

4 个答案:

答案 0 :(得分:2)

您可以使用xpath following-sibling轴。

//div/ui/li[contains(text(), 'someText')]/following-sibling::div/li/a/@href

答案 1 :(得分:2)

您可以首先通过“ someText”文本找到li元素,然后侧身获得following sibling div元素:

//li[contains(., "someText")]/following-sibling::div/li/a 

或者,用normalize-space()

//li[normalize-space(.) = "someText"]/following-sibling::div/li/a  

(不包括您正在使用的@href中的selenium部分-您需要查找与XPath表达式匹配的元素,并使用{{1}获得href属性})

答案 2 :(得分:2)

  

如何找到与“ someText” hrefs标记相对应的所有li

基于内容的选择

请参阅@alecxe's fine answer(+1),但标题和问题的这一部分,

  

我必须从页面中按类别查找所有URL。类别是<li>标记中的第一个<div>标记。

似乎更关注第一位置而不是内容...

基于位置的选择

此XPath,

(//div[@class="c1"]//li[1]/following::a)[1]

选择所关注的a元素的第一个li元素后代中的第一个div元素。

答案 3 :(得分:0)

尝试以下XPath-1.0表达式:

//div[@class='c1']/ui[normalize-space(li[@class='d1'])='someText']/div/li/a/@href

其输出为

some url1
some url2
some url3