2016-06-02 3 views
1

href../items/으로 시작하는 페이지의 모든 링크를 찾아야합니다. 예를 들어 :특정 텍스트로 시작하는 href가있는 모든 링크 찾기

<a href="../items/some-link">Some link title</a> 
<a href="../other-link">Other link title</a> 
<a href="../items/some-link-2">Some link title 2</a> 

나는 다음과 같은 정규 표현식을 시도했지만 작동하지 않습니다 : 내가 잘못

review_links = page.find_link('a')[:href] == '%r{^../items/\w+}' 

을 뭐하는 거지?

+0

것이 존재 함을 확인하는 대신 경우에 당신은

page.all(:link, nil, href: /regex to match against/) 

을 수행 할 수 있습니다 'page.find_link ('a') [: href]'return? 어떤 것이 정규 표현식과 동일한 지 테스트하는 것은 당신이 원하는 것이 아닙니다. 분명히 귀하의 링크는 정규 표현식이 될 수 없습니다. 당신은 * match *와 일치하는지 테스트하려고합니다. – tadman

답변

1
당신은 텍스트로 시작하는 href 속성이있는 모든 링크를 찾을 수있는 CSS 선택기를 사용할 수 있습니다

다음 href^=href 속성으로 시작하는 의미

review_links = page.all('a[href^="../items/"]') 
p review_links.map(&:text) 
#=> ["Some link title", "Some link title 2"] 

참고.

3

선택자 :link 선택기는 일치하는 정규식을 허용하는 :href 옵션을 사용합니다. 당신은 하나의 결과를 찾고 있다면 그래서 당신은 할 수

초기 전무는 find_link에 전달 될 일반 로케이터 (링크 텍스트 등)를 사용하지 않는 나타 내기 위해 요구되는 카피 바라 2.7
page.find_link(nil, href: /regex to match against/) 

, Capybara 2.8에서 출시 될 때 필요하지 않습니다. 참고 : 정규 표현식은 대부분의 드라이버에서 href 속성 (속성과 반대) 인 노드 [ 'href']와 일치하므로 링크가 참조하는 전체 URL로 정규화됩니다 (http://example.com/abc/def). 문서는 단지/abc/def로 설정 될 수 있습니다. 당신이 실제로 하나 개 이상의 결과를 찾고 있다면 당신은 그냥 일치하는 링크의 특정 번호 (3)은 구조가 무엇

expect(page).to have_link(nil, href: /regex to match/, count: 3) 
관련 문제