首页 > 解决方案 > 如何为最近的祖先提供 XPath?

问题描述

免责声明:我知道这个问题非常类似于XPath 来查找包含具有特定值属性的元素的最近祖先元素。不幸的是,我不太明白如何选择最近/最近的祖先?

这是我的场景。我正在为显示多个数据“表”的网页构建自动化测试。每个“表”都需要通过其<label>内容而不是id“表”上的正常属性来识别(这种id情况不存在)。

这张图片说明了我正在使用的结构(来自 chrome 浏览器窗口的快照): 在此处输入图像描述

这是相应伪 html 的要点:

<root>
    ... 
    <div class="gridBox">  <!-- 1 -->
        <div class="gridBox"> <!-- 2 -->
        
            <div class="gridBox"> ... </div>
            
            <div class="gridBox">
                <label>In Progress and Rejected</label>  <!-- I want to start here -->
            </div>
            
            <div class="gridBox">
                <div class="gridBox">

                    <div class="table"> <!-- I want to identify this element -->
                        <div class="row">
                            <div class="header">
                                <div class="column">...</div>
                            </div>
                            ...
                        </div>                      
                        <div class="row">
                            <div class="cell">Value 1</div>
                            <div class="cell">Value 2</div>
                            ...
                        </div>
                    
                    </div>
                </div>
            </div>
        </div>
        <div class="gridBox">
        
            ...
            
            <div class="gridBox">
                <label>Await approval</label>
            </div>
            
            ...
    
        </div>
        <div class="gridBox">
        
            ...
            
            <div class="gridBox">
                <label>Approved</label>
            </div>
            
            ...
    
        </div>
    </div>
    
    ...
<root>

方法
我想<label>In Progress and Rejected</label>成为起点。接下来我要做的就是爬上这个祖先节点:<div class="gridBox"> <!-- 2 -->. 最后,我想找到包含的后代子节点<div class="table">。一个简单的任务?

问题
如何识别<div class="gridBox"> <!-- 2 -->//label[contains(.,"In Progress and Rejected") ]/ancestor::div

标签: htmlxmlxpathxpath-1.0

解决方案


我会使用following::轴而不是ancestor::轴。

这个 XPath,

//label[normalize-space()="In Progress and Rejected"]
 /following::div[@class="table"][1]

选择其空间标准化字符串值等于目标文本的<div class="table">之后的第一个元素。label

另请参见XPath 轴中子、跟随和后代之间的区别


推荐阅读