Na minha página, há um div
com um class
nome Test
.
Como posso encontrá-lo XPath
?
Na minha página, há um div
com um class
nome Test
.
Como posso encontrá-lo XPath
?
Respostas:
Esse seletor deve funcionar, mas será mais eficiente se você o substituir pela sua marcação adequada:
//*[contains(@class, 'Test')]
Ou, já que sabemos que o elemento procurado é um div
:
//div[contains(@class, 'Test')]
Mas como isso também corresponderá a casos como class="Testvalue"
ou class="newTest"
, a versão do @ Tomalak fornecida nos comentários é melhor :
//div[contains(concat(' ', @class, ' '), ' Test ')]
Se você deseja ter certeza de que ela corresponderá corretamente, também poderá usar a função normalize-space para limpar caracteres de espaço em branco disperso ao redor do nome da classe (como mencionado por @Terry):
//div[contains(concat(' ', normalize-space(@class), ' '), ' Test ')]
Observe que em todas essas versões, o * deve ser melhor substituído por qualquer nome de elemento que você realmente deseje corresponder, a menos que deseje pesquisar todos os elementos no documento para a condição especificada.
//div[contains(concat(' ', @class, ' '), ' Test ')]
- O seu também mostrará correspondências parciais.
Maneira mais fácil ..
//div[@class="Test"]
Supondo que você deseja encontrar <div class="Test">
como descrito.
//
não apenas /
.
A única maneira correta de fazer isso com o XPath:
//div[contains(concat(" ", normalize-space(@class), " "), " Test ")]
A função normalize-space
remove os espaços em branco à esquerda e à esquerda e também substitui as seqüências de caracteres em branco por um único espaço.
Se não precisar de muitas dessas consultas Xpath, convém usar uma biblioteca que converta seletores CSS em XPath, pois os seletores CSS geralmente são muito mais fáceis de ler e gravar do que as consultas XPath. Por exemplo, nesse caso, você pode usar os dois div[class~="Test"]
e div.Test
obter o mesmo resultado.
Algumas bibliotecas que consegui encontrar:
Estou apenas fornecendo isso como resposta, pois Tomalak forneceu um comentário à resposta do médico há muito tempo.
//div[contains(concat(' ', @class, ' '), ' Test ')]
concat(' ', normalize-space(@class), ' ')
explica todos os tipos de caracteres de espaço em branco?
//div[contains(concat(' ', @class, ' '), ' Test ')]/chid
que não seleciona crianças?
Uma função útil pode ser feita com respostas anteriores:
function matchClass($className) {
return "[contains(concat(' ', normalize-space(@class), ' '), ' $className ')]";
}
Em seguida, basta concat a chamada de função em sua consulta.
você pode encontrar elementos como este exemplo (todos os elementos css)
private By
allElementsCss = By.xpath(".//div[@class]");