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

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

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

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

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

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

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



답변

그냥 사용하는 카피 바라의 정확한 옵션 :

Capybara.exact = true


답변

: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"


답변

사용중인 gem의 버전에 따라

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

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

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


답변

내 선호는 have_selectorwith textexact_text: true:

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


답변

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

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

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

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


답변

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

click_link(link_name, :text => link_name)

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


답변