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
page.driver.browser
데릭의 대답
표시되는 메시지를 구체적으로 테스트하려면 여기에 특히 해키 방법이 있습니다. 나는 그것을 아름다운 코드로지지하지는 않지만 작업을 완료합니다. 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