selenium xpath中的正则表达式

Posted

技术标签:

【中文标题】selenium xpath中的正则表达式【英文标题】:Regular expression in selenium xapth 【发布时间】:2020-08-15 12:32:14 【问题描述】:

我想点击所有具有以下 xpath 属性的 web 元素。

    //body/div[@class='feature-flag sticky-header']/div[@class='global-nav']/nav[@class='main']/ul/li[1]
    //body/div[@class='feature-flag sticky-header']/div[@class='global-nav']/nav[@class='main']/ul/li[2]
    ....
    ...
    ...
    ....
    //body/div[@class='feature-flag sticky-header']/div[@class='global-nav']/nav[@class='main']/ul/li[10]

请告诉我如何在 xapth 中编写正则表达式。下面的代码不起作用。

List<WebElement> elements = driver.findElements(By.xpath("//body/div[@class='feature-flag sticky-header']/div[@class='global-nav']/nav[@class='main']/ul/li.*"));
for(WebElement el:elements)

    el.click();

【问题讨论】:

欢迎来到 Stack Overflow。请参阅***.com/help/mcve 并提供问题的详细说明,以及演示问题和预期输出所需的最少代码。也添加错误输出。 您不需要正则表达式 - 您可以使用已有的 - 只需将 /ul/li.* 更改为 /ul/li。这将在目标&lt;ul&gt; 标记中找到所有&lt;li&gt; 元素。我假设每个 &lt;li&gt; 内部都有一些可点击的内容 - 所以您可能需要深入了解以获取实际的可点击元素。如果这不起作用,那么您将需要提供更多信息 - 正如 Naveen 已经指出的那样。 【参考方案1】:

如果你想选择标签中的所有元素,那么这应该可以:

List<WebElement> elements = driver.findElements(By.xpath("//body/div[@class='feature-flag sticky-header']/div[@class='global-nav']/nav[@class='main']/ul/li"));

但如果不是,并且如果您确定有 10 个元素,您可以这样做:

        List<WebElement> list =new ArrayList<>();
    for(int a=0; a<10; a++)
        list.add(driver.findElement(By.xpath("//body/div[@class='feature-flag sticky-header']/div[@class='global-nav']/nav[@class='main']/ul/li['"+a+"']")));
    

【讨论】:

以上是关于selenium xpath中的正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

如何通过移动 xpath 与 Appium 匹配 @text 属性和正则表达式(正则表达式)来查找元素?

使用 XPath 和正则表达式提取 HTML 注释中的文本

jmeter关联-正则表达和xpath

用正则表达式完成xpath的功能(强大的正则表达式)

正则表达式反对 XPath 之后的标记?

软件测试中正则表达式的应用