3

我需要 webdriver 使用正则表达式来使用 xpath。我有一个具有不同值的 id 列表。如何为以下类型的值编写表达式。

//*[@id="js_1"]   
//*[@id="js_2"]    
//*[@id="js_3"]      
//*[@id="js_4"]   
//*[@id="js_5"]    
//*[@id="js_6"]   

我必须使用 webdriver 为上述 xpath 格式编写正则表达式吗?我已经尝试过以下

Listnames=box.findElements(By.xpath("//div[contains(@id, 'js_*')]"));

但这对我不起作用。我该如何写一个表达式。请帮助我。

谢谢和问候, 湿婆奥莱蒂

4

3 回答 3

5

如果您使用js_*标准正则表达式,它匹配js, js_, js__, js___...

正确的正则表达式是js_\d+

但是,XPath contains 函数不使用正则表达式,因此您可以直接使用js_(尽管它不会检查数字)。

或更好

`//div[starts-with(@id, 'js_')]`
于 2012-08-07T10:14:35.580 回答
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"/>

说明

正确使用 XPath 2.0 函数matches()RegEx

于 2012-08-07T12:49:23.283 回答
-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++;
 }
于 2013-03-28T12:13:28.960 回答