web-dev-qa-db-ja.com

python webdriverで親要素を見つける方法は?

Python + Seleniumが親要素、兄弟要素、または子要素を見つけるためのメソッドはありますか

driver.find_element_parent?または
driver.find_element_next?または
driver.find_element_previous

例えば:

<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')

どうすれば入力要素の親を取得します、そして最後に選択したオプションを取得します

43
Stella

.. xpathを使用して親要素を見つけることができます。

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

次のように、選択されたオプションを取得するために個別のxpathを作成するのはどうですか。

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

あなたの例から、この行が「A」という名前の入力要素を持っている場合にのみ、テーブル行内で選択されたオプションが必要であることがわかります。 。

これは、xpath祖先軸を介して実現できます。

読みやすくするために、この手順をステップごとに行う方法を示します(ただし、実際にはすべてを1つのxpath-expressionに入れることができます)。

// 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']");
8
drkthng

同じ階層下の要素に移動する方法の1つは、/../以下に示すxpathで:

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"]')

ここで:

  1. 最初にAndroid.widget.TextView[@text = "Current element text"]
  2. 次に、親要素、つまりAndroid.widget.RelativeLayoutと次のAndroid.widget.TextView[@text="Next element text"]同じ階層の下。
0
Parth Naik