मैं रूबी ऑन रेल्स विद ककड़ी और कैपीबारा का उपयोग कर रहा हूं।
मैं एक साधारण पुष्टिकरण कमांड ("क्या आप निश्चित हैं?") परीक्षण के बारे में कैसे जाएंगे?
इसके अलावा, मुझे इस मुद्दे पर और दस्तावेज कहां मिल सकते हैं?
मैं रूबी ऑन रेल्स विद ककड़ी और कैपीबारा का उपयोग कर रहा हूं।
मैं एक साधारण पुष्टिकरण कमांड ("क्या आप निश्चित हैं?") परीक्षण के बारे में कैसे जाएंगे?
इसके अलावा, मुझे इस मुद्दे पर और दस्तावेज कहां मिल सकते हैं?
जवाबों:
ऐसा लगता है कि Capybara में ऐसा करने का कोई तरीका नहीं है, दुर्भाग्य से। लेकिन अगर आप सेलेनियम ड्राइवर (और शायद जावास्क्रिप्ट का समर्थन करने वाले अन्य ड्राइवर) के साथ अपने परीक्षण चला रहे हैं, तो आप इसे हैक कर सकते हैं। पुष्टि डायलॉग लाने वाली कार्रवाई करने से ठीक पहले, confirm
हमेशा सही लौटने की विधि को ओवरराइड करें । इस तरह संवाद कभी प्रदर्शित नहीं होगा, और आपके परीक्षण जारी रह सकते हैं जैसे कि उपयोगकर्ता ने ओके बटन दबाया था। यदि आप रिवर्स का अनुकरण करना चाहते हैं, तो इसे गलत तरीके से बदलने के लिए।
page.evaluate_script('window.confirm = function() { return true; }')
page.click('Remove')
सेलेनियम ड्राइवर अब इसका समर्थन करता है
Capybara से आप इसे इस तरह एक्सेस करेंगे:
page.driver.browser.switch_to.alert.accept
या
page.driver.browser.switch_to.alert.dismiss
या
page.driver.browser.switch_to.alert.text
page.driver.browser
डेरेक के उत्तर में उपस्थिति पर ध्यान दें
यदि आप विशेष रूप से प्रदर्शित किए जा रहे संदेश का परीक्षण करना चाहते हैं, तो ऐसा करने के लिए एक विशेष रूप से हैक करने का तरीका है। मैं इसे सुंदर कोड के रूप में समर्थन नहीं करता, लेकिन इससे काम हो जाता है। अगर आपको jQuery नहीं चाहिए तो आपको http://plugins.jquery.com/node/1386/release लोड करना होगा , या इसे कुकीज में बदलना होगा।
इस तरह की कहानी का उपयोग करें:
Given I am on the menu page for the current booking
And a confirmation box saying "The menu is £3.50 over budget. Click Ok to confirm anyway, or Cancel if you want to make changes." should pop up
And I want to click "Ok"
When I press "Confirm menu"
Then the confirmation box should have been displayed
और ये कदम
Given /^a confirmation box saying "([^"]*)" should pop up$/ do |message|
@expected_message = message
end
Given /^I want to click "([^"]*)"$/ do |option|
retval = (option == "Ok") ? "true" : "false"
page.evaluate_script("window.confirm = function (msg) {
$.cookie('confirm_message', msg)
return #{retval}
}")
end
Then /^the confirmation box should have been displayed$/ do
page.evaluate_script("$.cookie('confirm_message')").should_not be_nil
page.evaluate_script("$.cookie('confirm_message')").should eq(@expected_message)
page.evaluate_script("$.cookie('confirm_message', null)")
end
कैपिबारा के वर्तमान रिलीज के लिए इसे अपडेट करना। अधिकांश Capybara ड्राइवर आज modal API का समर्थन करते हैं। एक पुष्टि मोडल को स्वीकार करने के लिए आप क्या करेंगे
accept_confirm do # dismiss_confirm if not accepting
click_link 'delete' # whatever action triggers the modal to appear
end
इसे ककड़ी में कुछ इस तरह से इस्तेमाल किया जा सकता है
When /^(?:|I )press "([^"]*)" and confirm "([^"]*)"$/ do |button, msg|
accept_confirm msg do
click_button(button)
end
end
जो नामित बटन पर क्लिक करेगा और फिर टेक्स्ट मिलान संदेश के साथ एक पुष्टिकरण बॉक्स स्वीकार करेगा
Capybara-वेबकिट चालक इस रूप में अच्छी तरह समर्थन करता है।
Scenario: Illustrate an example has dialog confirm with text
#
When I confirm the browser dialog with tile "Are you sure?"
#
=====================================================================
my step definition here:
And(/^I confirm the browser dialog with title "([^"]*)"$/) do |title|
if page.driver.class == Capybara::Selenium::Driver
page.driver.browser.switch_to.alert.text.should eq(title)
page.driver.browser.switch_to.alert.accept
elsif page.driver.class == Capybara::Webkit::Driver
sleep 1 # prevent test from failing by waiting for popup
page.driver.browser.confirm_messages.should eq(title)
page.driver.browser.accept_js_confirms
else
raise "Unsupported driver"
end
end
प्रिकेल सेलेनियम और वेबकिट में पॉपअप के साथ काम करने के लिए कुछ आसान सुविधा तरीके जोड़ता है
इस जिस्ट में किसी भी Capybara ड्राइवर के साथ Rails 2 और 3 में JS पुष्टि संवाद का परीक्षण करने के चरण हैं।
यह पिछले उत्तर का एक अनुकूलन है, लेकिन jQuery कुकी प्लगइन की आवश्यकता नहीं है।
उपर्युक्त उत्तरों को बिना किसी भाग्य के प्रयास किया। अंत में यह मेरे लिए काम किया:
@browser.alert.ok