2013-08-06 12 views
29

mi var ebeveyn elemanları, kardeşi elemanları veya alt öğeleri sadecePython webdriver ile ebeveyn öğeleri nasıl bulunur?

driver.find_element_parent? veya
driver.find_element_next? veya
driver.find_element_previous gibi bulmak için piton + selenyum için herhangi yöntemler?

örn:

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

aşağıda gibi denedim ama başarısız:

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

nasıl ben giriş öğesinin üst öğesini alabilir ve daha sonra son olarak, seçeneği olsun seçili? senin Örneğin I Dan

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

cevap

49

Sen .. xpath kullanarak bir üst öğeyi bulabilirsiniz sadece bu satırın bir tablo satırında olmasını istediğinizi ve sadece bu satırın "A" isminde bir giriş elemanına sahip olmasını istiyorsanız, bu öğede html ağacında nerede bulunursa bulunsun satır elemanını seç.

Bunu, xpath acestor ekseni üzerinden gerçekleştirebilirsiniz.

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

Sadece ayrıntı eklemek için: '../' sözdizimi çalışmıyor, './ ..' ve './../ ..' beklendiği gibi çalışır. Sondaki eğik çizgiyi eklemeyin. –

4

: Bu neye, seçeneğini koyulmak için ayrı bir xpath yapma konusunda

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

:

-1

Selenyum WebElement Nesne yerleşik bir yöntem vardır: Ben adım adım yapmak (ama aslında yalnızca bir xpath-ifadesinde her şeyi koyabilirsiniz) nasıl gösterecek daha iyi okunabilirlik uğruna

: Örneğin self.parent

: olası yollardan

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

Bu, sadece genel WebDriver ebeveyne başvurur gibi görünüyor? – Tom

0

biri aynı hiyerarşi altında eleman gitmek için de /../ kullanmaktır aşağıda gösterildiği gibi xpath:

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

o olacak: android.widget.TextView[@text = "Current element text"]

  • Sonra aynı hiyerarşi altında sonraki android.widget.TextView[@text="Next element text"]android.widget.RelativeLayout yani geri ana öğeye gidip seçecektir için

    1. Öncelikle gidin.