当前位置: 首页 > 知识库问答 >
问题:

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

丁豪
2023-03-14

我正在寻求有关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”

到目前为止,我得到的是:

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

有人能帮我指一下正确的方向吗?我不是在寻找包含这个文本的元素,而是它的父元素,这样我就可以提取它的data-row-num。

或者,如果我可以找到包含“Appleseed,Jonny”的div元素,那么我如何才能找到它的父元素(在本例中,它不是直接父元素,而是向上两个元素)?

共有2个答案

翟英达
2023-03-14

尝试

//*[contains(text(), "Appleseed, Jonny")]/parent::div[contains(@class,"ui-grid-row ng-scope")].

基本上父::*有助于获取父元素

顾宏朗
2023-03-14

给定提供的超文本标记语言,此XPath应该可以工作

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

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

我更喜欢尽可能具体,例如使用标签名而不是*等等。

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

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

因为我假设您将多次使用此XPath,所以我会将其放入函数中,并将所需文本作为字符串传递,例如“Appleseed,Jonny”,然后将其构建到XPath中。

 类似资料:
  • 问题内容: 如果我搜索单个字符串,则效果很好: 但是我可以在下面的示例中有一个 or 语句吗? 问题答案: 在两个函数调用之间说 或使用函数使xpath不区分大小写

  • 我一直在为selenium Xpath定位器使用Contains函数。到目前为止,这个功能一直有效。它目前不适用于表中的TD元素。我正在向函数发送正确的文本,所以我不明白为什么。 在Chrome上,转到此处:https://rcpsc.releasecandidate-community360qa.net/login.aspx?action=enablelogin 登录:mj4/test 向下滚动

  • 该页面包含一个多选下拉列表(类似于下面的一个) html代码如下所示: 在firefox开发工具中进行测试后,我终于能够找出获取某个标签的文本所需的xPath。。。 下面的XPath语句将返回文本“Phone” 标签元素中包含多个文本项(尽管在查看UI时似乎只有一个文本对象)。每个标签元素中实际上有两个文本元素。第一个总是空的,第二个包含实际的文本(如下图所示,当通过火狐开发者工具的控制台窗口观察

  • 问题内容: 有没有一种方法可以检查元素中是否有文本?我已经找到了,但是此函数检查指定的值,如果失败,则不会返回正确的错误。 我通过API填充元素,然后稍后将其加载,因此我希望浏览器等到元素中出现任何信息后再检查值是否正确。 另外,在EC发生故障时设法获得特定的错误消息也非常有帮助: 问题答案: 第三个参数是自定义错误消息: 要等待元素包含任何文本,可以编写 自定义期望条件 : 这是用法:

  • 我正在使用selenium在html页面上执行测试。我只能使用xpath来定位元素。我试图创建一个xpath,它允许我定位所有包含文本的div,这样我就可以用findElements保留这些WebElement的引用,不管它是什么,只要它不是空的。所以我有了这个xpath: //div[5]/div/div[2]

  • 问题内容: 以下是我的标记 我正在尝试使用该类的元素。 我用来访问转发器的代码是: 有没有一种方法可以通过在jQuery中执行以下操作来获取元素: 有没有办法用量角器做类似的事情? 问题答案: 这应该适合您的示例: