ক্যাপিবারা ব্যবহার করে কোনও ফর্ম ফিল্ডটি সঠিকভাবে পূরণ করা যায় তা আমি কীভাবে পরীক্ষা করতে পারি?


145

আমার কাছে একটি উপযুক্ত লেবেলযুক্ত ক্ষেত্র রয়েছে যা আমি কোনও সমস্যা ছাড়াই ক্যাপিবারা দিয়ে পূরণ করতে পারি:

fill_in 'Your name', with: 'John'

ভরাট করার আগে আমি এর মানটি যাচাই করতে চাই এবং এটি বের করতে পারি না।

আমি যদি fill_inনিম্নলিখিত লাইনের পরে যুক্ত করি :

find_field('Your name').should have_content('John')

এই পরীক্ষাটি ব্যর্থ হয়, যদিও পৃষ্ঠাটি সংরক্ষণ করে আমি যাচাই করেছি ঠিক এর আগে পূরণ করা কাজ করেছিল।

আমি কী মিস করছি?

উত্তর:


179

নির্দিষ্ট মান (যেমন 'জন') সহ কোনও উপাদান রয়েছে কিনা তা পরীক্ষা করতে আপনি এক্সপাথ ক্যোয়ারী ব্যবহার করতে পারেন input:

expect(page).to have_xpath("//input[@value='John']")

আরও তথ্যের জন্য http://www.w3schools.com/xpath/xpath_syntax.asp দেখুন ।

সম্ভবত একটি সুন্দর উপায় জন্য:

expect(find_field('Your name').value).to eq 'John'

সম্পাদনা: আজকাল আমি সম্ভবত হ্যাজ সিলেক্টর ব্যবহার করতাম

expect(page).to have_selector("input[value='John']")

আপনি যদি পৃষ্ঠার অবজেক্ট প্যাটার্ন ব্যবহার করছেন (আপনার হওয়া উচিত!)

class MyPage < SitePrism::Page
  element :my_field, "input#my_id"

  def has_secret_value?(value)
    my_field.value == value
  end
end

my_page = MyPage.new

expect(my_page).to have_secret_value "foo"

আহ, আমি কিছুটা মিস করছিলাম .value। ধন্যবাদ!
মার্ক-আন্দ্রে লাফোর্টুন

আমার একই সমস্যা ছিল, তবে ফর্ম ক্ষেত্রের চেয়ে ডিভের সাথে। অন্য কারওর মতো একই সমস্যা রয়েছে, ফাইন্ড_ফিল্ড ()। মানের চেয়ে ফাইন্ড_বি_আইডি ()। পাঠ্যটি ব্যবহার করুন। এই মানটি কেবলমাত্র ফর্মের ক্ষেত্রগুলিতে কাজ করে তা আমার কাছে বয়স হতে লাগলো …
জন ওয়াই

8
পরবর্তী পদ্ধতিতে সমস্যাটি হ'ল এটি ক্যাপিবারার পোলিং চক্রটি ব্যবহার করে না এবং তাই যদি ক্ষেত্রটি দীর্ঘকালীন চলমান জেএস কোড দ্বারা সেট করা থাকে তবে তাত্ক্ষণিকভাবে ব্যর্থ হবে। আপনি যদি কোনও স্ট্যাটিকালি উত্পন্ন ফর্মটিতে এটি চেষ্টা না করেন তবে প্রথম উপায়টি পছন্দ করা উচিত।
fqxp

1
আমি মনে করি @fqxp এর একটি আরও ভাল উত্তর রয়েছে যা আরএসপেক ম্যাচার এবং নতুন প্রত্যাশা সিনট্যাক্স ব্যবহার করে। ডকুমেন্টেশনে আমি যা দেখছি সেগুলি থেকে find_fieldএবং অন্যান্যগুলি Node::Findersপ্রত্যাশার চেয়ে নোডগুলি খুঁজে পেতে এবং তাদের উপর ক্রিয়া সম্পাদন করতে ব্যবহৃত হয়। অবশ্যই এটি কোনও নিয়ম নয়, তবে সাধারণ কিছু হিসাবে এটি ইনবিল্ট সলিউশনের সাথে যাওয়া আরও ভাল ধারণা। কথা মাত্র!
এজেন্ট 47 ডার্কসোল

সত্য, আশা এখন পছন্দসই উপায় হবে তবে সিনট্যাক্স এই প্রশ্নের প্রায় এক মাস পরে প্রকাশিত হয়েছিল।
ডিভিজি

309

আর একটি সুন্দর সমাধান হ'ল:

page.should have_field('Your name', with: 'John')

অথবা

expect(page).to have_field('Your name', with: 'John')

যথাক্রমে।

আরো দেখুন রেফারেন্স

দ্রষ্টব্য : অক্ষম ইনপুটগুলির জন্য, আপনাকে বিকল্পটি যুক্ত করতে হবে disabled: true


23
নির্বাচিত উত্তরের চেয়ে অনেক ভাল!
এজেন্ট 47 ডার্কসোল

3
আমি এখনও নির্বাচিত উত্তরটিকে পছন্দ করব কারণ ত্রুটি বার্তাটি আপনাকে প্রত্যাশিত এবং প্রকৃত স্ট্রিংগুলি দেখায়। এটি অপ্রত্যাশিত "প্রত্যাশিত ক্ষেত্রটিকে" আমার ক্ষেত্রকে "কিছু ফিরিয়ে দিতে" ত্রুটি দেয়। তবে এটি অবশ্যই আরও ভালভাবে পড়তে পারে এবং পৃষ্ঠা ম্যাচার এপিআই আরও ভালভাবে অনুসরণ করে। চারিদিকে উজ্জীবিত !!!
ম্যারানক্রোক

1
আমি যতদূর বলতে পারি, এটি আসলে ক্ষেত্রের মান নিশ্চিত করে না, ক্ষেত্রের উপস্থিতি মান নির্বিশেষে কেবল উপস্থিতি। আমি অনুমান করছি এটি একটি ত্রুটিযুক্ত যেহেতু ডক্স বলছে এটির ভিত্তিতে ফিল্টার করা উচিত।
নিক

1
withমানটি মিলে গেলে স্পষ্টতই পাস করা সত্য হয়, আমার জন্য এটি প্রত্যাশিত ফলাফল।
বেন সাফলি

4
উত্তরটি প্রথমে লেখার পরে ত্রুটির বার্তাটি উন্নত করা হতে পারে তবে আমি এখন expected […] but there were no matches. Also found "", which matched the selector but not all filters..একটি খালি মাঠে যা যা খুব সুন্দর ত্রুটির বার্তার খুব কাছে চলে আসে।
পাত্রু

2

আপনি যদি কোনও স্থানধারকের জন্য বিশেষভাবে পরীক্ষা করতে চান তবে ব্যবহার করুন:

page.should have_field("some_field_name", placeholder: "Some Placeholder")

বা:

expect(page).to have_field("some_field_name", placeholder: "Some Placeholder")

আপনি যদি ব্যবহারকারী-প্রবেশ করা মানটি পরীক্ষা করতে চান:

page.should have_field("some_field_name", with: "Some Entered Value")

0

আমি কীভাবে কিছুটা আলাদা করতে হবে তা ভাবছিলাম: আমি মাঠটির কিছু মূল্য আছে কিনা তা পরীক্ষা করতে চেয়েছি ( ম্যাচ না হওয়া পর্যন্ত ম্যাচারকে পুনরায় পরীক্ষা করার ক্যাপিবার দক্ষতার ব্যবহার করার সময় ) test দেখা যাচ্ছে যে এটি করার জন্য একটি "ফিল্টার ব্লক" ব্যবহার করা সম্ভব:

expect(page).to have_field("field_name") { |field|
  field.value.present?
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.