add :download filter to :link selector
This commit is contained in:
parent
fc2a0ffd20
commit
047a3feb73
|
@ -112,6 +112,15 @@ Capybara.add_selector(:link) do
|
|||
href.is_a?(Regexp) ? node[:href].match(href) : true
|
||||
end
|
||||
|
||||
expression_filter(:download, valid_values: [true, false, String]) do |expr, download|
|
||||
mod = case download
|
||||
when true then XPath.attr(:download)
|
||||
when false then !XPath.attr(:download)
|
||||
when String then XPath.attr(:download) == download
|
||||
end
|
||||
expr[mod]
|
||||
end
|
||||
|
||||
describe do |**options|
|
||||
desc = +""
|
||||
desc << " with href #{options[:href].inspect}" if options[:href]
|
||||
|
|
|
@ -49,7 +49,8 @@ module Capybara
|
|||
end
|
||||
|
||||
def valid_value?(value)
|
||||
!@options.key?(:valid_values) || Array(@options[:valid_values]).include?(value)
|
||||
return true unless @options.key?(:valid_values)
|
||||
Array(@options[:valid_values]).any? { |valid| valid === value } # rubocop:disable Style/CaseEquality
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -49,4 +49,22 @@ Capybara::SpecHelper.spec '#find_link' do
|
|||
expect(@session.find_link(href: '#anchor').text).to eq "Normal Anchor"
|
||||
end
|
||||
end
|
||||
|
||||
context "download filter" do
|
||||
it "finds a download link" do
|
||||
expect(@session.find_link("Download Me", download: true).text).to eq "Download Me"
|
||||
end
|
||||
|
||||
it "doesn't find a download link if download is false" do
|
||||
expect { @session.find_link("Download Me", download: false) }.to raise_error Capybara::ElementNotFound
|
||||
end
|
||||
|
||||
it "finds a renaming download link" do
|
||||
expect(@session.find_link(download: "other.csv").text).to eq "Download Other"
|
||||
end
|
||||
|
||||
it "raises if passed an invalid value" do
|
||||
expect { @session.find_link(download: 37) }.to raise_error ArgumentError
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -175,3 +175,4 @@ banana</textarea>
|
|||
</div>
|
||||
|
||||
<a href="/download.csv" download>Download Me</a>
|
||||
<a href="/download.csv" download="other.csv">Download Other</a>
|
||||
|
|
|
@ -15,9 +15,7 @@ Capybara.register_driver :selenium_chrome do |app|
|
|||
driver = Capybara::Selenium::Driver.new(app, browser: :chrome)
|
||||
# TODO: Fix this when selenium with `download_path =` support is released
|
||||
bridge = driver.browser.send(:bridge)
|
||||
params = { 'cmd' =>'Page.setDownloadBehavior',
|
||||
"params" => {"behavior" => 'allow', 'downloadPath' => Capybara.save_path }
|
||||
}
|
||||
params = { cmd: 'Page.setDownloadBehavior', params: { behavior: 'allow', downloadPath: Capybara.save_path } }
|
||||
command = +'/session/:session_id/chromium/send_command'
|
||||
command[':session_id'] = bridge.session_id
|
||||
bridge.http.call(:post, command, params)
|
||||
|
@ -33,9 +31,7 @@ Capybara.register_driver :selenium_chrome_headless do |app|
|
|||
|
||||
# TODO: Fix this when selenium with `download_path =` support is released
|
||||
bridge = driver.browser.send(:bridge)
|
||||
params = { 'cmd' =>'Page.setDownloadBehavior',
|
||||
"params" => {"behavior" => 'allow', 'downloadPath' => Capybara.save_path }
|
||||
}
|
||||
params = { cmd: 'Page.setDownloadBehavior', params: { behavior: 'allow', downloadPath: Capybara.save_path } }
|
||||
command = +'/session/:session_id/chromium/send_command'
|
||||
command[':session_id'] = bridge.session_id
|
||||
bridge.http.call(:post, command, params)
|
||||
|
@ -43,7 +39,6 @@ Capybara.register_driver :selenium_chrome_headless do |app|
|
|||
driver
|
||||
end
|
||||
|
||||
|
||||
Capybara.register_driver :selenium_chrome_clear_storage do |app|
|
||||
chrome_options = {
|
||||
browser: :chrome,
|
||||
|
|
Loading…
Reference in New Issue