[automated-tests] Cucumber로 확인 대화 상자를 테스트하는 방법은 무엇입니까?

Cucumber 및 Capybara와 함께 Ruby on Rails를 사용하고 있습니다.

간단한 확인 명령 ( “확실합니까?”)을 테스트하려면 어떻게해야합니까?

또한이 문제에 대한 추가 문서는 어디에서 찾을 수 있습니까?



답변

안타깝게도 카피 바라에서는 할 방법이없는 것 같습니다. 그러나 Selenium 드라이버 (및 JavaScript를 지원하는 다른 드라이버)로 테스트를 실행하는 경우 해킹 할 수 있습니다. 확인 대화 상자를 표시하는 작업을 수행하기 직전에 confirm메서드를 재정 의하여 항상 true를 반환합니다. 이렇게하면 대화 상자가 표시되지 않으며 사용자가 확인 버튼을 누른 것처럼 테스트를 계속할 수 있습니다. 반대로 시뮬레이션하려면 false를 반환하도록 변경하면됩니다.

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


답변

다음 두 웹 단계를 구현했습니다 /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


답변

표시되는 메시지를 구체적으로 테스트하려면 여기에 특히 해키 방법이 있습니다. 나는 그것을 아름다운 코드로지지하지는 않지만 작업을 완료합니다. http://plugins.jquery.com/node/1386/release 를로드 하거나 jQuery를 원하지 않는 경우 기본적으로 쿠키를 수행하도록 변경해야합니다.

이 종류의 이야기를 사용하십시오.

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의 현재 릴리스를 위해 이것을 업데이트합니다. 오늘날 대부분의 Capybara 드라이버는 모달 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