2013-08-06 17 views
29

Czy istnieją jakieś sposoby python + selen, aby znaleźć elementy, elementy nadrzędne brat lub elementy podrzędne tylko jakJak znaleźć elementy nadrzędne przez python webdriver?

driver.find_element_parent? lub
driver.find_element_next? lub
driver.find_element_previous?

np

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

Próbowałem jak poniżej, ale nie:

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

Jak uzyskać nadrzędny element wejściowy a potem wreszcie się opcja wybrany?

Odpowiedz

49

można znaleźć elementu nadrzędnego za pomocą .. XPath:

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

co czyni osobny XPath dla uzyskania wybranej opcji tak:

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

Wystarczy dodać: składnia '../' nie działa, './ ..' i './../ ..' działają zgodnie z oczekiwaniami. Nie dodawaj ukośnego ukośnika. –

4

Od swoim przykładzie I rysunek tylko chcesz wybranej opcji w wierszu tabeli wtedy i tylko wtedy, gdy ten wiersz ma również element wejściowy o nazwie "A", bez względu na to, gdzie w drzewie html ten element znajduje się b elow element-row.

Możesz to osiągnąć poprzez oś przodka xpath.

Dla lepszej czytelności pokażę jak to zrobić krok po kroku (ale rzeczywiście można umieścić wszystko w jednym tylko XPath ekspresji):

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

Selen WebElement Obiekt posiada metodę wbudowane: self.parent

na przykład:

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

Wydaje się, że odnosi się to po prostu do ogólnego rodzica WebDriver? – Tom

0

Jednym z możliwych sposobów, aby poruszać się w tych samych elementów hierarchii jest użycie w /../ XPath, jak pokazano poniżej:

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

Tutaj będzie:

  1. Po pierwsze przejdź do android.widget.TextView[@text = "Current element text"]
  2. Wtedy będzie wrócić do elementu nadrzędnego tj android.widget.RelativeLayout i wybrać następną android.widget.TextView[@text="Next element text"] ramach tej samej hierarchii.
Powiązane problemy