programing

Capybara 2.0으로 업그레이드한 후 항목 목록에서 첫 번째 링크를 클릭하는 방법은 무엇입니까?

magicmemo 2023. 5. 31. 15:48
반응형

Capybara 2.0으로 업그레이드한 후 항목 목록에서 첫 번째 링크를 클릭하는 방법은 무엇입니까?

이 경우 첫 번째 링크를 클릭하는 방법:

<div class="item">
  <a href="/agree/">Agree</a>
</div>
<div class="item">
  <a href="/agree/">Agree</a>
</div>
within ".item" do
  first(:link, "Agree").click
end

그리고 나는 다음과 같은 오류를 받습니다.

Capybara::Ambiguous:
  Ambiguous match, found 2 elements matching css ".item"

그리고 그것 없이.within다음 오류가 발생했습니다.

Failure/Error: first(:link, "Agree").click
NoMethodError:
  undefined method `click' for nil:NilClass

다음을 사용할 수 있습니다.

first('.item').click_link('Agree')

또는

first('.item > a').click

(기본 선택기가 :dll인 경우)


질문의 코드가 다음과 같이 작동하지 않습니다.

within ".item" do
  first(:link, "Agree").click
end

다음과 같습니다.

find('.item').first(:link, "Agree").click

Capybara는 여러 개를 찾습니다..item그래서 그것은 예외를 일으킵니다.저는 Capybara 2의 이러한 행동을 매우 좋게 생각합니다.

다음을 시도합니다.

within ".item" do
  click_link("Agree", :match => :first)
end

출처:

이 구문은 다음과 같은 기능도 마찬가지입니다.

within first(".item") do
  click_link "Agree"
end

이러한 솔루션의 대부분은 Capybara의 훌륭한 대기 기능을 사용하지 않을 것입니다.

이 링크에서 제안하는 대로 하는 것이 좋습니다.
https://thoughtbot.com/blog/write-reliable-asynchronous-integration-tests-with-capybara#find-the-first-matching-element

불량:

first(".active").click
페이지에 아직 .active 요소가 없으면 먼저 0을 반환하고 클릭이 실패합니다.

좋습니다.

만약 당신이 정확히 하나가 있는지 확인하고 싶다면.
find(".active").click

첫 번째 요소만 원한다면,
find(".active", match: :first).click
Capybara는 클릭하기 전에 요소가 나타날 때까지 기다립니다.

참고:match: :first일치하는 새 요소를 추가하면 다른 요소를 자동으로 클릭하기 때문에 더 취약합니다.

Xpath는 요소를 지정할 수 있습니다.아직 잘하진 못하지만, 뭐 그런 것 같아요.//div[@class='active'][1]/a

이것은 작동하거나 작동하지 않을 수도 있지만, 요점은 xpath가 일치하는 배열을 지정하고 특정 항목을 추출할 수 있다는 것입니다.당신은 이것과 일치할 수 있어야 합니다.

제 프로젝트 중 하나의 작업 예제:

page.find("div.panel", 텍스트: /Proposals/) 내에서 수행합니다.page.find('tr', 텍스트: /Foo/) 내에서 수행합니다.페이지입니다.have_xpath(으)로 지정해야 합니다. [3], 텍스트: @today)끝.끝.

first()가 항상 대기하는 것은 아니므로 다음과 같이 유용할 수 있습니다.

expect(page).to have_css("selector")                               
first("selector").click

사용이 간편합니다.

$('.item').find('a').first().click();

언급URL : https://stackoverflow.com/questions/14513377/how-to-click-first-link-in-list-of-items-after-upgrading-to-capybara-2-0

반응형