rails rack_test feature example ruby rspec capybara

ruby - rack_test - ¿Cómo hacer clic en el primer enlace en la lista de elementos después de actualizar a Capybara 2.0?



gem capybara rails (6)

Cómo hacer clic en el primer enlace en ese caso:

<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

y obtengo este error:

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

Y sin el within obtengo este error:

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


Como first () no siempre espera, quizás esto sea útil:

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


Esta frase también funciona:

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



Puedes simplemente usar:

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

o

first(''.item > a'').click

(si su selector predeterminado es: css)

El código en tu pregunta no funciona como:

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

es equivalente a:

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

Capybara encuentra varios .item por lo que plantea una excepción. Considero que este comportamiento de Capibara 2 es muy bueno.


Simple que puedes usar:

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


Xpath puede abordar el elemento. Todavía no soy muy bueno con esto, pero algo como //div[@class=''active''][1]/a

Eso puede o no funcionar, pero el punto es que xpath puede abordar una matriz de coincidencias y sacar una en particular. Deberías poder hacer coincidir esto.

Un ejemplo de ejemplo de trabajo de uno de mis proyectos:

within page.find("div.panel", text: /Proposals/) do within page.find(''tr'', text: /Foo/) do page.should have_xpath(''td[3]'', text: @today) end end