Estou escrevendo um caso de teste do Selenium. E aqui está a expressão xpath que uso para corresponder a todos os botões 'Modify' em uma tabela de dados.
//img[@title='Modify']
Minha pergunta é: como posso visitar os conjuntos de nós correspondentes por índice? Eu tentei com
//img[@title='Modify'][i]
e
//img[@title='Modify' and position() = i]
Mas nem funciona .. Eu também tentei com o XPath checker (uma extensão do firefox). Há no total 13 correspondências encontradas, então não tenho a menor idéia de como vou selecionar uma delas. Ou o XPath oferece suporte à seleção especificada de nós que não estão no mesmo nó pai?
Não existe
i
no XPath.Ou você usa números literais:
//img[@title='Modify'][1]
Ou você constrói a string de expressão dinamicamente:
'//img[@title='Modify']['+i+']'
(mas lembre-se de que as expressões XPath dinâmicas não funcionam dentro do XSLT).Sim:
(//img[@title='Modify'])[13]
Isso
//img[@title='Modify'][i]
significa "qualquer<img>
um com o título 'Modificar' e um elemento filho chamado<i>
".fonte
td
s que foram o sexto filho de atr
e não têm conteúdo vazio://tr/td[6][string-length(text()) > 0]
é curto para
portanto, está retornando o i'ésimo nó sob o mesmo nó pai.
Você quer
fonte
/descendant::img[@title='Modify'][$index]
vai funcionar bem. Observe também que o[i]
teste de predicado para a existência dei
elemento filho.Não há
i
no xpath não é totalmente verdade. Você ainda pode usar ocount()
para localizar o índice.Considere a seguinte página
A página possui 2 tabelas e 6 colunas, cada uma com nomes de coluna exclusivos e 6 linhas com dados variáveis. A última linha contém o
Modify
botão em ambas as tabelas.Supondo que o usuário tenha que selecionar o 4º
Modify
botão da primeira tabela com base no títuloUse o xpath
//th[.='Heading 4']/ancestor::thead/following-sibling::tbody/tr/td[count(//tr/th[.='Heading 4']/preceding-sibling::th)+1]/button
O
count()
operador é útil em situações como essas.Lógica:
Modify
botão usando//th[.='Heading 4']
count(//tr/th[.='Heading 4']/preceding-sibling::th)+1
Obtenha as linhas para o cabeçalho correspondente usando
//th[.='Heading 4']/ancestor::thead/following-sibling::tbody/tr/td[count(//tr/th[.='Heading 4']/preceding-sibling::th)+1]
Obtenha o
Modify
botão da lista de nós extraída usando//th[.='Heading 4']/ancestor::thead/following-sibling::tbody/tr/td[count(//tr/th[.='Heading 4']/preceding-sibling::th)+1]/button
fonte
(// * [@ attribute = 'value']) [index] para encontrar o destino do elemento enquanto você encontra várias correspondências nele
fonte
Aqui está a solução para a variável de índice
Digamos que você encontrou 5 elementos com o mesmo localizador e gostaria de realizar uma ação em cada elemento, fornecendo o número do índice (aqui, a variável é usada para o índice como "i")
Leva XPath:
fonte