我要求webdriver使用正则表达式使用xpath。我有一个具有不同值的id列表。如何为以下类型的值编写表达式。
//*[@id="js_1"]
//*[@id="js_2"]
//*[@id="js_3"]
//*[@id="js_4"]
//*[@id="js_5"]
//*[@id="js_6"]
我必须使用webdriver为上面的xpath格式编写regrular表达式? 我试过下面的
Listnames = box.findElements(By.xpath(“// div [contains(@id,'js _ *')]”));
但它对我不起作用。我怎么能写一个表达。请帮助我。
谢谢&问候, Shiva Oleti
答案 0 :(得分:5)
如果您使用js_*
作为标准正则表达式,则匹配js, js_, js__, js___
...
正确的正则表达式为js_\d+
但是,XPath包含的函数不使用正则表达式,因此您可以使用js_
(尽管它不会检查数字)。
或更好
`//div[starts-with(@id, 'js_')]`
答案 1 :(得分:1)
AFAIK,Webdriver支持XQuery(例如使用XQUIB),因此支持完整的XPath 2.0。
使用强>:
//*[matches(@id, '^js_\d+$')]
基于XSLT-2.0的验证:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<xsl:sequence select="//*[matches(@id, '^js_\d+$')]"/>
</xsl:template>
</xsl:stylesheet>
将此转换应用于以下XML文档时:
<t>
<x id="js_1"/>
<y id="a1"/>
<z id="js_2008"/>
</t>
评估上述XPath表达式,并将此评估结果复制到输出中:
<x id="js_1"/>
<z id="js_2008"/>
<强>解释强>:
答案 2 :(得分:-1)
否则,您可以使用循环将元素添加到列表中......
List <WebElement> ls = null;
i=1;
while(i<5)
{
ls.add(we.findElement(By.xpath("html/body/div[1]/div/div[2]/section/nav/div[2]/ul/li["+i+
"]")));
i++;
}