ruby - trailer - এন্থিরান




Capybara 2.0 এ আপগ্রেড করার পরে আইটেমগুলির তালিকায় প্রথম লিঙ্কটি কীভাবে ক্লিক করবেন? (4)

Xpath উপাদান ঠিকানা করতে পারেন। আমি এখনো এটির সাথে খুব ভাল নই, কিন্তু //div[@class='active'][1]/a মত কিছু //div[@class='active'][1]/a

যে কাজ করতে পারে বা নাও হতে পারে, কিন্তু বিন্দুটি হল xpath একটি অ্যারের সংমিশ্রণকে মোকাবেলা করতে এবং একটি নির্দিষ্ট টেনে আনতে পারে। আপনি এই সাথে মেলে করতে সক্ষম হওয়া উচিত।

আমার প্রকল্পের একটি উদাহরণ থেকে একটি উদাহরণ উদাহরণ:

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

কিভাবে যে ক্ষেত্রে প্রথম লিঙ্ক ক্লিক করুন:

<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"

এবং ভিতরে ছাড়া আমি এই ত্রুটি পেতে:

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

আপনি শুধু ব্যবহার করতে পারেন:

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

অথবা

first('.item > a').click

(যদি আপনার ডিফল্ট নির্বাচক হয়: CSS)

আপনার প্রশ্নের কোড এইভাবে কাজ করে না:

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

সমতুল্য:

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

ক্যাপিবারা বেশ কয়েকটি খুঁজে পেয়েছেন। .item তাই এটি একটি ব্যতিক্রম তুলে ধরে। আমি ক্যাপিবারা ২ এই আচরণকে খুব ভাল মনে করি।



যেহেতু প্রথম () সর্বদা অপেক্ষা করে না, সম্ভবত এটি দরকারী:

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