2013-08-06 5 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') 

어떻게 내가 입력 요소의 부모를 얻을 수 있습니다 다음, 마지막으로, 이 옵션을 얻을을 선택하셨습니까? 귀하의 예 I에서

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

답변

49

당신은 .. XPath를 사용하여 부모 요소를 찾을 수 있습니다 이 행에 이름이 "A"인 입력 요소가있는 경우에만 테이블 행 내에서 선택된 옵션 만 필요하다는 것을 알 수 있습니다.이 요소가 html 트리의 어디에 있든 관계없이 b row-element를 입력하십시오.

xpath ancestor-axis를 통해이를 수행 할 수 있습니다.

// 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 개체가 내장 방법이있다 : I 단계로이 단계를 수행하는 (그러나 실제로 하나의 XPath 표현에 모든 것을 넣을 수 있습니다) 방법을 보여줍니다 가독성을 위해서

: 예를 들어 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"]') 

는 것입니다 : android.widget.TextView[@text = "Current element text"]

  • 그런 다음이 동일한 계층 구조에서 다음 android.widget.TextView[@text="Next element text"]android.widget.RelativeLayout 즉 다시 부모 요소로 이동하여됩니다에

    1. 는 첫째로 이동합니다.
  • 관련 문제