Capybara에서 요소의 정확한 텍스트를 일치시켜 요소를 찾는 방법


102

HTML에 다음 두 가지 요소가 있습니다.

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

다음 Capybara 방법을 사용하여 요소를 찾으려고합니다.

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

위는 둘 다 베를린 텍스트를 포함하기 때문에 두 개의 요소를 반환합니다.

Capybara에서 정확한 텍스트를 일치시키는 방법이 있습니까?


카피 바라 또는 노코 기리? 왜 둘 다 태그가 지정됩니까?
pguardiario

답변:



139

:text키 값에 문자열 대신 정규식을 사용하십시오 .

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

Method: Capybara::Node::Finders#all 문서 의 '옵션 해시'섹션을 확인하십시오 .

추신 : 텍스트 일치는 대소 문자를 구분합니다. 예제 코드는 실제로 오류를 발생시킵니다.

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

13
이것이 최선의 대답이라는 것이 끔찍합니다. : cry :
BM5k

베를린 사이에 \ A와 \ z가있는 이유는 무엇입니까?
Karan Verma 2014

1
어떻게 정규식에 자리 표시자를 추가 할 수 있습니다
FluffyBeing

이것은 글로 처리 할 수있었습니다click_link(link_text, :text => link_text)
당신이 왜 시작

52

사용중인 gem의 버전에 따라

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

더 이상 사용되지 않을 수 있습니다. 어떤 경우에 당신은 사용해야 할 것입니다

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

4

내 선호는 have_selectorwith textexact_text: true:

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

4

당신도 그렇게 할 수 있습니다 :

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

그것은 CSS를 찾을 것입니다.

exact: true대신 에만 사용 exact_text하면 exact옵션이 XPATH에만 유효 하다는 메시지가 표시됩니다 .


2
또는 더 많이 사용할 수 있습니다find("a", exact_text: "berlin")
Kukunin

0

카피 바라에서 click_link를 사용하려면이를 사용하는 메서드에 속성을 하나 더 추가해야합니다.

click_link(link_name, :text => link_name)

여기서 link_name 은 링크의 텍스트 값입니다. : text 키워드를 사용 하여 우리의 요구 사항과 정확히 일치하는 텍스트 값을 가진 링크를 클릭하도록 지정합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.