Estoy escribiendo un caso de prueba de Selenium. Y aquí está la expresión xpath que uso para hacer coincidir todos los botones 'Modificar' dentro de una tabla de datos.
//img[@title='Modify']
Mi pregunta es, ¿cómo puedo visitar los conjuntos de nodos coincidentes por índice? He probado con
//img[@title='Modify'][i]
y
//img[@title='Modify' and position() = i]
Pero ninguno de los dos funciona ... También probé con XPath Checker (una extensión de Firefox). Se han encontrado 13 coincidencias en total, entonces no tengo ni idea de cómo voy a seleccionar una de ellas. ¿ O XPath admite la selección específica de nodos que no están bajo el mismo nodo principal?

No hay
ien XPath.O usa números literales:
//img[@title='Modify'][1]O se genera la cadena de expresión de forma dinámica:
'//img[@title='Modify']['+i+']'(pero tenga en cuenta que las expresiones XPath dinámicas no funcionan desde dentro XSLT).Si:
(//img[@title='Modify'])[13]Esto
//img[@title='Modify'][i]significa "cualquiera<img>con un título de 'Modificar' y un elemento secundario llamado<i>".fuente
tds que eran el sexto hijo de atry no tienen contenido vacío://tr/td[6][string-length(text()) > 0]es la abreviatura de
por lo tanto, devuelve el i-ésimo nodo bajo el mismo nodo principal.
Usted quiere
fuente
/descendant::img[@title='Modify'][$index]funcionará bien. También tenga en cuenta esa[i]prueba de predicado para la existencia deiun elemento hijo.No hay
ien xpath no es del todo cierto. Todavía puede usarcount()para encontrar el índice.Considere la siguiente página
La página tiene 2 tablas y 6 columnas cada una con nombres de columna únicos y 6 filas con datos variables. La última fila tiene el
Modifybotón en ambas tablas.Suponiendo que el usuario tiene que seleccionar el cuarto
Modifybotón de la primera tabla según el encabezadoUsa el xpath
//th[.='Heading 4']/ancestor::thead/following-sibling::tbody/tr/td[count(//tr/th[.='Heading 4']/preceding-sibling::th)+1]/buttonEl
count()operador resulta útil en situaciones como estas.Lógica:
Modifybotón usando//th[.='Heading 4']count(//tr/th[.='Heading 4']/preceding-sibling::th)+1Obtenga las filas para el encabezado correspondiente usando
//th[.='Heading 4']/ancestor::thead/following-sibling::tbody/tr/td[count(//tr/th[.='Heading 4']/preceding-sibling::th)+1]Obtenga el
Modifybotón de la lista de nodos extraídos usando//th[.='Heading 4']/ancestor::thead/following-sibling::tbody/tr/td[count(//tr/th[.='Heading 4']/preceding-sibling::th)+1]/buttonfuente
(// * [@ atributo = 'valor']) [índice] para encontrar el objetivo del elemento mientras encuentra múltiples coincidencias en él
fuente
Aquí está la solución para la variable de índice
Digamos que ha encontrado 5 elementos con el mismo localizador y le gustaría realizar una acción en cada elemento proporcionando un número de índice (aquí, la variable se usa para el índice como "i")
Se necesita XPath:
fuente