¿Cómo encontrar elementos padre por Python webdriver?

¿Existe algún método para que python + selenium encuentre elementos padre, elementos hermanos o elementos hijos, como

driver.find_element_parent? o
driver.find_element_next? o
driver.find_element_previous ?

p.ej:

             'abcd'     

Lo he intentado a continuación, pero fallará:

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

¿Cómo puedo obtener el elemento primario del elemento de entrada y, finalmente, obtener la opción seleccionada ?

Puedes encontrar un elemento padre usando .. xpath:

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

¿Qué hay de hacer un xpath separado para obtener la opción seleccionada, como esta:

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

A partir de su ejemplo, imagino que solo desea la opción seleccionada dentro de una fila de la tabla si y solo si esta fila también tiene un elemento de entrada con el nombre “A”, no importa en qué lugar del árbol html este elemento se encuentre debajo del elemento fila. .

Usted puede lograr esto a través del eje del antepasado xpath.

En aras de una mejor legibilidad, le mostraré cómo hacerlo paso a paso (pero en realidad puede poner todo en una sola expresión 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']"); 

Una de las formas posibles de navegar al elemento bajo la misma jerarquía es usar /../ en xpath como se muestra a continuación:

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

Aquí será:

  1. En primer lugar, navegue hasta android.widget.TextView[@text = "Current element text"]
  2. Luego volverá al elemento padre, es decir, android.widget.RelativeLayout y seleccionará el siguiente android.widget.TextView[@text="Next element text"] bajo la misma jerarquía.