【问题标题】:Confirm text is displayed in webpage with Selenium WebDriver使用 Selenium WebDriver 确认网页中显示的文本
【发布时间】:2013-07-22 15:13:19
【问题描述】:

如何确认文本“请找我”显示在使用 Java 的网页上?请参考下面的HTML代码:

<table width="600" border="0" cellspacing="5" cellpadding="0">
  <tr><td class="fontlargebold" align="center">&nbsp;FIND ME PLEASE&nbsp;</td></tr>
</table>

困难在于 HTML 代码没有 ID、名称、值等属性。我尝试使用 xpath (By.xpath("//*[text()=[contains('FIND ME PLEASE')]]")) 但我认为它不正确...

【问题讨论】:

  • 您没有正确使用contains-函数。 contains 需要两个参数,第一个是要搜索的内容,第二个是搜索字符串。有关示例,请参阅W3C Specifications for contains()

标签: java xpath selenium webdriver selenium-webdriver


【解决方案1】:

您的 XPath 确实是错误的。

使用

By.xpath("//*[contains(text(), 'FIND ME PLEASE')]")

完成工作的方法的完整 Java 代码:

public boolean isTextPresent(String text) {
    List<WebElement> foundElements = driver.findElements(By.xpath("//*[contains(text(), '" + text + "')]"));
    return foundElements.size() > 0;
}

【讨论】:

  • 成功了!我非常感谢快速响应。出于好奇,为什么路径必须是 (..., '"+ text + "'),而不是 (..., text)?谢谢。
  • @user2607278 因为在"//*[contains(text(), text)]"中,text不是变量名,而是字符串。我在那里的 Tha 构造将 XPath 表达式与 text 变量的内容连接起来。搜索 Java 字符串连接。投票没问题,如果答案有帮助,accept it instead
【解决方案2】:

如果您对此文本是否出现在某处感兴趣,并且还可能包含其他标记,请前往

contains(/html/body, 'FIND ME PLEASE')

找到内容后会返回一个布尔值。

如果您需要返回一个元素而不是布尔值,您也可以这样做:

/html/body[contains(., 'FIND ME PLEASE')]

【讨论】:

  • 虽然这是真的,但在当前上下文 (Selenium WebDriver) 中,没有任何方法可以接受 XPath 表达式并返回布尔值。如果没有变通办法,我们只能请求节点。
  • 不知道,只是稍微改变了查询,而不是背后的概念。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-27
  • 2014-11-10
  • 1970-01-01
  • 1970-01-01
  • 2020-12-25
  • 1970-01-01
  • 2023-03-12
相关资源
最近更新 更多