select_by_value - ¿Cómo encontrar elementos padre por python webdriver?
selenium xpath (3)
De su ejemplo, supongo que solo desea la opción seleccionada dentro de una tabla de la fila si y solo si esta fila también tiene un elemento de entrada con el nombre "A", sin importar en qué parte del árbol html este elemento reside debajo del elemento fila .
Puede lograr esto a través del eje ancestro xpath.
En aras de una mejor legibilidad, mostraré cómo hacer esto paso a paso (pero en realidad puedes 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'']");
¿Hay algún método para python + selenium para encontrar elementos parentales, elementos hermanos o elementos secundarios como
driver.find_element_parent?
o
driver.find_element_next?
o
driver.find_element_previous
?
p.ej:
<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>
Lo he intentado a continuación, pero falla:
input_el=driver.find_element_by_name(''A'')
td_p_input=find_element_by_xpath(''ancestor::input'')
¿Cómo puedo obtener el padre del elemento de entrada y, finalmente, obtener la opción seleccionada ?
Puede encontrar un elemento primario utilizando ..
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, así:
selected_option = driver.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í lo hará:
- Primero navegue a
android.widget.TextView[@text = "Current element text"]
- Luego volverá al elemento principal, es decir,
android.widget.RelativeLayout
y seleccionará el siguienteandroid.widget.TextView[@text="Next element text"]
bajo la misma jerarquía.