سؤال

أنا باستخدام روبي على القضبان مع الخيار و كابيبارا.

كيف يمكنني اختبار بسيط تأكيد الأوامر ("هل أنت متأكد؟")?

أيضا, أين يمكن أن أجد المزيد من الوثائق على هذه المسألة ؟

هل كانت مفيدة؟

المحلول

ويبدو وكأنه ليس هناك طريقة للقيام بذلك في كابيبارا، للأسف. ولكن إذا كنت تقوم بتشغيل الاختبارات الخاصة بك مع سائق السيلينيوم (والسائقين ربما الأخرى التي تدعم جافا سكريبت)، يمكنك المأجور. قبل تنفيذ الإجراء من شأنه أن طرح الحوار تأكيد، تجاوز أسلوب 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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top