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

问题描述

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

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

此图像说明了我正在使用的结构(来自chrome浏览器窗口的快照):

enter image description here

这是相应伪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]

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

另请参阅Difference between child,following and descendant in XPath axes

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...