switch_to select_by_value python selenium xpath selenium-webdriver parent-child

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

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