如何为最近的祖先提供 XPath?

How to provide an XPath for nearest ancestor?

免责声明:我知道这个问题与 XPath to find nearest ancestor element that contains an element that has an attribute with a certain value 非常相似。不幸的是,我不太明白如何 select closest/nearest 祖先?

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

这张图片说明了我正在使用的结构(来自 chrome 浏览器 window 的快照):

这是相应伪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开始?

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

这个 XPath,

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

选择 label 之后的第一个 <div class="table"> 元素,其 space-normalized 字符串值等于目标文本。

另见 Difference between child, following and descendant in XPath axes