当前位置: 首页 > 面试题库 >

Selenium和xPath-通过包含文本来定位链接

卢承弼
2023-03-14
问题内容

我正在尝试使用xPath查找包含一段文本的元素,但我无法使其正常工作…。

WebElement searchItemByText = driver.findElement(By.xpath("//*[@id='popover-search']/div/div/ul/li[1]/a/span[contains(text()='Some text')]"));

如果删除带有“
contains”内容的最后一位,它将找到我的span元素,但是我需要根据文本内容进行选择。它也不是“某些文本”的完美匹配,因为它也可能包含截断的字符串。

有人看到这个问题吗?


问题答案:

我认为问题出在这里:

[contains(text()='Some text')]

为了解决这个问题,

  1. []是,在该节点集中每个节点上运行的条件-在你的情况下,每个跨度节点。如果它操作的任何单个节点都匹配括号内的条件,则它匹配。
  2. text() 是一个与上下文节点的子节点的所有文本节点匹配的选择器,它返回一个节点集。
  3. contains是对字符串进行运算的函数。如果将其传递给节点集,则通过返回节点集中按文档顺序首先出现的节点的字符串值,将该节点集转换为字符串。

您应该尝试将其更改为

[text()[contains(.,'Some text')]]

  1. 外部[]条件是在该节点集中的每个单独节点上运行的条件,text()是一个选择器,它与作为上下文节点的子级的所有文本节点匹配-它返回一个节点集。

  2. 内部[]条件是在该节点集中的每个节点上运行的条件。

  3. contains是对字符串进行运算的函数。在这里传递了一个单独的文本节点(.)。



 类似资料:
  • 这就是HTML代码。到目前为止,我已经进行了以下xpath查询: 这让我找到了

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

  • 你知道为什么吗?

  • 我正在尝试根据其文本内容选择一个元素。我正在使用XPath来实现这一点。 我只是感到困惑,这应该有效吗? 我甚至会复制HTML代码: div元素内部有“通知”字样。那么为什么它不起作用。 转到Facebook上的此页面:https://www.facebook.com/settings 使用此chrome扩展通过xPath突出显示任何区域。

  • 我试图通过selenium单击save按钮,但是,我得到的错误是它无法定位元素。 这是网站的html部分 这是我得到的错误: NoSuchelementException:没有这样的元素:找不到元素:{“method”:“id”,“selector”:“divflashviewermain_savepdfbuttonicon”} (会话信息:chrome=74.0.3729.169)(驱动程序信息

  • 我有一个大的超文本标记语言电子邮件表,我正在尝试查找特定电子邮件的名称,然后在此元素中选择一个按钮。我可以通过XPATH轻松找到表体: 那么在这个表中有多行(tr),是否可以在所有表行中搜索文本? 我得到的最接近的结果是: 不幸的是,这无法定位元素。 我知道我可以简单地复制XPATH以定位特定的tr,但是出于自动化目的,我尝试传递一个字符串,然后在所有tr中搜索我的特定文本。