2013-08-06 50 views
29

是否有蟒蛇+硒任何方法來查找父元素,兄弟元素或子元素就像如何通過python webdriver查找父元素?

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

如何我得到的輸入元素的父母,然後,最後,拿到選項選擇

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

回答

49

您可以通過使用..的XPath找到父元素只要當且僅當該行也具有名稱爲「A」的輸入元素時,您只需要表格行中的選定選項,而不管此元素所在的html-tree中的哪個位置讓行元素消失。

您可以通過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

只是爲了增加細節:'../'語法不起作用,'./ ..'和'./../ ..'按預期工作。不要添加尾部斜線。 –

-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

一種可能的方式來導航到同一層次結構下元件是使用在/../如下圖所示的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"]同一層級下。
相關問題