ক্যাপিবারা একটি উপাদানের বৈশিষ্ট্য যুক্ত করে


87

আমি আরএসপেক 2 এবং ক্যাপিবারা গ্রহণযোগ্যতা পরীক্ষার জন্য ব্যবহার করছি।

আমি দৃsert়ভাবে বলতে চাই যে লিংকটি ক্যাপিবারাতে অক্ষম আছে বা না। কিভাবে আমি এটি করতে পারব?

উত্তর:


91

আপনি কীভাবে লিঙ্কটি অক্ষম করছেন? এটি কি ক্লাস যুক্ত করছে? একটি গুণ?

# Check for a link that has a "disabled" class:
page.should have_css("a.my_link.disabled")
page.should have_xpath("//a[@class='disabled']")

# Check for a link that has a "disabled" attribute:
page.should have_css("a.my_link[disabled]")
page.should have_xpath("//a[@class='disabled' and @disabled='disabled']")

# Check that the element is visible
find("a.my_link").should be_visible
find(:xpath, "//a[@class='disabled']").should be_visible

প্রকৃত xpath নির্বাচকগুলি ভুল হতে পারে। আমি প্রায়শই এক্সপথ ব্যবহার করি না!


ধন্যবাদ @ আইডলিফিনগার্স, আমি এক্সপ্যাথ ব্যবহার করেও দৃ .়তা রাখতে চাই। আমি কীভাবে এটি করতে পারি?
ক্রিশনা

আমি আমার উত্তর আপডেট করেছি। যদি এক্সপথ সিলেক্টরগুলি ভুল হয় তবে আপনাকে কিছু গুগলিং করতে হবে বা একটি নতুন প্রশ্ন খুলতে হবে।
idlefingers

নোট করুন যে এটি দেখার পরীক্ষার জন্য কাজ করবে না, কারণ ক্যাপিবারা দর্শনের সাথে কাজ করার জন্য তৈরি করা হয়নি। (Webrat হয়।)
পিটার এরলিচ

145

আর একটি সহজ সমাধান হ'ল এইচটিএমএল বৈশিষ্ট্যটি যা আপনি অনুসন্ধান করছেন তা অ্যাক্সেস করা []:

find('#my_element')['class']
# => "highlighted clearfix some_other_css_class"

find('a#my_element')['href']
# => "http://example.com

# or in general, find any attribute, even if it does not exist
find('a#my_element')['no_such_attribute']
# => ""

দ্রষ্টব্য যে Capybaraস্বয়ংক্রিয়ভাবে অ্যাসিনক্রোনাস অনুরোধগুলি শেষ হওয়ার জন্য অপেক্ষা করার চেষ্টা করবে, তবে এটি কিছু ক্ষেত্রে কার্যকর নাও হতে পারে:

অ্যাসিঙ্ক্রোনালি আপডেট হওয়া উপাদানগুলির উপর দৃser়তার সাথে যদি আপনার সমস্যা হয় তবে এখানে একটি কার্যকারিতা রয়েছে:


4
Vrey ব্যবহারযোগ্য সমাধান। ধন্যবাদ!
আলেকজান্ডার কুজনেটসভ

আমি সিএসএস অবস্থানের সাথে একটি স্ট্রিং পেয়েছি, যেমন। find('a#my_element[href]'), এই বৈশিষ্ট্যের মানটি পাওয়া কি সম্ভব? মত প্রকাশের সাথে চেষ্টা করা find('a#my_element[href]').valueকিন্তু কাজ করছে বলে মনে হচ্ছে না :(
মিকেল

@ মিকেল চেষ্টা করুন find('a#my_element[href]').textবা find('a#my_element[href]').native। এর মধ্যে যে কোনও একটি আপনি প্রত্যাশিত ফলাফল দিলে আমাকে জানান।
বোলারসেনিয়র

4
আমি বুঝতে পারি যে এই মন্তব্যগুলি সত্যই পুরানো, তবে এটি এইভাবে ব্যবহার করেছেন: page.find ('# my_element') ['href = "<href_value>"']] এবং এটি একটি ট্রিট কাজ করেছে
ডোনো

আপনি যদি অ্যাসিক্রোনাস পরিবর্তন সম্পর্কে দৃ as়তা জানাতে চান তবে এটি ক্যোয়ারীর সত্য হয়ে ওঠার অপেক্ষা রাখে না।
sj26

4

সঠিক
এক্সপথটি খুঁজে পেতে এটি কিছুটা অগোছালো ছিল, এখানে ক্যাপিবারা ব্যবহার করে 0.4.1.1

# <a href="https://stackoverflow.com/clowns?ordered_by=clumsyness" class="weep">View Clowns</a>  

page.should have_xpath("//a[@class='weep'][@href='/clowns?ordered_by=clumsyness']", :text => "View Clowns")

আপনার যদি ক্লাস ছাড়াই কেবল একটি লিঙ্ক থাকে তবে ব্যবহার করুন

page.should have_link('View Clowns', :href => '/clowns?ordered_by=clumsyness')

দুঃখের সাথে এরকম কিছু কাজ করবে না:

page.should have_link('This will not work!', :href => '/clowns?ordered_by=clumsyness', :class => "weep")

শ্রেণীর বিকল্পটি উপেক্ষা করা হবে।


4

আমি দুটি পৃথক দৃ using় ব্যবহার have_linkএবং ব্যবহারের পরামর্শ দিচ্ছি find_link(name)[:disabled]। একমাত্র দ্বিতীয় দাবী সম্পাদন করা সহজতর, এটি নিখোঁজ লিঙ্কগুলি সম্পর্কে ত্রুটি বার্তাগুলিকে আরও সুন্দর দেখায়, আপনার পরীক্ষার ফলাফলগুলি পড়া সহজ করে তোলে।

expect(page).to have_link "Example"
expect(find_link("Example")[:disabled]).to be false

নোট যে "Example"লিঙ্কটির নাম বা আইডি পরিবর্তন করা যেতে পারে।


1
page.should have_link('It will work this way!', {:href => '/clowns?ordered_by=clumsyness', :class => "smile"})

have_link অপশনগুলির একটি হ্যাশ প্রত্যাশা করে যা আপনি কোনও সরবরাহ না করলে খালি। লিঙ্কের যে কোনও বৈশিষ্ট্য থাকতে হবে তা আপনি নির্দিষ্ট করতে পারেন - কেবলমাত্র নিশ্চিত করুন যে আপনি ওয়ান হ্যাশের সমস্ত বিকল্প পাস করেছেন।

আশাকরি এটা সাহায্য করবে

পিএস: ডেটা-মেথডের মতো অ্যাট্রিবিউটের জন্য আপনাকে হাইফেনের প্রতীকটি ভেঙে দেওয়ার কারণে আপনাকে গুণকের নামটি স্ট্রিং হিসাবে পাস করতে হবে।


6
এটি কখনও কাজ করে না এবং ক্যাপিবার সাথে কাজ করে না। আমি জানি না কেন 9 জন লোক এটি আপত্তি করেছে।
আন্দ্রেই বোতালোভ

এটি আর ক্যাপিবারা 2 তে কাজ করে না 2 ক্যাপিবারা <2 ব্যবহার করে লোকেরা উপরেরটি ব্যবহার করতে পারে
তিয়ান

@ টিয়ান এটি ক্যাপিবারা <2 এ কাজ করেনি I আমি আপনাকে এই উত্তরটি নিম্নে রাখার পরামর্শ দিই।
আন্দ্রেই বোতালোভ

class:বৈধ নয়
আমির রামিনফার

1

যখনই সম্ভব, আপনার ক্যাপিবারার সরবরাহিত মোড়ক ব্যবহার করার চেষ্টা করা উচিত যা চালকদের জুড়ে আরও ধারাবাহিকভাবে কাজ করবে।

বিশেষ ক্ষেত্রে disabled, ২.১-তে একটি মোড়ক চালু করা হয়েছিল: https://github.com/jnicklas/capybara/blob/fc56557a5463b9d944207f2efa401faa5b49d9ef/History.md#version-210

আপনি যদি এটি ব্যবহার করেন তবে আপনি র্যাকটেষ্ট এবং পলটারজিস্ট উভয়েরই বুদ্ধিমান ফলাফল পাবেন:

এইচটিএমএল:

<input type="text" id="disabled-false"            ></div>
<input type="text" id="disabled-true"     disabled></div>
<input type="text" id="disabled-js-true"          ></div>
<input type="text" id="disabled-js-false" disabled></div>
<script>
  document.getElementById('disabled-js-true').disabled = true
  document.getElementById('disabled-js-false').disabled = false
</script>

পরীক্ষা:

!all(:field, 'disabled-false',    disabled: false).empty? or raise
 all(:field, 'disabled-false',    disabled: true ).empty? or raise
 all(:field, 'disabled-true',     disabled: false).empty? or raise
!all(:field, 'disabled-true',     disabled: true ).empty? or raise
 all(:field, 'disabled-js-true',  disabled: true ).empty? or raise
 all(:field, 'disabled-js-false', disabled: false).empty? or raise

Capybara.current_driver = :poltergeist
!all(:field, 'disabled-false',    disabled: false).empty? or raise
 all(:field, 'disabled-false',    disabled: true ).empty? or raise
 all(:field, 'disabled-true',     disabled: false).empty? or raise
!all(:field, 'disabled-true',     disabled: true ).empty? or raise
!all(:field, 'disabled-js-true',  disabled: true ).empty? or raise
!all(:field, 'disabled-js-false', disabled: false).empty? or raise

সিএসএস নির্বাচকদের পরিবর্তে এটি কীভাবে ব্যবহার করে জাভাস্ক্রিপ্ট পরীক্ষাগুলি কোনও পরিবর্তন ছাড়াই কাজ করবে যদি আপনি কোনও জেএস সক্ষম ড্রাইভার ব্যবহার শুরু করেন তবে নোট করুন।

এখানে চলমান পরীক্ষার ফাইল ।


0

ধনুক , একটি ইঙ্গিত জন্য ধন্যবাদ

আর একটি সহজ সমাধান হ'ল আপনি যে এইচটিএমএল বৈশিষ্ট্যটি অনুসন্ধান করছেন তার অ্যাক্সেস করা []

এখানে একটি উদাহরণ:

let(:action_items) { page.find('div.action_items') }

it "action items displayed as buttons" do
  action_items.all(:css, 'a').each do |ai|
    expect(ai[:class]).to match(/btn/)
  end
end

0

আরএসপেক 3 এর সিনট্যাক্স ব্যবহার করে আমি এটি এটি করেছি:

expect(page).not_to have_selector(:link_or_button, 'Click here')

0

সহজভাবে আপনি page.has_css?পদ্ধতি ব্যবহার করতে পারেন

page.has_css?('.class_name') 

trueউপাদান উপস্থিত থাকলে এটি ফিরে আসবে ।

বৈধতার ভিত্তিতে কিছু পদক্ষেপ করুন।

page.has_css?('.class_name') do
  #some code
end

0

দস্তাবেজ অনুসারে আপনি [বৈশিষ্ট্য] অ্যাক্সেসর সিনট্যাক্স ব্যবহার করতে পারেন:

find('#selector')['class'] => "form-control text optional disabled"

অক্ষমদের জন্য, আপনি এটিও করতে পারেন:

expect(find('#selector').disabled?).to be(true)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.