首页 文章

量角器/ XPath - 查找包含包含文本的后代的元素

提问于
浏览
0

我正在寻求XPath选择器的一些帮助 . 我已经学习了XPath的基础知识,但我很难将它们组合起来解决这个问题 .

所以我在HTML中有一个包含大约30行的网格,每行(从左到右)都有一个复选框和员工姓名 . 以下是行组成的片段:

<div class="ui-grid-row ng-scope" data-row-num="21"> //Whole row
  <div role="row" ui-grid-row="row" class="ng-isolate-scope">
    <div role="rowheader" id="1746254927-13-urGrid-005-cell"> //This is checkbox
    <div role="gridcell" id="17443224958-13-urGrid-005-cell">
      <div class="ui-grid-cell-contents ng-binding text-left"> Appleseed, Jonny</div>

我的目标是找到:div class =“ui-grid-row ng-scope”data-row-num =“21”>基于其后代包含'Appleseed,Jonny' . 从这里开始,我将使用getAttribute提取data-row-num,然后我可以导航到右边的复选框 .

到目前为止我所拥有的是:

element(by.xpath("//div[@class='ui-grid-row ng-scope') and contains(.//div, 'Appleseed, Jonny')]"));

有人可以帮助我指出正确的方向吗?我不是在寻找包含这个文本的元素,而是它的父元素,所以我可以提取它的data-row-num .

或者如果我能找到包含'Appleseed,Jonny'的div元素,那我怎么能找到它的父元素(在这种情况下它不是直接父元素而是2个元素)?

1 回答

  • 0

    在提供HTML的情况下,此XPath应该可以工作

    //div[@class='ui-grid-row ng-scope'][.//div[contains(.,'Appleseed, Jonny')]]
    

    它正在寻找包含指定类的 DIV[@class='ui-grid-row ng-scope'] ,还有一个包含所需文本 [.//div[contains(.,'Appleseed, Jonny')]] 的子 DIV .

    我更喜欢(合理地)可能具体,例如使用标记名而不是 * 等 .

    由于您提到要查找与该行关联的复选框,因此另一种方法是直接查找相对于包含所需文本的元素的复选框 .

    //div[@role='rowheader'][.//div[contains(.,'Appleseed, Jonny')]]
    

    因为我假设你将多次使用这个XPath,我会将它放入一个函数并传入所需的文本,例如“Appleseed,Jonny”,作为一个字符串并构建到XPath中 .

相关问题