3

Webdriver が正規表現を使用して xpath を使用する必要があります。さまざまな値を持つ ID のリストがあります。以下のタイプの値の式をどのように記述できますか。

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

上記の xpath 形式の正規表現を webdriver を使用して記述する必要がありますか? 私は以下で試しました

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

私の知る限り、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 に答える