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
i
en 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
td
s que eran el sexto hijo de atr
y 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 dei
un elemento hijo.No hay
i
en 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
Modify
botón en ambas tablas.Suponiendo que el usuario tiene que seleccionar el cuarto
Modify
botó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]/button
El
count()
operador resulta útil en situaciones como estas.Lógica:
Modify
botón usando//th[.='Heading 4']
count(//tr/th[.='Heading 4']/preceding-sibling::th)+1
Obtenga 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
Modify
botó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]/button
fuente
(// * [@ 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