2012-03-20 12 views
4

WebDriver/Selenium2の特定の要素を要素内のテキストのみで取得するには、どのような方法が良いでしょうか?WebDriverでテキストを含む特定の要素を取得する

<div class="page"> 
    <ul id="list"> 
    <li>Apple</li> 
    <li>Orange</li> 
    <li>Banana</li> 
    <li>Grape</li> 
    </ul> 
</div> 

基本的に、私は特定の要素を取得するために、このような何かを書きたいのですが:

@driver.find_element(:id, "list").find_element(:text, "Orange") 

これは、リンク内のテキストを見つけたとき、私はセレクタを使用する方法と非常によく似ています(つまり、 :link_textまたは:partial_link_text)ですが、通常の非リンク要素内のテキストで要素を検索したいと考えています。

提案がありますか?あなたはこの問題にどのように対処していますか? (あなたが疑問に思っている場合は、私はRubyを使用しています)

答えて

3

数年遅れて、私はそれを見つけることができるこの質問をので、他のそれに答えるつもりだった...

私が取得するためにCSSセレクタを使用

@driver.find_elements(css: '#list > li').select {|el| el.text == 'Orange'}.first 

あなたはその後、.clickまたは.send_keys :returnオプションを選択することができます:すべてのli要素とは、テキストに基づいて配列を濾過しました。

6

xPathでこれを行うことができます。あなたの例のために、このような何か:

@driver.find_element(:id, "list").find_element(:xpath, './/*[contains(., "Orange")]') 
+0

ありがとうございました。 xpathを使用しない方が良いでしょうが、依然として素晴らしい応答に感謝します! – bbbco

+0

'find_element'を連鎖させることができないのを知りませんでした。最初の要素の子要素だけを検索すると仮定しています。 ;) – erroric

+1

ええ、ドライバでfind_elementを呼び出すのはルートから始まり、要素上でそれを呼び出すときはその要素から始まります。私はXPathがそれをオーバーライドすることができると考えています(つまり、 '。'がXPathの先頭にない場合は、//によって指示されるようにドキュメントルートから開始するかもしれませんが)今。 –

関連する問題