0

我使用 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: Unable to locate an element with the xpath expression //a[matches(@href, "site.ru/[0-9] /")]

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

4

1 回答 1

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]*')]

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

于 2013-10-05T13:47:26.457 回答