كيفية اختبار تأكيد الحوار مع الخيار ؟
-
20-09-2019 - |
سؤال
أنا باستخدام روبي على القضبان مع الخيار و كابيبارا.
كيف يمكنني اختبار بسيط تأكيد الأوامر ("هل أنت متأكد؟")?
أيضا, أين يمكن أن أجد المزيد من الوثائق على هذه المسألة ؟
المحلول
ويبدو وكأنه ليس هناك طريقة للقيام بذلك في كابيبارا، للأسف. ولكن إذا كنت تقوم بتشغيل الاختبارات الخاصة بك مع سائق السيلينيوم (والسائقين ربما الأخرى التي تدعم جافا سكريبت)، يمكنك المأجور. قبل تنفيذ الإجراء من شأنه أن طرح الحوار تأكيد، تجاوز أسلوب confirm
للعودة صحيحا دائما. وبهذه الطريقة لن يتم عرض الحوار، ويمكن أن تستمر الاختبارات الخاصة بك كما لو أن المستخدم قد ضغط على زر موافق. إذا كنت ترغب في محاكاة العكس، ببساطة تغييره إلى عودة كاذبة.
page.evaluate_script('window.confirm = function() { return true; }')
page.click('Remove')
نصائح أخرى
ومن كابيبارا سوف يمكنك الوصول إليه مثل هذا:
page.driver.browser.switch_to.alert.accept
أو
page.driver.browser.switch_to.alert.dismiss
أو
page.driver.browser.switch_to.alert.text
ولقد نفذت هذه الخطوات على شبكة الإنترنت اثنين في /features/step_definitions/web_steps.rb
:
When /^I confirm popup$/ do
page.driver.browser.switch_to.alert.accept
end
When /^I dismiss popup$/ do
page.driver.browser.switch_to.alert.dismiss
end
إذا كنت تريد على وجه التحديد اختبار الرسالة التي يتم عرضها, وهنا لا سيما hacky طريقة للقيام بذلك.أنا لا أؤيد أنها جميلة رمز ، ولكن فإنه يحصل على هذه المهمة.سوف تحتاج إلى تحميل 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
وتحديث هذا لالإصدارات الحالية من كابيبارا. معظم السائقين كابيبارا اليوم دعم 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
والتي سوف انقر على الزر المسمى ومن ثم قبول مربع تأكيد مع مطابقة النص جي اس
كابيبارا-بكت يدعم هذا أيضا.
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
الشوكة يضيف بعض وسائل الراحة يدوية للعمل مع بالنوافذ في السيلينيوم وبكت
هذا جوهر لديها خطوات لاختبار الحوار تأكيد JS في القضبان 2 و 3 مع أي سائق كابيبارا.
وانها للتكيف من الإجابة السابقة، ولكن لا يحتاج البرنامج المساعد مسج كوكي.
وحاول الإجابات أعلاه مع أي حظ. في نهاية هذا العمل بالنسبة لي:
@browser.alert.ok