Eu uso o XPather Browser para verificar minhas expressões XPATH em uma página HTML.
Meu objetivo final é usar essas expressões no Selenium para testar minhas interfaces de usuário.
Eu tenho um arquivo HTML com um conteúdo semelhante a este:
<tr> <td> abc </td> <td> & nbsp; </td> </tr>
Desejo selecionar um nó com um texto que contenha a string "
".
Com uma string normal como "abc", não há problema. Eu uso um XPATH semelhante ao //td[text()="abc"]
.
Quando tento com um XPATH como //td[text()=" "]
ele não retorna nada. Existe uma regra especial para textos com " &
"?
Respostas:
Parece que o OpenQA , que está por trás do Selenium, já abordou esse problema. Eles definiram algumas variáveis para corresponder explicitamente a espaços em branco. No meu caso, preciso usar um XPATH semelhante ao
//td[text()="${nbsp}"]
.Reproduzi aqui o texto do OpenQA sobre esse problema (encontrado aqui ):
fonte
\u00a0
. O que funcionou para mim foi digitar um espaço sem interrupção, no macAlt+Shift+Space
. PesquisaAlt+0160
na Web diz no Windows.Descobri que posso fazer a correspondência quando insiro um espaço sem interrupção codificado (U + 00A0) digitando Alt + 0160 no Windows entre as duas aspas ...
trabalhou para mim com o char especial.
Pelo que entendi, o padrão XPath 1.0 não lida com caracteres de escape Unicode. Parece haver funções para isso no XPath 2.0, mas parece que o Firefox não o suporta (ou eu entendi algo errado). Então você tem a ver com a página de código local. Feio, eu sei.
Na verdade, parece que o padrão depende da linguagem de programação usando o XPath para fornecer a sequência de escape Unicode correta ... Então, de alguma forma, eu fiz a coisa certa.
fonte
$col = $xpath->query("//p[text()=\"\xC2\xA0\"]");
Tente usar a entidade decimal em
 
vez da entidade nomeada. Se isso não funcionar, você poderá simplesmente usar o caractere unicode para um espaço sem quebra em vez da
entidade.(Nota: não tentei isso no XPather, mas tentei no Oxygen.)
fonte
Tenha em mente que um processador XML compatível com os padrões terá substituído quaisquer outras de cinco ones padrão de XML referências de entidade (
&
,>
,<
,'
,"
) com o personagem correspondente na codificação alvo no momento em expressões XPath são avaliados. Dado esse comportamento, as sugestões de PhiLho e jsulak são o caminho a seguir, se você deseja trabalhar com ferramentas XML. Quando você insere 
a expressão XPath, ela deve ser convertida na sequência de bytes correspondente antes que a expressão XPath seja aplicada.fonte
Não consigo obter uma correspondência usando o Xpather, mas o seguinte funcionou para mim com arquivos XML e XSL simples no XML Notepad da Microsoft:
O valor retornado é 1, que é o valor correto no meu caso de teste.
No entanto, tive que declarar o nbsp como uma entidade no meu XML e XSL usando o seguinte:
Eu não tenho certeza se isso ajuda você, mas eu era capaz de realmente encontrar nbsp usando uma expressão XPath.
Editar: Meu exemplo de código realmente contém os caracteres '& nbsp;' mas o destaque da sintaxe JavaScript o converte no caractere de espaço. Não se engane!
fonte
Procure
ou apenasnbsp
- você tentou isso?fonte
De acordo com o HTML que você forneceu:
Para localizar o nó com a sequência,
você pode usar um dos seguintesxpath soluções baseadas em:Usando
text()
:Usando
contains()
:No entanto, o ideal é evitar o caractere NO-BREAK SPACE e usar uma das seguintes estratégias de localização :
Usando o
<tr>
nó pai efollowing-sibling
:Usando
starts-with()
:Usando o
<td>
nó anterior e ofollowing
node and
seguinte irmão:Referência
Você pode encontrar uma discussão detalhada relevante em:
Seleniumtl; dr
Caractere Unicode 'NO-BREAK SPACE' (U + 00A0)
fonte
Você pode usar, XPath contém funções, irmãos, ancestrais no Selenium WebDriver para localizar elementos que não possuem propriedades exclusivas para serem identificados.
para obter mais detalhes, leia esta página: https://www.guru99.com/using-contains-sbiling-ancestor-to-find-element-in-selenium.html
fonte