prompt modal response should aloow qoutes, etc
This commit is contained in:
parent
5fbfe95370
commit
8cf16bc129
|
@ -36,25 +36,8 @@ class Capybara::Selenium::Driver < Capybara::Driver::Base
|
|||
end
|
||||
|
||||
def initialize(app, options={})
|
||||
load_selenium
|
||||
@session = nil
|
||||
begin
|
||||
require 'selenium-webdriver'
|
||||
# Fix for selenium-webdriver 3.4.0 which misnamed these
|
||||
if !defined?(::Selenium::WebDriver::Error::ElementNotInteractableError)
|
||||
::Selenium::WebDriver::Error.const_set('ElementNotInteractableError', Class.new(::Selenium::WebDriver::Error::WebDriverError))
|
||||
end
|
||||
if !defined?(::Selenium::WebDriver::Error::ElementClickInterceptedError)
|
||||
::Selenium::WebDriver::Error.const_set('ElementClickInterceptedError', Class.new(::Selenium::WebDriver::Error::WebDriverError))
|
||||
end
|
||||
rescue LoadError => e
|
||||
if e.message =~ /selenium-webdriver/
|
||||
raise LoadError, "Capybara's selenium driver is unable to load `selenium-webdriver`, please install the gem and add `gem 'selenium-webdriver'` to your Gemfile if you are using bundler."
|
||||
else
|
||||
raise e
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@app = app
|
||||
@browser = nil
|
||||
@exit_status = nil
|
||||
|
@ -375,6 +358,16 @@ class Capybara::Selenium::Driver < Capybara::Driver::Base
|
|||
end
|
||||
|
||||
def insert_modal_handlers(accept, response_text)
|
||||
prompt_response = if accept
|
||||
if response_text.nil?
|
||||
"default_text"
|
||||
else
|
||||
"'#{response_text.gsub("\\", "\\\\\\").gsub("'", "\\\\'")}'"
|
||||
end
|
||||
else
|
||||
'null'
|
||||
end
|
||||
|
||||
script = <<-JS
|
||||
if (typeof window.capybara === 'undefined') {
|
||||
window.capybara = {
|
||||
|
@ -412,7 +405,7 @@ class Capybara::Selenium::Driver < Capybara::Driver::Base
|
|||
}
|
||||
window.prompt = function(str = "", default_text = "") {
|
||||
window.capybara.handler_called(modal_handler, str.toString());
|
||||
return #{accept ? (response_text.nil? ? "default_text" : "'#{response_text}'") : 'null'};
|
||||
return #{prompt_response};
|
||||
}
|
||||
JS
|
||||
execute_script script
|
||||
|
@ -497,4 +490,23 @@ class Capybara::Selenium::Driver < Capybara::Driver::Base
|
|||
arg
|
||||
end
|
||||
end
|
||||
|
||||
def load_selenium
|
||||
begin
|
||||
require 'selenium-webdriver'
|
||||
# Fix for selenium-webdriver 3.4.0 which misnamed these
|
||||
if !defined?(::Selenium::WebDriver::Error::ElementNotInteractableError)
|
||||
::Selenium::WebDriver::Error.const_set('ElementNotInteractableError', Class.new(::Selenium::WebDriver::Error::WebDriverError))
|
||||
end
|
||||
if !defined?(::Selenium::WebDriver::Error::ElementClickInterceptedError)
|
||||
::Selenium::WebDriver::Error.const_set('ElementClickInterceptedError', Class.new(::Selenium::WebDriver::Error::WebDriverError))
|
||||
end
|
||||
rescue LoadError => e
|
||||
if e.message =~ /selenium-webdriver/
|
||||
raise LoadError, "Capybara's selenium driver is unable to load `selenium-webdriver`, please install the gem and add `gem 'selenium-webdriver'` to your Gemfile if you are using bundler."
|
||||
else
|
||||
raise e
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -40,13 +40,20 @@ Capybara::SpecHelper.spec '#accept_prompt', requires: [:modals] do
|
|||
end
|
||||
|
||||
it "should accept the prompt with a blank response when there is a default" do
|
||||
pending "Geckodriver doesn't set a blank response currently" if @session.respond_to?(:mode) && @session.mode.to_s == "selenium_marionette"
|
||||
pending "Geckodriver doesn't set a blank response currently" if marionette?(@session)
|
||||
@session.accept_prompt with: '' do
|
||||
@session.click_link('Open defaulted prompt')
|
||||
end
|
||||
expect(@session).to have_xpath("//a[@id='open-prompt-with-default' and @response='']")
|
||||
end
|
||||
|
||||
it "should allow special characters in the reponse" do
|
||||
@session.accept_prompt with: '\'the\' \b "response"' do
|
||||
@session.click_link('Open prompt')
|
||||
end
|
||||
expect(@session).to have_xpath(%{//a[@id='open-prompt' and @response=concat("'the' ", '\\b "response"')]})
|
||||
end
|
||||
|
||||
it "should accept the prompt if the message matches" do
|
||||
@session.accept_prompt 'Prompt opened', with: 'matched' do
|
||||
@session.click_link('Open prompt')
|
||||
|
@ -62,7 +69,6 @@ Capybara::SpecHelper.spec '#accept_prompt', requires: [:modals] do
|
|||
end.to raise_error(Capybara::ModalNotFound)
|
||||
end
|
||||
|
||||
|
||||
it "should return the message presented" do
|
||||
message = @session.accept_prompt with: 'the response' do
|
||||
@session.click_link('Open prompt')
|
||||
|
|
Loading…
Reference in New Issue