मैं स्वीकृति परीक्षण के लिए RSpec2 और Capybara का उपयोग कर रहा हूं।
मैं यह दावा करना चाहता हूं कि कैपिबारा में लिंक अक्षम है या नहीं। मैं यह कैसे कर सकता हूँ?
जवाबों:
आप लिंक को कैसे अक्षम कर रहे हैं? क्या यह एक वर्ग है जिसे आप जोड़ रहे हैं? एक विशेषता?
# 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 चयनकर्ता गलत हो सकते हैं। मैं अक्सर xpath का उपयोग नहीं करता!
एक और सरल उपाय यह है कि आप जिस HTML विशेषता की तलाश कर रहे हैं, उस तक पहुँचने के लिए []
:
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
स्वचालित रूप से अतुल्यकालिक अनुरोधों को पूरा करने के लिए इंतजार करने की कोशिश करेंगे, लेकिन यह कुछ मामलों में काम नहीं कर सकता है:
यहां एक समाधान है यदि आप उन तत्वों पर जोर दे रहे हैं जो अतुल्यकालिक रूप से अपडेट किए जाते हैं:
find('a#my_element[href]')
, क्या इस विशेषता के मूल्य को प्राप्त करना संभव होगा? भावों के साथ प्रयास find('a#my_element[href]').value
करने पर भी काम नहीं लगता है :(
find('a#my_element[href]').text
या find('a#my_element[href]').native
। मुझे बताएं कि क्या उनमें से कोई भी आपको अपेक्षित परिणाम देता है।
सही xpath का पता लगाना थोड़ा गड़बड़ था, यहाँ सही है,
capybara का उपयोग 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")
वर्ग के विकल्प को नजरअंदाज कर दिया जाएगा।
मैं उपयोग करने की सलाह देता हूं have_link
और find_link(name)[:disabled]
दो अलग-अलग सिद्धांतों में। जबकि दूसरा दावा करना अकेले सरल है, यह गायब लिंक के बारे में त्रुटि संदेश देता है जो अच्छे दिखते हैं, जिससे आपके परीक्षा परिणाम पढ़ने में आसान हो जाते हैं।
expect(page).to have_link "Example"
expect(find_link("Example")[:disabled]).to be false
ध्यान दें कि "Example"
लिंक के नाम या आईडी को बदला जा सकता है।
page.should have_link('It will work this way!', {:href => '/clowns?ordered_by=clumsyness', :class => "smile"})
has_link को विकल्पों में से एक हैश की उम्मीद है जो खाली है यदि आप कोई भी प्रदान नहीं करते हैं। आप किसी भी विशेषता को निर्दिष्ट कर सकते हैं जो लिंक में होनी चाहिए - बस यह सुनिश्चित करें कि आप एक हैश में सभी विकल्प पास करते हैं।
उम्मीद है की यह मदद करेगा
पुनश्च: डेटा-विधि जैसी विशेषताओं के लिए आपको एक स्ट्रिंग के रूप में विशेषता नाम को पास करना होगा क्योंकि हाइफ़न प्रतीक को तोड़ता है।
class:
मान्य नहीं है
जब भी संभव हो, आपको कैपिबारा प्रदान की गई रैपर का उपयोग करने की कोशिश करनी चाहिए जो ड्राइवरों में लगातार काम करेगी।
के विशेष मामले के लिए disabled
, 2.1 में एक रैपर पेश किया गया था: https://github.com/jnicklas/capybara/blob/fc56557a5463b944207f2efa401faabb49d9ef/History.md#version-210
यदि आप इसका उपयोग करते हैं, तो आपको रैकटेस्ट और पोल्टरजिस्ट दोनों पर समझदार परिणाम मिलेंगे:
HTML:
<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
ध्यान दें कि सीएसएस चयनकर्ताओं के बजाय इसका उपयोग करके, जावास्क्रिप्ट परीक्षण किसी भी परिवर्तन के बिना काम करेगा यदि आप एक जेएस सक्षम चालक का उपयोग करना शुरू करते हैं।
Runnable परीक्षण फ़ाइल यहाँ ।
Bowsersenior , एक संकेत के लिए धन्यवाद
एक और सरल उपाय यह है कि आप जिस HTML विशेषता की तलाश कर रहे हैं, उस तक पहुँचने के लिए []
यहाँ एक उदाहरण है:
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
Rspec3 के सिंटैक्स का उपयोग करके मैंने इसे इस तरह किया:
expect(page).not_to have_selector(:link_or_button, 'Click here')
डॉक्स के अनुसार आप [विशेषता] एक्सेसर सिंटैक्स का उपयोग कर सकते हैं:
find('#selector')['class'] => "form-control text optional disabled"
विकलांगों के लिए, आप यह भी कर सकते हैं:
expect(find('#selector').disabled?).to be(true)