2013-08-06 24 views
29

Có bất kỳ phương pháp cho python + selen để tìm các yếu tố phụ huynh, các yếu tố anh trai, hoặc các yếu tố con giống nhưLàm thế nào để tìm các phần tử cha bởi trình theo dõi web python?

driver.find_element_parent? hoặc
driver.find_element_next? hoặc
driver.find_element_previous?

ví dụ:

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

Tôi đã thử như dưới đây, nhưng thất bại:

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

Làm thế nào có thể tôi nhận được phụ huynh của yếu tố đầu vào và sau đó, cuối cùng, nhận được tùy chọn đã chọn?

Trả lời

49

Bạn có thể tìm thấy một yếu tố phụ huynh bằng cách sử dụng .. xpath:

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

gì về việc xpath riêng cho việc lựa chọn chọn, như thế này:

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

Chỉ cần thêm chi tiết: cú pháp '../' không hoạt động, './ ..' và './../ ..' hoạt động như mong đợi. Không thêm dấu gạch chéo. –

4

Từ ví dụ của bạn tôi bạn chỉ muốn tùy chọn đã chọn trong một hàng của bảng nếu và chỉ khi hàng này cũng có phần tử đầu vào có tên "A", bất kể vị trí trong phần tử html-tree, phần tử này nằm ở đâu elow các yếu tố hàng.

Bạn có thể đạt được điều này thông qua trục tổ tiên xpath.

Vì lợi ích của khả năng đọc tốt hơn tôi sẽ hiển thị như thế nào để thực hiện bước này bước (nhưng bạn thực sự có thể đặt tất cả mọi thứ chỉ trong một 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']"); 
-1

Selenium WebElement Object có một phương pháp dựng sẵn: self.parent

Ví dụ:

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

Điều này dường như chỉ đơn giản là để phụ huynh tổng thể WebDriver? – Tom

0

Một trong những cách có thể để hướng đến yếu tố dưới cùng hệ thống phân cấp là sử dụng /../ trong xpath như hình dưới đây:

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

Ở đây nó sẽ:

  1. Thứ nhất hướng đến android.widget.TextView[@text = "Current element text"]
  2. Sau đó, nó sẽ quay trở lại yếu tố phụ huynh tức là android.widget.RelativeLayout và chọn tiếp theo android.widget.TextView[@text="Next element text"] thuộc hệ thống cấp bậc tương tự.
Các vấn đề liên quan