dom - transitorio - tipos de campos odoo
Encuentre la<opciĆ³n> ACTUALMENTE seleccionada con XPath (4)
¿Cuál es la sintaxis correcta de XPath para verificar si un elemento de option
está actualmente seleccionado, o simplemente para obtener el elemento de option
seleccionado de un elemento de select
, en una página abierta con la que el usuario y JavaScript pueden haber interactuado? ¿Esto es posible incluso con XPath, o no tiene la capacidad de mirar las propiedades DOM?
No puedo encontrar ninguna documentación sobre esto y he intentado (especulativamente):
-
//option[@selected=true]
-
//option[@selected="selected"]
-
//option[@selected]
pero ninguno de estos funciona; simplemente no coinciden con ningún elemento.
(En caso de que importe, he intentado esto tanto usando la función $x
en la consola del desarrollador de Chrome, y usando el método find_elements_by_xpath
en Selenium para Python).
El problema podría ser el "
(comillas dobles).
//select/option[@selected=''selected'']
- Coincidirá con la opción seleccionada, estoy usando esto con éxito.
//select/option[@selected=''selected'' and @value=''specific value'']
- Solo coincidirá con la opción seleccionada si tiene un ''valor específico'', también estoy usando esto.
Si todavía tiene problemas, podría tratarse de un problema completamente diferente, quizás no haya ningún nodo de opción. Espero que esto ayude.
Yo probaría //option[@selected=''true'']
es decir, driver.findElements(By.xpath("//option[@selected=''true'']")).getText();
Creo que podemos usar un conocimiento de la respuesta de @ Mark y dar cuenta de eso. Encontremos un nodo que TIENE el atributo deseado:
tree.xpath(''//select/option[@selected]/text()'')[0].strip()
Respuesta corta: no es posible.
Respuesta más larga: XPath puede ver los atributos de HTML, pero no puede ver las propiedades de DOM. Seleccionar un elemento <option>
en <select>
cambia la propiedad selected
de <option>
a true
, y también cambia la propiedad de value
de su elemento primario <select>
, pero no afecta los atributos de ninguno, por lo que es invisible para XPath.
Para buscar elementos de <option>
que tengan el conjunto de atributos selected
, que a menudo es la forma en que un autor de la página puede determinar qué opción se selecciona inicialmente, puede usar la //option[@selected]
. Pero esto no encuentra la <option>
actualmente seleccionada; los cambios que el usuario realiza en la selección son invisibles para XPath. No hay garantía de que encuentre la opción inicialmente seleccionada, ya que es posible que el autor de la página no haya puesto el atributo selected
en ningún elemento y permita que el navegador seleccione la primera opción de manera predeterminada o haya seleccionado JavaScript la opción inicial a través del propiedad selected
Las otras muchas respuestas aquí que afirman que un selector como //option[@selected]
puede detectar los cambios de selección realizados por el usuario después de cargar la página son simplemente completamente incorrectos.
Por supuesto, si puede usar selectores de CSS en lugar de selectores de XPath, entonces la option:checked
hará el trabajo.