루비 1.9.3가, 3.1.10, RSpec에 2.13.0 레일과 카피 바라 2.2.1, 나는 페이지에서 오전, 주어진 부분 ID (아마도 정규식)
를 HTML 요소를 찾습니다 중첩 된 양식을 사용하는 앱 이 양식은 구성원을 대기열에 추가합니다. 회원이 이미 저장되어있는 경우 HTML의 해당 회원 ID는 queue_queue_members_attributes_0_user_id
이고 1, 2 등이 계속됩니다. JavaScript를 통해 Add New Member
에 대한 링크를 클릭하면 새 선택 상자의 HTML ID는 다음과 유사합니다. queue_queue_members_attributes_1421760178806_user_id
위에서 볼 수 있듯이 중첩 된 숫자가있는 모든 새 선택 상자에 대해 임의의 숫자 문자열이 생성됩니다. 속성이 아직 저장되지 않았습니다. 카피 바라와 함께 효과적으로 테스트하려면이 HTML 요소의 ID를 알아야합니다.
대기열에 구성원을 추가하는 페이지입니다. 회원이 이미있는 경우 선택 상자의 ID는 0, 1 등입니다. 내가 클릭하면이 경우 다음 1421760178806.
원래 시도
에, 새로운 선택 상자의 ID를 임의로 생성 된 번호입니다 내가 사양을 위해 만든 도우미 메서드입니다 "신규 회원 추가". 처음에는 효과가있었습니다. 그러나 최근에 대기열 구성원을 테스트해야했습니다. 대기열 구성원 팩토리를 추가하고 새 대기열 팩터 리 인스턴스로 생성하면이 문제가 발생했습니다. 이제는 xpath 쿼리와 일치하는 2 개의 선택 상자가 있습니다.
def select_member(member)
find(:xpath, "//select[contains(@id, '_user_id')]/option[@value='#{member.id}']").select_option
end
Failure/Error: select_member(@test_user)
Capybara::Ambiguous:
Ambiguous match, found 2 elements matching xpath "//select[contains(@id, '_user_id')]/option[@value='6647']"
변경 사항을 적용하면 FactoryGirl을 통해 생성시 멤버가 대기열에 추가됩니다. 즉, xpath 표현식은 선택 상자 두 개 (하나는 ID가 0이고 다른 하나는 1421760178806)와 일치 함을 의미합니다. 후자의 숫자 (하나의 "0"이외의 문자) 만 일치 시키길 원합니다. 내 테스트는 하나의 멤버 만 추가하기 때문에 ids> 0에 대해 걱정하지 않아도됩니다.
내가 다른 오류로 실행 때까지 나는 this SO question 처음에 도움이되었다고
두 번째 시도.
def select_member(member)
find(:xpath, "//select[matches(@id, '[0-9]{2,}_user_id')]/option[@value='#{member.id}']").select_option
end
Failure/Error: select_member(@test_user)
Capybara::Webkit::InvalidResponseError:
INVALID_EXPRESSION_ERR: DOM XPath Exception 51
질문에 HTML 소스를 추가하십시오. XPath 2.0을 사용하고 있습니까?그것은 예외적 일 것입니다. XPath 2.0.0이 없습니다. 여기에 Ruby 클래스가 있습니까? http://ruby-doc.org/stdlib-2.0/libdoc/rexml/rdoc/REXML/XPath.html? –
감사합니다. xpath를 보석으로 지정했습니다. HTML 소스에 관해서는 내가 찾고자하는 전체 요소를 의미합니까? – onebree
정확히''xpath'] (https://github.com/jnicklas/xpath) 보석이 당신을 위해 무엇을 기대합니까? –