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
。这将在目标<ul>
标记中找到所有<li>
元素。我假设每个 <li>
内部都有一些可点击的内容 - 所以您可能需要深入了解以获取实际的可点击元素。如果这不起作用,那么您将需要提供更多信息 - 正如 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中的正则表达式的主要内容,如果未能解决你的问题,请参考以下文章