Cara mengeklik tautan pertama dalam kasus itu:
<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
dan saya mendapatkan kesalahan ini:
Capybara::Ambiguous:
Ambiguous match, found 2 elements matching css ".item"
Dan tanpa within
saya mendapatkan kesalahan ini:
Failure/Error: first(:link, "Agree").click
NoMethodError:
undefined method `click' for nil:NilClass
Coba yang berikut ini:
Sumber:
sumber
Frasa ini juga berfungsi:
sumber
Xpath dapat mengatasi elemen tersebut. Saya belum terlalu bagus dengan itu, tetapi sesuatu seperti
//div[@class='active'][1]/a
Itu mungkin atau mungkin tidak berfungsi, tetapi intinya adalah bahwa xpath dapat menangani array yang cocok dan mengeluarkan yang tertentu. Anda harus bisa mencocokkan dengan ini.
Contoh contoh kerja dari salah satu proyek saya:
sumber
Karena first () tidak selalu menunggu, mungkin ini berguna:
sumber
sebagian besar dari solusi tersebut tidak akan menggunakan fitur menunggu brilian Capybara
lebih baik lakukan seperti yang disarankan tautan ini: https://thoughtbot.com/blog/write-r reliable-asynchronous-integration-tests-with-capybara#find-the-first-matching-
element
Buruk:
first(".active").click
Jika belum ada elemen .active pada halaman, pertama akan mengembalikan nol dan klik akan gagal.
Baik:
Jika Anda ingin memastikan ada yang tepat
find(".active").click
Jika Anda hanya ingin elemen pertama,
find(".active", match: :first).click
Capybara akan menunggu elemen muncul sebelum mencoba mengklik.
Catatan yang
match: :first
lebih rapuh, karena itu akan secara diam-diam mengklik elemen yang berbeda jika Anda memperkenalkan elemen baru yang cocok.sumber
Sederhana yang dapat Anda gunakan:
sumber