ক্যাপিবারা ব্যবহার করে কীভাবে ড্রপ ডাউনে বিকল্প নির্বাচন করবেন


125

আমি ক্যাপিবারা (২.১.০) ব্যবহার করে ড্রপ ডাউন মেনু থেকে একটি আইটেম নির্বাচন করার চেষ্টা করছি।

আমি সংখ্যা দ্বারা নির্বাচন করতে চাই (যার অর্থ দ্বিতীয়, তৃতীয়, ইত্যাদি বিকল্প নির্বাচন করুন)।

আমি পাগলের মতো গুগল করেছি সব ধরণের জিনিস চেষ্টা করে দেখছি কিন্তু ভাগ্য নেই।

আমি মানটি ব্যবহার করে এটি নির্বাচন করতে সক্ষম হয়েছি:

 find("option[value='4c430d62-f1ba-474f-8e8a-4452c55ea0a8']").click

তবে আমি সেই পদ্ধতিটি বি / সি ব্যবহার করতে চাই না মানটি এমন কিছু হয় যা পরিবর্তিত হবে এবং এটি আমার পরীক্ষার ভঙ্গুর হয়ে উঠবে।

ড্রপ ডাউন এর জন্য এইচটিএমএল হ'ল:

<td class="value">
    <select name="organizationSelect" id="organizationSelect" class="required">
     <option value="NULL">Choose...</option>
     <option value="4c430d62-f1ba-474f-8e8a-4452c55ea0a8">&nbsp;Institution1</option>
     <option value="e1a4efa7-352d-410a-957e-35c8a3b92944">&nbsp;Institution / test</option>
    </select>
</td>

আমি এটি চেষ্টা করেছিলাম:

  option = find(:xpath, "//*[@id='organizationSelect']/option[2]").text  
  select(option, :from => organizationSelect)

তবে এটির ফলে এই ত্রুটি হয়:

Ambiguous match, found 2 elements matching option "Institution" (Capybara::Ambiguous)

তাহলে কীভাবে আমি ড্রপ ডাউন (ক্যাপিবারা ব্যবহার করে) থেকে প্রথম, দ্বিতীয়, তৃতীয় ইত্যাদি বিকল্প নির্বাচন করতে পারি?

উত্তর:


129

আপনি যদি পদ্ধতির উত্সটিselect একবার দেখুন , আপনি দেখতে পারেন যে আপনি fromকীটি পাস করার পরে এটি কী করে তা মূলত:

find(:select, from, options).find(:option, value, options).select_option

অন্য কথায়, এটি <select>আপনার আগ্রহী তা খুঁজে পায় এবং তার <option>মধ্যে এটি সন্ধান করে , তারপরে নোডে কল select_optionকরে <option>

আপনি ইতিমধ্যে বেশ কয়েকটি প্রথম দুটি কাজ সম্পন্ন করেছেন, আমি কেবল এগুলি পুনরায় সাজিয়েছি। তারপরে আপনি select_optionপদ্ধতিটি শেষে দেখতে পারেন:

find('#organizationSelect').find(:xpath, 'option[2]').select_option

1
অনেক অনেক ধন্যবাদ ক্যারল! সত্যিই সাহায্যের প্রশংসা! : ডি
ফারুক

2
ভবিষ্যতে যারা গবেষণা করছেন তাদের জন্য এই রেফারেন্সটি যুক্ত করতে চান: gist.github.com/zhengjia/428105
বিকেএসপুরজিয়ন

3
দুর্দান্ত উত্তর! আমি যোগ করতে যে পাগল 5 ভাল হিসাবে আপনি নিম্নলিখিত পদ্ধতিতে এটা করতে পারেন চাই: select('option_name', from: 'select_box')। মানগুলি যেখানে হতে পারে: আইডি, নাম, সম্পর্কিত লেবেল উপাদান। আপনি এখানে ক্যাপাইবার এবং ডিএসএল বিকল্পগুলি সম্পর্কে আরও পড়তে পারেন ।
নেশা জোরিক

177

কিছু কারণে এটি আমার পক্ষে কার্যকর হয়নি। সুতরাং আমাকে অন্য কিছু ব্যবহার করতে হয়েছিল।

select "option_name_here", :from => "organizationSelect"

আমার জন্য কাজ।


1
অদ্ভুত, পদ্ধতিটি কমপক্ষে 3 টি বিকল্প বলে মনে হচ্ছে বলে এটি আমার পক্ষে কাজ করে না। যদিও আপনি প্রস্তাবিত কোডটি ক্যাপিবারা গাইডের উদাহরণ কোডের সাথে মেলে।
লিনাস


3
নাম, আইডি, বা লেবেল পাঠ্য থেকে সম্ভবত মানটি মূল্যবান। উদাহরণস্বরূপ "# অর্গানাইজেশনসलेक्ट" ভুল, তবে "সংস্থাগঠন" কাজ করা উচিত।
এমজেডবি

এটি আমার পক্ষে কাজ করে না, তবে ক্যারোল 10 সেন্সেন্টের সমাধানটি কাজ করে। এটি আপনার উত্তরের সমালোচক নয়। আমি এটিকে সত্যিই আশ্চর্যজনক বলে মনে করি যে ক্যাপ্যাবারার সর্বশেষতম সংস্করণেও কিছু কল কাজ করে এবং কিছু কল এমনকি যখন অন্তর্দৃষ্টি আপনাকে বিশ্বাস করে যে একাধিক সমাধান বৈধ বলে মনে হয়। এটা আমাকে পাগল করছে। এটি কি ফায়ারফক্সের সাথে সম্পর্কিত (বা যাইহোক ব্রাউজারের ক্যাপাইবার ব্যবহার শেষ হয়)?
বিশৃঙ্খলা

আমি মনে করি এটি কেবল তখনই কার্যকর হবে যখন বিকল্পের নাম এবং বিকল্পের মানটি এক হয়।
পিক্সিলিথ

8

অন্য বিকল্পটি হল এর মতো একটি পদ্ধতি যুক্ত করা

  def select_option(css_selector, value)
    find(:css, css_selector).find(:option, value).select_option
  end

সহায়ক বিকল্পগুলিfind("select[name='organization_search[role]']").find(:option, text: :Staff).select_option
পিক্সিলিউথ

find(:css, "#search_field").find(:option, "Opp Last Name").select_option, যা প্রদর্শিত বিকল্পের পাঠ্যটি আমার জন্য কাজ করেছিল, যখন বিকল্পটির মান দেয় না।
কোডেনব

4

দুর্ভাগ্যক্রমে, সর্বাধিক জনপ্রিয় উত্তরটি আমার পক্ষে পুরোপুরি কার্যকর হয়নি। .select_optionবিবৃতিটির শেষে আমাকে যুক্ত করতে হয়েছিল

select("option_name_here", from: "organizationSelect").select_option

ছাড়া select_option, কোনও নির্বাচন করা হচ্ছে না


আপনি কীভাবে কল করতে পারবেন .select_option, যেহেতু selectপদ্ধতিটি একটি বুলিয়ান মান দেয়?
রুবি

4

গাদাটির আরও একটি উত্তর যুক্ত করতে (কারণ আপনার সেটআপের উপর নির্ভর করে এটি করার অনেকগুলি উপায় রয়েছে) - আমি এটি আক্ষরিক optionউপাদান নির্বাচন করে এবং এটিতে ক্লিক করে করেছি

find(".some-selector-for-dropdown option[value='1234']").select_option

এটি খুব সুন্দর নয়, তবে এটি কাজ করে: /


2

উত্তরগুলির কোনওটিই আমার জন্য 2017 সালে ক্যাপাইবার 2.7 দিয়ে কাজ করেনি। আমি পেয়েছি "আর্গুমেন্টেরর: আর্গুমেন্টের ভুল সংখ্যা (প্রদত্ত 2, প্রত্যাশিত 0)"

তবে এটি করেছে:

find('#organizationSelect').all(:css, 'option').find { |o| o.value == 'option_name_here' }.select_option

0

এটি সরাসরি উত্তর নয়, তবে আপনি (যদি আপনার সার্ভার অনুমতি দেয়) করতে পারেন:

1) আপনার সংস্থার জন্য একটি মডেল তৈরি করুন; অতিরিক্ত: আপনার এইচটিএমএল জনপ্রিয় করা সহজ হবে।

2) আপনার মডেলের জন্য একটি কারখানা (ফ্যাক্টরিগার্ল) তৈরি করুন;

3) কারখানার সাথে একটি তালিকা তৈরি করুন (create_list);

4) তালিকা থেকে একটি সংস্থা 'পিক' (নমুনা):

# Random select
option = Organization.all.sample 

# Select the FIRST(0) by id
option = Organization.all[0] 

# Select the SECOND(1) after some restriction
option = Organization.where(some_attr: some_value)[2]
option = Organization.where("some_attr OP some_value")[2] #OP is "=", "<", ">", so on... 

4
যদি আমাকে একটি মডেল তৈরি করতে হয় তবে ক্যাপিবারা ব্যবহার করার কোনও মানে নেই
ব্যবহারকারী 1735921

এটি মোটেও উত্তর নয়। এটি ক্যাপাইবার সম্পর্কে একটি প্রশ্ন।
রবিন ডৌহার্টি

0

এখানে আমি খুঁজে পেয়েছি সবচেয়ে সংক্ষিপ্ত উপায় (ক্যাপিবারা ৩.৩.০ এবং ক্রোমিয়াম ড্রাইভার ব্যবহার করে):

all('#id-of-select option')[1].select_option

2 য় বিকল্পটি নির্বাচন করবে। প্রয়োজন অনুযায়ী সূচক বৃদ্ধি করুন।


0

ক্যাপিবারা আপনি শুধুমাত্র ব্যবহার করতে পারেন এটি দিয়ে xPath

find(:xpath, "//*[@id='organizationSelect']/option[2]").click

এবং পদ্ধতি ক্লিক

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.