Como encontrar um elemento combinando o texto exato do elemento em Capivara


102

Tenho a seguir dois elementos em HTML

<a href="/berlin" >Berlin</a>
<a href="/berlin" >Berlin Germany </a>

Estou tentando encontrar o elemento usando o método Capivara

find("a", :text => "berlin")

Acima retornará dois elementos porque ambos contêm o texto berlim.

Existe uma maneira de combinar o texto exato na Capivara?


Capivara ou nokogiri? Por que isso está marcado com ambos?
pguardiario

Respostas:



139

Use um regexp em vez de uma string para o valor da :textchave:

find("a", :text => /\ABerlin\z/)

Verifique a seção 'Opções Hash' da Method: Capybara::Node::Finders#all documentação .

PS: as correspondências de texto diferenciam maiúsculas de minúsculas. Na verdade, seu código de exemplo gera um erro:

find("a", :text => "berlin")
# => Capybara::ElementNotFound:
#    Unable to find css "a" with text "berlin"

13
É terrível que esta seja a melhor resposta. : cry:
BM5k

por que temos \ A e \ z entre Berlim?
Karan Verma

1
como posso adicionar um marcador de posição na regex
FluffyBeing

Isso poderia ter sido resolvido por escritoclick_link(link_text, :text => link_text)
Lembre

52

Dependendo de qual versão da gema você está usando

find('a', text: 'Berlin', exact: true)

pode estar obsoleto. Nesse caso, você teria que usar

find('a', text: 'Berlin', match: :prefer_exact)

4

Minha preferência é usar have_selectorcom texte exact_text: true:

expect(body).to have_selector 'a', text: 'Berlin', exact_text: true

4

Você também pode fazer isso:

find('a', text: 'Berlin', exact_text: true)

Isso encontrará para CSS.

E usar apenas em exact: truevez de exact_textmostrará uma mensagem de que a exactopção só é válida para XPATH.


2
ou ainda mais, você pode usarfind("a", exact_text: "berlin")
Kukunin

0

Para usar click_link em capivara você precisa adicionar mais uma propriedade no método usando-o.

click_link(link_name, :text => link_name)

Aqui, o link_name é o valor de texto de um link. Usando : palavra-chave de texto , estamos especificando que queremos clicar em um link com o valor de texto que corresponde exatamente às nossas necessidades.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.