【问题标题】:Selenium WebDriver and regexSelenium WebDriver 和正则表达式
【发布时间】:2013-10-12 08:33:28
【问题描述】:

我使用 Selenium 2.35.0、最新的 Firefox 和 Linux 操作系统。

我无法在我的 java 应用程序中使用正则表达式。

我有这样一行:

Iterator<WebElement> iterator =
driver.findElements(By.xpath("//a[matches(@href, 'site.ru/[0-9]*/')]")).iterator();

发生异常:

org.openqa.selenium.InvalidSelectorException: 给定的选择器 //a[matches(@href, "site.ru/[0-9]/")] 无效或无效 产生一个 WebElement。发生以下错误: InvalidSelectorError:无法使用 xpath 定位元素 表达式 //a[matches(@href, "site.ru/[0-9]/")]

你能帮我调查一下这个故障的原因吗?

【问题讨论】:

  • 也许你需要匹配所有像这样的href文本。*site.ru/[0-9]*/.*
  • @Darka,好主意,但如果正则表达式存在于字符串中的任何位置,XPath matches() 函数已经匹配。

标签: java regex xpath selenium-webdriver


【解决方案1】:

最好查看您的真实输入,或者显示问题的一部分,但也许这会有所帮助。

//a[matches(@href, 'site.ru/[0-9]*/')]

针对这些链接:

<html>
  <div>
    <a href="site.ru//">Link 1</a>
    <a href="site.ru/123/">Link 2</a>
    <a href="http://site.ru/123/">Link 3</a>
    <a href="site.ru/">Link 4</a>
    <a href="site.ru/123">Link 5</a>
    <a href="site.ru/abc/123">Link 6</a>
  </div>
</html>

将匹配链接 1-3 但不匹配 4-6。

如果您也需要匹配 4-6,您可以在正则表达式中删除尾部斜杠:

//a[matches(@href, 'site.ru/[0-9]*')]

如果这过于宽松并且选择了您不想匹配的案例,请在下方评论哪些特定案例必须排除,我们将尝试进行相应调整。

【讨论】:

  • 我只想匹配链接 1-3,但它不起作用(请参阅初始问题描述中的异常)。
  • 鉴于 XPath 是正确的,请考虑输入可能不包含我们认为的内容。建议您发布实际输入。第二个选择是扩展 XPath,看看我们是否可以选择任何不合格的a 作为健全性检查。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-15
  • 2015-12-29
  • 1970-01-01
  • 1970-01-01
  • 2017-01-18
  • 2022-01-27
相关资源
最近更新 更多