2017-04-24 24 views
1

私はJavaとSeleniumを使用しています。 HTMLデザイナーは本当に便利なIDを与えていませんでした。私は次のように要素にアクセスする必要があります(これは単純な例である)私は、XPathのためxpathの正規表現

//span[contains(@id, 'gridcolumn') and (contains(@id, 'textInnerEl'))] 

を使用することができますが、これは複雑に得ることができます

<span id="gridcolumn-1040-textInnerEl" 

。複数を避けるために

//span[match(@id, '^gridcolumn-[%d]+-testInnerEl$'] 

をし、含まれています(@id、...)

答えて

0

spanに一致するようにXPath下に使用してみてください:次のようなのXPathで正規表現を使用するにはどのような方法がありますregexによって:

//span[matches(@id, '^gridcolumn-\d+-textInnerEl$')] 
+0

今すぐ試してみてください – Tony

+0

動作しませんでした。私はクロムがそれを許さないかどうか疑問に思います。 – Tony

+1

ああ...はい。 AFAIK 'Selenium'は' matches() 'が' XPath 2.0'から 'matches()'の間だけ 'XPath 1.0'をサポートしています...' 'selenium'タグに注意しませんでした( – Andersson

0

三つの機能starts-with()substring-before()substring-after()はあなたに必要な要素を選択する機会を与えるの組み合わせ:

//span[starts-with(@id, 'gridcolumn') and number(substring-before(substring-after(@id, '-'), '-')) = substring-before(substring-after(@id, '-'), '-') and substring-after(substring-after(@id, '-'), '-') = 'textInnerEl'] 
+0

ありがとうございます。そして、私はちょうど2つのcontains();-)を使うことができました – Tony

+0

'contains()'は* middle *部分が常に* digits *であることをどのように保証できますか? – revo