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_selector
with text
및 exact_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 키워드를 사용 하여 우리의 요구 사항과 정확히 일치하는 텍스트 값을 가진 링크를 클릭하도록 지정합니다.