如何编写下面的正则表达式在Webdriver中使用?

时间:2012-08-07 09:01:50

标签: xpath webdriver

我要求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

3 个答案:

答案 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"/>

<强>解释

正确使用XPath 2.0功能 matches() RegEx

答案 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++;
 }