2013-08-06 90 views
29

ありますか?python webdriverで親要素を見つける方法は?ただ</p> <p><code>driver.find_element_parent?</code>または<br> <code>driver.find_element_next?</code>または<br> <code>driver.find_element_previous</code>のような親要素、兄弟要素、または子要素を見つけるためのpython +セレンのための任意の方法が

例:

<tr> 
    <td> 
    <select> 
     <option value=0, selected='selected'> </option> 
     <option value=1, > </option> 
     <option value=2,> </option> 
    </select> 
    </td> 
    <td> 'abcd' 
    <input name='A'> </input> 
    <td> 
<tr> 

私は以下のように試みたが、失敗しました:

input_el=driver.find_element_by_name('A') 
td_p_input=find_element_by_xpath('ancestor::input') 

私は入力要素の親を取得し、その後、最終的には、オプションを取得できますかを選択しましたか?あなたの例Iから

selected_option = driver.find_element_by_xpath('//option[@selected="selected"]') 

答えて

49

あなたは.. XPathを使用して、親要素を見つけることができますテーブル行の中で選択されたオプションだけを望むのは、この行にも "A"という名前の入力要素があり、HTMLツリーのどこにこの要素が存在していてもrow-elementを入力します。

これは、xpathの祖先軸を介して実行できます。読みやすくするのために、私はステップによって、この手順を実行する方法を示します(しかし、あなたが実際に一つだけXPath式ですべてを置くことができる)

// first find your "A" named element 
namedInput = driver.find_element_by_name("A"); 

// from there find all ancestors (parents, grandparents,...) that are a table row 'tr' 
rowElement = namedInput.find_element_by_xpath(".//ancestor::tr"); 

// from there find the first "selected" tagged option 
selectedOption = rowElement.find_element_by_xpath(".//option[@selected='selected']"); 
+0

'../'の構文はうまくいきません。 './ ..'と './../ ..'は期待どおりに動作します。後続のスラッシュを追加しないでください。 –

4

:何、このように、オプションを選択し取得するための別のXPathをすることについて

input_el = driver.find_element_by_name('A') 
td_p_input = input_el.find_element_by_xpath('..') 

-1

セレンWebElementオブジェクトは、組み込みの方法があります。例えばself.parent

同じ階層下の要素にナビゲートすることができる方法の
origin_element = driver. find_element_by_class_name("some_class_name") 
parent_element = origin_element.parent 
brother_elements = parent_element.find_elements_by_css_selector("*") 
+0

これは単にWebDriverの全体的な親を指しているようですか? – Tom

0

一つはで/../を使用することですここで

current_element = driver.find_element_by_xpath('//android.view.ViewGroup/android.widget.RelativeLayout/android.widget.TextView[@text="Current element text"]/../android.widget.TextView[@text="Next element text"]') 

それがされます:以下に示すようにXPathの

  1. は、第一に、それはandroid.widget.RelativeLayoutすなわちバック親要素へ移動して、同じ階層の下に次のandroid.widget.TextView[@text="Next element text"]を選択しますandroid.widget.TextView[@text = "Current element text"]
  2. に移動します。
関連する問題