2016-10-22 5 views
0

クラスまたはIDを持たないネストされたdivで特定のテキストを見つける必要がある。Selenium:xpathを使用して特定のプレーンテキストでネストされたdivを見つけよう。

これはhtmlの構造です。

<div class="active_row"> 
    <div class="outcomes"> 
    <div class="event_outcome" onclick="doSomething"> 
    <div>Target Text</div> 
    </div> 
    </div> 
</div> 

hereの例を使用して直接テキストにアクセスしようとしました。

driver.find_elements_by_xpath("//div[contains(., 'Target Text')]") 

これは、ターゲットテキストを含む要素のリストを返しますが、クリックメソッドを実行すると何も起こりません。

テキストを検索してevent_outcomeクラスのdivをクリックするようにこのクエリを設定する最も良い方法は何ですか?

//div[contains(., 'Target Text') and @class='event_outcome'] 

またはonclick属性の有無を確認するための述語を追加します:event_outcomeクラスでdiv要素を選択するには

答えて

2

、あなたはクラス属性値をチェックするために、あなたのXPathに述語を追加することができます

//div[contains(., 'Target Text') and @onclick] 
+0

ありがとう!!!私は2つの述語を組み合わせ、 '.text'を使って確認するために結果を出力しました。今すぐクリック!ありがとうございました! –

1

このクエリを設定してテキストを見つけて、event_outcomeクラスでdivをクリックすると最適な方法は何ですか?

element = driver.find_element_by_xpath(".//div[contains(., 'Target Text') and @class='event_outcome']") 
print(element.text) 
element.click() 

それとも、また、内部テキストの完全一致と同じを得ることができます - :あなたはxpathの下に以下のように、すべてのニーズをfullfilうテキストTarget Textでいるでしょう戻っ<div class="event_outcome" onclick="doSomething">を使用してみてください

xパスの機能をnormalize-space()とすると、以下のようになります。 -

element = driver.find_element_by_xpath(".//div[normalize-space()='Target Text' and @class='event_outcome']") 
print(element.text) 
element.click() 
+1

Lol ...ありがとう!あなたの答えを見る前に同じことをやっただけです。正規化を追加するだけで余分な作業が節約されました。 –

関連する問題