capybara 3.13.2 → 3.40.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.yardopts +1 -0
- data/History.md +587 -16
- data/README.md +240 -90
- data/lib/capybara/config.rb +24 -11
- data/lib/capybara/cucumber.rb +1 -1
- data/lib/capybara/driver/base.rb +8 -0
- data/lib/capybara/driver/node.rb +20 -4
- data/lib/capybara/dsl.rb +5 -3
- data/lib/capybara/helpers.rb +25 -4
- data/lib/capybara/minitest/spec.rb +174 -90
- data/lib/capybara/minitest.rb +256 -142
- data/lib/capybara/node/actions.rb +123 -77
- data/lib/capybara/node/base.rb +20 -12
- data/lib/capybara/node/document.rb +2 -2
- data/lib/capybara/node/document_matchers.rb +3 -3
- data/lib/capybara/node/element.rb +223 -117
- data/lib/capybara/node/finders.rb +81 -71
- data/lib/capybara/node/matchers.rb +271 -134
- data/lib/capybara/node/simple.rb +18 -5
- data/lib/capybara/node/whitespace_normalizer.rb +81 -0
- data/lib/capybara/queries/active_element_query.rb +18 -0
- data/lib/capybara/queries/ancestor_query.rb +8 -9
- data/lib/capybara/queries/base_query.rb +3 -2
- data/lib/capybara/queries/current_path_query.rb +15 -5
- data/lib/capybara/queries/selector_query.rb +364 -54
- data/lib/capybara/queries/sibling_query.rb +8 -6
- data/lib/capybara/queries/style_query.rb +2 -2
- data/lib/capybara/queries/text_query.rb +13 -1
- data/lib/capybara/queries/title_query.rb +1 -1
- data/lib/capybara/rack_test/browser.rb +76 -11
- data/lib/capybara/rack_test/driver.rb +10 -5
- data/lib/capybara/rack_test/errors.rb +6 -0
- data/lib/capybara/rack_test/form.rb +31 -9
- data/lib/capybara/rack_test/node.rb +74 -23
- data/lib/capybara/registration_container.rb +41 -0
- data/lib/capybara/registrations/drivers.rb +42 -0
- data/lib/capybara/registrations/patches/puma_ssl.rb +29 -0
- data/lib/capybara/registrations/servers.rb +66 -0
- data/lib/capybara/result.rb +44 -20
- data/lib/capybara/rspec/matcher_proxies.rb +13 -11
- data/lib/capybara/rspec/matchers/base.rb +31 -16
- data/lib/capybara/rspec/matchers/compound.rb +1 -1
- data/lib/capybara/rspec/matchers/count_sugar.rb +37 -0
- data/lib/capybara/rspec/matchers/have_ancestor.rb +28 -0
- data/lib/capybara/rspec/matchers/have_current_path.rb +2 -2
- data/lib/capybara/rspec/matchers/have_selector.rb +21 -21
- data/lib/capybara/rspec/matchers/have_sibling.rb +27 -0
- data/lib/capybara/rspec/matchers/have_text.rb +4 -4
- data/lib/capybara/rspec/matchers/have_title.rb +2 -2
- data/lib/capybara/rspec/matchers/match_selector.rb +3 -3
- data/lib/capybara/rspec/matchers/match_style.rb +7 -2
- data/lib/capybara/rspec/matchers/spatial_sugar.rb +39 -0
- data/lib/capybara/rspec/matchers.rb +111 -68
- data/lib/capybara/rspec.rb +2 -0
- data/lib/capybara/selector/builders/css_builder.rb +11 -7
- data/lib/capybara/selector/builders/xpath_builder.rb +5 -3
- data/lib/capybara/selector/css.rb +11 -9
- data/lib/capybara/selector/definition/button.rb +68 -0
- data/lib/capybara/selector/definition/checkbox.rb +26 -0
- data/lib/capybara/selector/definition/css.rb +10 -0
- data/lib/capybara/selector/definition/datalist_input.rb +35 -0
- data/lib/capybara/selector/definition/datalist_option.rb +25 -0
- data/lib/capybara/selector/definition/element.rb +28 -0
- data/lib/capybara/selector/definition/field.rb +40 -0
- data/lib/capybara/selector/definition/fieldset.rb +14 -0
- data/lib/capybara/selector/definition/file_field.rb +13 -0
- data/lib/capybara/selector/definition/fillable_field.rb +33 -0
- data/lib/capybara/selector/definition/frame.rb +17 -0
- data/lib/capybara/selector/definition/id.rb +6 -0
- data/lib/capybara/selector/definition/label.rb +62 -0
- data/lib/capybara/selector/definition/link.rb +55 -0
- data/lib/capybara/selector/definition/link_or_button.rb +16 -0
- data/lib/capybara/selector/definition/option.rb +27 -0
- data/lib/capybara/selector/definition/radio_button.rb +27 -0
- data/lib/capybara/selector/definition/select.rb +81 -0
- data/lib/capybara/selector/definition/table.rb +109 -0
- data/lib/capybara/selector/definition/table_row.rb +21 -0
- data/lib/capybara/selector/definition/xpath.rb +5 -0
- data/lib/capybara/selector/definition.rb +280 -0
- data/lib/capybara/selector/filter_set.rb +19 -18
- data/lib/capybara/selector/filters/base.rb +11 -2
- data/lib/capybara/selector/filters/locator_filter.rb +13 -3
- data/lib/capybara/selector/regexp_disassembler.rb +11 -7
- data/lib/capybara/selector/selector.rb +50 -440
- data/lib/capybara/selector/xpath_extensions.rb +17 -0
- data/lib/capybara/selector.rb +473 -482
- data/lib/capybara/selenium/atoms/getAttribute.min.js +1 -0
- data/lib/capybara/selenium/atoms/isDisplayed.min.js +1 -0
- data/lib/capybara/selenium/atoms/src/getAttribute.js +161 -0
- data/lib/capybara/selenium/atoms/src/isDisplayed.js +454 -0
- data/lib/capybara/selenium/driver.rb +174 -62
- data/lib/capybara/selenium/driver_specializations/chrome_driver.rb +74 -18
- data/lib/capybara/selenium/driver_specializations/edge_driver.rb +128 -0
- data/lib/capybara/selenium/driver_specializations/firefox_driver.rb +37 -3
- data/lib/capybara/selenium/driver_specializations/internet_explorer_driver.rb +14 -1
- data/lib/capybara/selenium/driver_specializations/safari_driver.rb +24 -0
- data/lib/capybara/selenium/extensions/file_input_click_emulation.rb +34 -0
- data/lib/capybara/selenium/extensions/find.rb +68 -45
- data/lib/capybara/selenium/extensions/html5_drag.rb +192 -22
- data/lib/capybara/selenium/extensions/modifier_keys_stack.rb +28 -0
- data/lib/capybara/selenium/extensions/scroll.rb +8 -10
- data/lib/capybara/selenium/node.rb +268 -72
- data/lib/capybara/selenium/nodes/chrome_node.rb +105 -9
- data/lib/capybara/selenium/nodes/edge_node.rb +110 -0
- data/lib/capybara/selenium/nodes/firefox_node.rb +51 -61
- data/lib/capybara/selenium/nodes/ie_node.rb +22 -0
- data/lib/capybara/selenium/nodes/safari_node.rb +118 -0
- data/lib/capybara/selenium/patches/atoms.rb +18 -0
- data/lib/capybara/selenium/patches/is_displayed.rb +16 -0
- data/lib/capybara/selenium/patches/logs.rb +45 -0
- data/lib/capybara/selenium/patches/pause_duration_fix.rb +1 -1
- data/lib/capybara/selenium/patches/persistent_client.rb +20 -0
- data/lib/capybara/server/animation_disabler.rb +43 -21
- data/lib/capybara/server/checker.rb +6 -2
- data/lib/capybara/server/middleware.rb +25 -13
- data/lib/capybara/server.rb +20 -4
- data/lib/capybara/session/config.rb +15 -11
- data/lib/capybara/session/matchers.rb +11 -11
- data/lib/capybara/session.rb +162 -131
- data/lib/capybara/spec/public/offset.js +6 -0
- data/lib/capybara/spec/public/test.js +105 -6
- data/lib/capybara/spec/session/accept_alert_spec.rb +1 -1
- data/lib/capybara/spec/session/active_element_spec.rb +31 -0
- data/lib/capybara/spec/session/all_spec.rb +89 -15
- data/lib/capybara/spec/session/ancestor_spec.rb +5 -0
- data/lib/capybara/spec/session/assert_current_path_spec.rb +5 -2
- data/lib/capybara/spec/session/assert_text_spec.rb +26 -22
- data/lib/capybara/spec/session/attach_file_spec.rb +64 -31
- data/lib/capybara/spec/session/check_spec.rb +26 -4
- data/lib/capybara/spec/session/choose_spec.rb +14 -2
- data/lib/capybara/spec/session/click_button_spec.rb +109 -61
- data/lib/capybara/spec/session/click_link_or_button_spec.rb +9 -0
- data/lib/capybara/spec/session/click_link_spec.rb +23 -1
- data/lib/capybara/spec/session/current_scope_spec.rb +1 -1
- data/lib/capybara/spec/session/current_url_spec.rb +11 -1
- data/lib/capybara/spec/session/element/matches_selector_spec.rb +40 -39
- data/lib/capybara/spec/session/evaluate_script_spec.rb +12 -0
- data/lib/capybara/spec/session/fill_in_spec.rb +46 -5
- data/lib/capybara/spec/session/find_link_spec.rb +10 -0
- data/lib/capybara/spec/session/find_spec.rb +80 -7
- data/lib/capybara/spec/session/first_spec.rb +2 -2
- data/lib/capybara/spec/session/frame/switch_to_frame_spec.rb +14 -1
- data/lib/capybara/spec/session/frame/within_frame_spec.rb +14 -1
- data/lib/capybara/spec/session/has_all_selectors_spec.rb +5 -5
- data/lib/capybara/spec/session/has_ancestor_spec.rb +46 -0
- data/lib/capybara/spec/session/has_any_selectors_spec.rb +6 -2
- data/lib/capybara/spec/session/has_button_spec.rb +81 -0
- data/lib/capybara/spec/session/has_css_spec.rb +45 -8
- data/lib/capybara/spec/session/has_current_path_spec.rb +22 -7
- data/lib/capybara/spec/session/has_element_spec.rb +47 -0
- data/lib/capybara/spec/session/has_field_spec.rb +59 -1
- data/lib/capybara/spec/session/has_link_spec.rb +40 -0
- data/lib/capybara/spec/session/has_none_selectors_spec.rb +7 -7
- data/lib/capybara/spec/session/has_select_spec.rb +42 -8
- data/lib/capybara/spec/session/has_selector_spec.rb +19 -4
- data/lib/capybara/spec/session/has_sibling_spec.rb +50 -0
- data/lib/capybara/spec/session/has_table_spec.rb +177 -0
- data/lib/capybara/spec/session/has_text_spec.rb +31 -3
- data/lib/capybara/spec/session/html_spec.rb +1 -1
- data/lib/capybara/spec/session/matches_style_spec.rb +6 -4
- data/lib/capybara/spec/session/node_spec.rb +697 -23
- data/lib/capybara/spec/session/node_wrapper_spec.rb +1 -1
- data/lib/capybara/spec/session/refresh_spec.rb +2 -1
- data/lib/capybara/spec/session/reset_session_spec.rb +21 -7
- data/lib/capybara/spec/session/save_and_open_screenshot_spec.rb +2 -2
- data/lib/capybara/spec/session/save_page_spec.rb +4 -4
- data/lib/capybara/spec/session/save_screenshot_spec.rb +4 -4
- data/lib/capybara/spec/session/scroll_spec.rb +9 -7
- data/lib/capybara/spec/session/select_spec.rb +5 -10
- data/lib/capybara/spec/session/selectors_spec.rb +24 -3
- data/lib/capybara/spec/session/uncheck_spec.rb +3 -3
- data/lib/capybara/spec/session/unselect_spec.rb +1 -1
- data/lib/capybara/spec/session/visit_spec.rb +20 -0
- data/lib/capybara/spec/session/window/become_closed_spec.rb +20 -17
- data/lib/capybara/spec/session/window/switch_to_window_spec.rb +1 -1
- data/lib/capybara/spec/session/window/window_opened_by_spec.rb +1 -1
- data/lib/capybara/spec/session/window/window_spec.rb +54 -57
- data/lib/capybara/spec/session/window/windows_spec.rb +2 -2
- data/lib/capybara/spec/session/within_spec.rb +36 -0
- data/lib/capybara/spec/spec_helper.rb +30 -19
- data/lib/capybara/spec/test_app.rb +122 -34
- data/lib/capybara/spec/views/animated.erb +49 -0
- data/lib/capybara/spec/views/form.erb +86 -8
- data/lib/capybara/spec/views/frame_child.erb +3 -2
- data/lib/capybara/spec/views/frame_one.erb +2 -1
- data/lib/capybara/spec/views/frame_parent.erb +1 -1
- data/lib/capybara/spec/views/frame_two.erb +1 -1
- data/lib/capybara/spec/views/initial_alert.erb +2 -1
- data/lib/capybara/spec/views/layout.erb +10 -0
- data/lib/capybara/spec/views/obscured.erb +10 -10
- data/lib/capybara/spec/views/offset.erb +33 -0
- data/lib/capybara/spec/views/path.erb +2 -2
- data/lib/capybara/spec/views/popup_one.erb +1 -1
- data/lib/capybara/spec/views/popup_two.erb +1 -1
- data/lib/capybara/spec/views/react.erb +45 -0
- data/lib/capybara/spec/views/scroll.erb +2 -1
- data/lib/capybara/spec/views/spatial.erb +31 -0
- data/lib/capybara/spec/views/tables.erb +67 -0
- data/lib/capybara/spec/views/with_animation.erb +39 -4
- data/lib/capybara/spec/views/with_base_tag.erb +2 -2
- data/lib/capybara/spec/views/with_dragula.erb +24 -0
- data/lib/capybara/spec/views/with_fixed_header_footer.erb +2 -1
- data/lib/capybara/spec/views/with_hover.erb +3 -2
- data/lib/capybara/spec/views/with_hover1.erb +10 -0
- data/lib/capybara/spec/views/with_html.erb +34 -6
- data/lib/capybara/spec/views/with_jquery_animation.erb +24 -0
- data/lib/capybara/spec/views/with_js.erb +7 -4
- data/lib/capybara/spec/views/with_jstree.erb +26 -0
- data/lib/capybara/spec/views/with_namespace.erb +1 -0
- data/lib/capybara/spec/views/with_scope.erb +2 -2
- data/lib/capybara/spec/views/with_scope_other.erb +6 -0
- data/lib/capybara/spec/views/with_shadow.erb +31 -0
- data/lib/capybara/spec/views/with_slow_unload.erb +2 -1
- data/lib/capybara/spec/views/with_sortable_js.erb +21 -0
- data/lib/capybara/spec/views/with_unload_alert.erb +1 -0
- data/lib/capybara/spec/views/with_windows.erb +1 -1
- data/lib/capybara/spec/views/within_frames.erb +1 -1
- data/lib/capybara/version.rb +1 -1
- data/lib/capybara/window.rb +14 -18
- data/lib/capybara.rb +91 -126
- data/spec/basic_node_spec.rb +30 -16
- data/spec/capybara_spec.rb +40 -28
- data/spec/counter_spec.rb +35 -0
- data/spec/css_builder_spec.rb +3 -1
- data/spec/css_splitter_spec.rb +1 -1
- data/spec/dsl_spec.rb +33 -22
- data/spec/filter_set_spec.rb +5 -5
- data/spec/fixtures/selenium_driver_rspec_failure.rb +3 -3
- data/spec/fixtures/selenium_driver_rspec_success.rb +3 -3
- data/spec/minitest_spec.rb +24 -2
- data/spec/minitest_spec_spec.rb +60 -45
- data/spec/per_session_config_spec.rb +1 -1
- data/spec/rack_test_spec.rb +131 -98
- data/spec/regexp_dissassembler_spec.rb +53 -39
- data/spec/result_spec.rb +68 -66
- data/spec/rspec/features_spec.rb +9 -4
- data/spec/rspec/scenarios_spec.rb +6 -2
- data/spec/rspec/shared_spec_matchers.rb +137 -98
- data/spec/rspec_matchers_spec.rb +25 -0
- data/spec/rspec_spec.rb +23 -21
- data/spec/sauce_spec_chrome.rb +43 -0
- data/spec/selector_spec.rb +77 -21
- data/spec/selenium_spec_chrome.rb +141 -39
- data/spec/selenium_spec_chrome_remote.rb +32 -17
- data/spec/selenium_spec_edge.rb +36 -8
- data/spec/selenium_spec_firefox.rb +110 -68
- data/spec/selenium_spec_firefox_remote.rb +22 -15
- data/spec/selenium_spec_ie.rb +29 -22
- data/spec/selenium_spec_safari.rb +162 -0
- data/spec/server_spec.rb +153 -81
- data/spec/session_spec.rb +11 -4
- data/spec/shared_selenium_node.rb +79 -0
- data/spec/shared_selenium_session.rb +179 -74
- data/spec/spec_helper.rb +80 -5
- data/spec/whitespace_normalizer_spec.rb +54 -0
- data/spec/xpath_builder_spec.rb +3 -1
- metadata +218 -30
- data/lib/capybara/spec/session/source_spec.rb +0 -0
- data/lib/capybara/spec/views/with_title.erb +0 -5
@@ -3,6 +3,7 @@
|
|
3
3
|
require 'spec_helper'
|
4
4
|
require 'selenium-webdriver'
|
5
5
|
require 'shared_selenium_session'
|
6
|
+
require 'shared_selenium_node'
|
6
7
|
require 'rspec/shared_spec_matchers'
|
7
8
|
|
8
9
|
def selenium_host
|
@@ -20,8 +21,8 @@ def ensure_selenium_running!
|
|
20
21
|
rescue StandardError
|
21
22
|
if timer.expired?
|
22
23
|
raise 'Selenium is not running. ' \
|
23
|
-
|
24
|
-
|
24
|
+
"You can run a selenium server easily with: \n " \
|
25
|
+
'$ docker-compose up -d selenium_chrome'
|
25
26
|
else
|
26
27
|
puts 'Waiting for Selenium docker instance...'
|
27
28
|
sleep 1
|
@@ -31,18 +32,17 @@ def ensure_selenium_running!
|
|
31
32
|
end
|
32
33
|
|
33
34
|
def selenium_gte?(version)
|
34
|
-
defined?(Selenium::WebDriver::VERSION) && (Selenium::WebDriver::VERSION
|
35
|
+
defined?(Selenium::WebDriver::VERSION) && (Gem::Version.new(Selenium::WebDriver::VERSION) >= Gem::Version.new(version))
|
35
36
|
end
|
36
37
|
|
37
38
|
Capybara.register_driver :selenium_chrome_remote do |app|
|
38
39
|
ensure_selenium_running!
|
39
40
|
|
40
41
|
url = "http://#{selenium_host}:#{selenium_port}/wd/hub"
|
41
|
-
browser_options =
|
42
|
+
browser_options = Selenium::WebDriver::Chrome::Options.new
|
42
43
|
|
43
44
|
Capybara::Selenium::Driver.new app,
|
44
45
|
browser: :remote,
|
45
|
-
desired_capabilities: :chrome,
|
46
46
|
options: browser_options,
|
47
47
|
url: url
|
48
48
|
end
|
@@ -53,29 +53,44 @@ module TestSessions
|
|
53
53
|
Chrome = Capybara::Session.new(CHROME_REMOTE_DRIVER, TestApp)
|
54
54
|
end
|
55
55
|
|
56
|
-
TestSessions::Chrome.driver.browser.file_detector = lambda do |args|
|
57
|
-
# args => ["/path/to/file"]
|
58
|
-
str = args.first.to_s
|
59
|
-
str if File.exist?(str)
|
60
|
-
end
|
61
|
-
|
62
56
|
skipped_tests = %i[response_headers status_code trigger download]
|
63
57
|
|
64
58
|
Capybara::SpecHelper.run_specs TestSessions::Chrome, CHROME_REMOTE_DRIVER.to_s, capybara_skip: skipped_tests do |example|
|
65
59
|
case example.metadata[:full_description]
|
66
|
-
when
|
67
|
-
|
68
|
-
|
69
|
-
|
60
|
+
when /Capybara::Session selenium_chrome_remote node #shadow_root should get visible text/
|
61
|
+
pending "Selenium doesn't currently support getting visible text for shadow root elements"
|
62
|
+
when /Capybara::Session selenium_chrome_remote node #shadow_root/
|
63
|
+
skip 'Not supported with this chromedriver version' if chromedriver_lt?('96.0', @session)
|
70
64
|
end
|
71
65
|
end
|
72
66
|
|
73
67
|
RSpec.describe 'Capybara::Session with remote Chrome' do
|
74
68
|
include Capybara::SpecHelper
|
75
|
-
|
76
|
-
|
69
|
+
['Capybara::Session', 'Capybara::Node', Capybara::RSpecMatchers].each do |examples|
|
70
|
+
include_examples examples, TestSessions::Chrome, CHROME_REMOTE_DRIVER
|
71
|
+
end
|
77
72
|
|
78
73
|
it 'is considered to be chrome' do
|
79
74
|
expect(session.driver.browser.browser).to eq :chrome
|
80
75
|
end
|
76
|
+
|
77
|
+
describe 'log access' do
|
78
|
+
let(:logs) do
|
79
|
+
session.driver.browser.then do |chrome_driver|
|
80
|
+
chrome_driver.respond_to?(:logs) ? chrome_driver : chrome_driver.manage
|
81
|
+
end.logs
|
82
|
+
end
|
83
|
+
|
84
|
+
it 'does not error when getting log types' do
|
85
|
+
expect do
|
86
|
+
logs.available_types
|
87
|
+
end.not_to raise_error
|
88
|
+
end
|
89
|
+
|
90
|
+
it 'does not error when getting logs' do
|
91
|
+
expect do
|
92
|
+
logs.get(:browser)
|
93
|
+
end.not_to raise_error
|
94
|
+
end
|
95
|
+
end
|
81
96
|
end
|
data/spec/selenium_spec_edge.rb
CHANGED
@@ -3,30 +3,58 @@
|
|
3
3
|
require 'spec_helper'
|
4
4
|
require 'selenium-webdriver'
|
5
5
|
require 'shared_selenium_session'
|
6
|
+
require 'shared_selenium_node'
|
6
7
|
require 'rspec/shared_spec_matchers'
|
7
8
|
|
9
|
+
# unless ENV['CI']
|
10
|
+
# Selenium::WebDriver::Edge::Service.driver_path = '/usr/local/bin/msedgedriver'
|
11
|
+
# end
|
12
|
+
|
13
|
+
Selenium::WebDriver.logger.ignore(:selenium_manager)
|
14
|
+
|
15
|
+
if Selenium::WebDriver::Platform.mac?
|
16
|
+
Selenium::WebDriver::Edge.path = '/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge'
|
17
|
+
end
|
18
|
+
|
8
19
|
Capybara.register_driver :selenium_edge do |app|
|
9
20
|
# ::Selenium::WebDriver.logger.level = "debug"
|
10
|
-
|
21
|
+
# If we don't create an options object the path set above won't be used
|
22
|
+
|
23
|
+
# browser_options = Selenium::WebDriver::Edge::Options.new
|
24
|
+
# browser_options.add_argument('--headless') if ENV['HEADLESS']
|
25
|
+
|
26
|
+
browser_options = if ENV['HEADLESS']
|
27
|
+
Selenium::WebDriver::Options.edge(args: ['--headless=new'])
|
28
|
+
else
|
29
|
+
Selenium::WebDriver::Options.edge
|
30
|
+
end
|
31
|
+
|
32
|
+
Capybara::Selenium::Driver.new(app, browser: :edge, options: browser_options).tap do |driver|
|
33
|
+
driver.browser
|
34
|
+
driver.download_path = Capybara.save_path
|
35
|
+
end
|
11
36
|
end
|
12
37
|
|
13
38
|
module TestSessions
|
14
39
|
SeleniumEdge = Capybara::Session.new(:selenium_edge, TestApp)
|
15
40
|
end
|
16
41
|
|
17
|
-
skipped_tests = %i[response_headers status_code trigger
|
42
|
+
skipped_tests = %i[response_headers status_code trigger]
|
18
43
|
|
19
|
-
|
44
|
+
Capybara::SpecHelper.log_selenium_driver_version(Selenium::WebDriver::Edge) if ENV['CI']
|
20
45
|
|
21
46
|
Capybara::SpecHelper.run_specs TestSessions::SeleniumEdge, 'selenium', capybara_skip: skipped_tests do |example|
|
22
|
-
case example.metadata[:
|
23
|
-
when
|
24
|
-
|
47
|
+
case example.metadata[:full_description]
|
48
|
+
when 'Capybara::Session selenium #attach_file with a block can upload by clicking the file input'
|
49
|
+
pending "Edge doesn't allow clicking on file inputs"
|
50
|
+
when /Capybara::Session selenium node #shadow_root should get visible text/
|
51
|
+
pending "Selenium doesn't currently support getting visible text for shadow root elements"
|
25
52
|
end
|
26
53
|
end
|
27
54
|
|
28
55
|
RSpec.describe 'Capybara::Session with Edge', capybara_skip: skipped_tests do
|
29
56
|
include Capybara::SpecHelper
|
30
|
-
|
31
|
-
|
57
|
+
['Capybara::Session', 'Capybara::Node', Capybara::RSpecMatchers].each do |examples|
|
58
|
+
include_examples examples, TestSessions::SeleniumEdge, :selenium_edge
|
59
|
+
end
|
32
60
|
end
|
@@ -3,38 +3,44 @@
|
|
3
3
|
require 'spec_helper'
|
4
4
|
require 'selenium-webdriver'
|
5
5
|
require 'shared_selenium_session'
|
6
|
+
require 'shared_selenium_node'
|
6
7
|
require 'rspec/shared_spec_matchers'
|
7
8
|
|
8
|
-
|
9
|
-
|
9
|
+
Selenium::WebDriver.logger.ignore(:selenium_manager)
|
10
|
+
|
11
|
+
browser_options = Selenium::WebDriver::Firefox::Options.new
|
12
|
+
browser_options.add_argument '-headless' if ENV['HEADLESS']
|
10
13
|
# browser_options.add_option("log", {"level": "trace"})
|
11
14
|
|
12
15
|
browser_options.profile = Selenium::WebDriver::Firefox::Profile.new.tap do |profile|
|
13
16
|
profile['browser.download.dir'] = Capybara.save_path
|
14
17
|
profile['browser.download.folderList'] = 2
|
15
18
|
profile['browser.helperApps.neverAsk.saveToDisk'] = 'text/csv'
|
19
|
+
profile['browser.startup.homepage'] = 'about:blank' # workaround bug in Selenium 4 alpha4-7
|
20
|
+
profile['accessibility.tabfocus'] = 7 # make tab move over links too
|
16
21
|
end
|
17
22
|
|
18
23
|
Capybara.register_driver :selenium_firefox do |app|
|
19
24
|
# ::Selenium::WebDriver.logger.level = "debug"
|
20
|
-
Capybara::Selenium::Driver.
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
timeout: 31
|
25
|
+
version = Capybara::Selenium::Driver.load_selenium
|
26
|
+
options_key = Capybara::Selenium::Driver::CAPS_VERSION.satisfied_by?(version) ? :capabilities : :options
|
27
|
+
driver_options = { browser: :firefox, timeout: 31 }.tap do |opts|
|
28
|
+
opts[options_key] = browser_options
|
25
29
|
# Get a trace level log from geckodriver
|
26
30
|
# :driver_opts => { args: ['-vv'] }
|
27
|
-
|
31
|
+
end
|
32
|
+
|
33
|
+
Capybara::Selenium::Driver.new(app, **driver_options)
|
28
34
|
end
|
29
35
|
|
30
36
|
Capybara.register_driver :selenium_firefox_not_clear_storage do |app|
|
31
|
-
Capybara::Selenium::Driver.
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
)
|
37
|
+
version = Capybara::Selenium::Driver.load_selenium
|
38
|
+
options_key = Capybara::Selenium::Driver::CAPS_VERSION.satisfied_by?(version) ? :capabilities : :options
|
39
|
+
driver_options = { browser: :firefox, clear_local_storage: false, clear_session_storage: false }.tap do |opts|
|
40
|
+
opts[options_key] = browser_options
|
41
|
+
end
|
42
|
+
|
43
|
+
Capybara::Selenium::Driver.new(app, **driver_options)
|
38
44
|
end
|
39
45
|
|
40
46
|
module TestSessions
|
@@ -43,82 +49,127 @@ end
|
|
43
49
|
|
44
50
|
skipped_tests = %i[response_headers status_code trigger]
|
45
51
|
|
46
|
-
|
52
|
+
Capybara::SpecHelper.log_selenium_driver_version(Selenium::WebDriver::Firefox) if ENV['CI']
|
47
53
|
|
48
54
|
Capybara::SpecHelper.run_specs TestSessions::SeleniumFirefox, 'selenium', capybara_skip: skipped_tests do |example|
|
49
55
|
case example.metadata[:full_description]
|
50
56
|
when 'Capybara::Session selenium node #click should allow multiple modifiers'
|
51
|
-
pending "Firefox doesn't generate an event for shift+control+click" if firefox_gte?(62, @session) &&
|
57
|
+
pending "Firefox on OSX doesn't generate an event for shift+control+click" if firefox_gte?(62, @session) && Selenium::WebDriver::Platform.mac?
|
52
58
|
when /^Capybara::Session selenium node #double_click/
|
53
59
|
pending "selenium-webdriver/geckodriver doesn't generate double click event" if firefox_lt?(59, @session)
|
54
60
|
when 'Capybara::Session selenium #accept_prompt should accept the prompt with a blank response when there is a default'
|
55
61
|
pending "Geckodriver doesn't set a blank response in FF < 63 - https://bugzilla.mozilla.org/show_bug.cgi?id=1486485" if firefox_lt?(63, @session)
|
56
|
-
when 'Capybara::Session selenium #attach_file with multipart form should fire change once for each set of files uploaded'
|
57
|
-
pending 'Gekcodriver appends files so we have to first call clear for multiple files which creates an extra change ' \
|
58
|
-
'if files are already set'
|
59
62
|
when 'Capybara::Session selenium #attach_file with multipart form should fire change once when uploading multiple files from empty'
|
60
63
|
pending "FF < 62 doesn't support setting all files at once" if firefox_lt?(62, @session)
|
61
64
|
when 'Capybara::Session selenium #accept_confirm should work with nested modals'
|
62
|
-
skip 'Broken in FF
|
65
|
+
skip 'Broken in 63 <= FF < 69 - https://bugzilla.mozilla.org/show_bug.cgi?id=1487358' if firefox_gte?(63, @session) && firefox_lt?(69, @session)
|
66
|
+
skip 'Hangs in 69 <= FF < 71 - Dont know what issue for this - previous issue was closed as fixed but it is not' if firefox_gte?(69, @session) && firefox_lt?(71, @session)
|
67
|
+
skip 'Broken again intermittently in FF 71 - jus skip it' if firefox_lt?(109, @session) # don't really know when it was fixed
|
63
68
|
when 'Capybara::Session selenium #click_link can download a file'
|
64
69
|
skip 'Need to figure out testing of file downloading on windows platform' if Gem.win_platform?
|
65
70
|
when 'Capybara::Session selenium #reset_session! removes ALL cookies'
|
66
71
|
pending "Geckodriver doesn't provide a way to remove cookies outside the current domain"
|
72
|
+
when /drag_to.*HTML5/
|
73
|
+
pending "Firefox < 62 doesn't support a DataTransfer constructor" if firefox_lt?(62.0, @session)
|
74
|
+
when 'Capybara::Session selenium #accept_alert should handle the alert if the page changes',
|
75
|
+
'Capybara::Session selenium #accept_alert with an asynchronous alert should accept the alert'
|
76
|
+
skip 'No clue what Firefox is doing here - works fine on MacOS locally' if firefox_lt?(109, @session) # don't really know when it was fixed
|
77
|
+
when 'Capybara::Session selenium node #shadow_root should find elements inside the shadow dom using CSS',
|
78
|
+
'Capybara::Session selenium node #shadow_root should find nested shadow roots',
|
79
|
+
'Capybara::Session selenium node #shadow_root should click on elements',
|
80
|
+
'Capybara::Session selenium node #shadow_root should use convenience methods once moved to a descendant of the shadow root',
|
81
|
+
'Capybara::Session selenium node #shadow_root should produce error messages when failing',
|
82
|
+
'Capybara::Session with firefox with selenium driver #evaluate_script returns a shadow root'
|
83
|
+
pending "Firefox doesn't yet have full W3C shadow root support" if firefox_lt?(113, @session)
|
84
|
+
when 'Capybara::Session selenium #fill_in should handle carriage returns with line feeds in a textarea correctly'
|
85
|
+
pending 'Not sure what firefox is doing here'
|
86
|
+
when /Capybara::Session selenium node #shadow_root should get visible text/
|
87
|
+
pending "Selenium doesn't currently support getting visible text for shadow root elements"
|
88
|
+
when /Capybara::Session selenium node #shadow_root/
|
89
|
+
skip 'Not supported with this geckodriver version' if geckodriver_lt?('0.31.0', @session)
|
90
|
+
when /Capybara::Session selenium node #set should submit single text input forms if ended with \\n/
|
91
|
+
pending 'Firefox/geckodriver doesn\'t submit with values ending in \n'
|
67
92
|
end
|
68
93
|
end
|
69
94
|
|
70
95
|
RSpec.describe 'Capybara::Session with firefox' do # rubocop:disable RSpec/MultipleDescribes
|
71
96
|
include Capybara::SpecHelper
|
72
|
-
|
73
|
-
|
97
|
+
['Capybara::Session', 'Capybara::Node', Capybara::RSpecMatchers].each do |examples|
|
98
|
+
include_examples examples, TestSessions::SeleniumFirefox, :selenium_firefox
|
99
|
+
end
|
100
|
+
|
101
|
+
describe 'filling in Firefox-specific date and time fields with keystrokes' do
|
102
|
+
let(:datetime) { Time.new(1983, 6, 19, 6, 30) }
|
103
|
+
let(:session) { TestSessions::SeleniumFirefox }
|
104
|
+
|
105
|
+
before do
|
106
|
+
session.visit('/form')
|
107
|
+
end
|
108
|
+
|
109
|
+
it 'should fill in a date input with a String' do
|
110
|
+
session.fill_in('form_date', with: datetime.to_date.iso8601)
|
111
|
+
session.click_button('awesome')
|
112
|
+
expect(Date.parse(extract_results(session)['date'])).to eq datetime.to_date
|
113
|
+
end
|
114
|
+
|
115
|
+
it 'should fill in a time input with a String' do
|
116
|
+
session.fill_in('form_time', with: datetime.to_time.strftime('%T'))
|
117
|
+
session.click_button('awesome')
|
118
|
+
results = extract_results(session)['time']
|
119
|
+
expect(Time.parse(results).strftime('%r')).to eq datetime.strftime('%r')
|
120
|
+
end
|
121
|
+
|
122
|
+
it 'should fill in a datetime input with a String' do
|
123
|
+
pending 'Need to figure out what string format this will actually accept'
|
124
|
+
session.fill_in('form_datetime', with: datetime.iso8601)
|
125
|
+
session.click_button('awesome')
|
126
|
+
expect(Time.parse(extract_results(session)['datetime'])).to eq datetime
|
127
|
+
end
|
128
|
+
end
|
74
129
|
end
|
75
130
|
|
76
131
|
RSpec.describe Capybara::Selenium::Driver do
|
77
|
-
|
78
|
-
@driver = Capybara::Selenium::Driver.new(TestApp, browser: :firefox, options: browser_options)
|
79
|
-
end
|
132
|
+
let(:driver) { described_class.new(TestApp, browser: :firefox, options: browser_options) }
|
80
133
|
|
81
134
|
describe '#quit' do
|
82
135
|
it 'should reset browser when quit' do
|
83
|
-
expect(
|
84
|
-
|
136
|
+
expect(driver.browser).to be_truthy
|
137
|
+
driver.quit
|
85
138
|
# access instance variable directly so we don't create a new browser instance
|
86
|
-
expect(
|
139
|
+
expect(driver.instance_variable_get(:@browser)).to be_nil
|
87
140
|
end
|
88
141
|
|
89
142
|
context 'with errors' do
|
90
|
-
|
91
|
-
@original_browser = @driver.browser
|
92
|
-
end
|
143
|
+
let!(:original_browser) { driver.browser }
|
93
144
|
|
94
145
|
after do
|
95
146
|
# Ensure browser is actually quit so we don't leave hanging processe
|
96
|
-
RSpec::Mocks.space.proxy_for(
|
97
|
-
|
147
|
+
RSpec::Mocks.space.proxy_for(original_browser).reset
|
148
|
+
original_browser.quit
|
98
149
|
end
|
99
150
|
|
100
151
|
it 'warns UnknownError returned during quit because the browser is probably already gone' do
|
101
|
-
allow(
|
102
|
-
allow(
|
152
|
+
allow(driver).to receive(:warn)
|
153
|
+
allow(driver.browser).to(
|
103
154
|
receive(:quit)
|
104
155
|
.and_raise(Selenium::WebDriver::Error::UnknownError, 'random message')
|
105
156
|
)
|
106
157
|
|
107
|
-
expect {
|
108
|
-
expect(
|
109
|
-
expect(
|
158
|
+
expect { driver.quit }.not_to raise_error
|
159
|
+
expect(driver.instance_variable_get(:@browser)).to be_nil
|
160
|
+
expect(driver).to have_received(:warn).with(/random message/)
|
110
161
|
end
|
111
162
|
|
112
163
|
it 'ignores silenced UnknownError returned during quit because the browser is almost definitely already gone' do
|
113
|
-
allow(
|
114
|
-
allow(
|
164
|
+
allow(driver).to receive(:warn)
|
165
|
+
allow(driver.browser).to(
|
115
166
|
receive(:quit)
|
116
167
|
.and_raise(Selenium::WebDriver::Error::UnknownError, 'Error communicating with the remote browser')
|
117
168
|
)
|
118
169
|
|
119
|
-
expect {
|
120
|
-
expect(
|
121
|
-
expect(
|
170
|
+
expect { driver.quit }.not_to raise_error
|
171
|
+
expect(driver.instance_variable_get(:@browser)).to be_nil
|
172
|
+
expect(driver).not_to have_received(:warn)
|
122
173
|
end
|
123
174
|
end
|
124
175
|
end
|
@@ -126,23 +177,23 @@ RSpec.describe Capybara::Selenium::Driver do
|
|
126
177
|
context 'storage' do
|
127
178
|
describe '#reset!' do
|
128
179
|
it 'clears storage by default' do
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
expect(
|
135
|
-
expect(
|
180
|
+
session = TestSessions::SeleniumFirefox
|
181
|
+
session.visit('/with_js')
|
182
|
+
session.find(:css, '#set-storage').click
|
183
|
+
session.reset!
|
184
|
+
session.visit('/with_js')
|
185
|
+
expect(session.driver.browser.local_storage.keys).to be_empty
|
186
|
+
expect(session.driver.browser.session_storage.keys).to be_empty
|
136
187
|
end
|
137
188
|
|
138
189
|
it 'does not clear storage when false' do
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
expect(
|
145
|
-
expect(
|
190
|
+
session = Capybara::Session.new(:selenium_firefox_not_clear_storage, TestApp)
|
191
|
+
session.visit('/with_js')
|
192
|
+
session.find(:css, '#set-storage').click
|
193
|
+
session.reset!
|
194
|
+
session.visit('/with_js')
|
195
|
+
expect(session.driver.browser.local_storage.keys).not_to be_empty
|
196
|
+
expect(session.driver.browser.session_storage.keys).not_to be_empty
|
146
197
|
end
|
147
198
|
end
|
148
199
|
end
|
@@ -155,7 +206,7 @@ RSpec.describe Capybara::Selenium::Driver do
|
|
155
206
|
end
|
156
207
|
|
157
208
|
RSpec.describe Capybara::Selenium::Node do
|
158
|
-
|
209
|
+
describe '#click' do
|
159
210
|
it 'warns when attempting on a table row' do
|
160
211
|
session = TestSessions::SeleniumFirefox
|
161
212
|
session.visit('/tables')
|
@@ -174,13 +225,4 @@ RSpec.describe Capybara::Selenium::Node do
|
|
174
225
|
expect(session).to have_link('Has been alt control meta')
|
175
226
|
end
|
176
227
|
end
|
177
|
-
|
178
|
-
context '#send_keys' do
|
179
|
-
it 'should process space' do
|
180
|
-
session = TestSessions::SeleniumFirefox
|
181
|
-
session.visit('/form')
|
182
|
-
session.find(:css, '#address1_city').send_keys('ocean', [:shift, :space, 'side'])
|
183
|
-
expect(session.find(:css, '#address1_city').value).to eq 'ocean SIDE'
|
184
|
-
end
|
185
|
-
end
|
186
228
|
end
|
@@ -3,6 +3,7 @@
|
|
3
3
|
require 'spec_helper'
|
4
4
|
require 'selenium-webdriver'
|
5
5
|
require 'shared_selenium_session'
|
6
|
+
require 'shared_selenium_node'
|
6
7
|
require 'rspec/shared_spec_matchers'
|
7
8
|
|
8
9
|
def selenium_host
|
@@ -20,8 +21,8 @@ def ensure_selenium_running!
|
|
20
21
|
rescue StandardError
|
21
22
|
if timer.expired?
|
22
23
|
raise 'Selenium is not running. ' \
|
23
|
-
|
24
|
-
|
24
|
+
"You can run a selenium server easily with: \n. " \
|
25
|
+
'$ docker-compose up -d selenium_firefox'
|
25
26
|
else
|
26
27
|
puts 'Waiting for Selenium docker instance...'
|
27
28
|
sleep 1
|
@@ -34,11 +35,10 @@ Capybara.register_driver :selenium_firefox_remote do |app|
|
|
34
35
|
ensure_selenium_running!
|
35
36
|
|
36
37
|
url = "http://#{selenium_host}:#{selenium_port}/wd/hub"
|
37
|
-
browser_options =
|
38
|
+
browser_options = Selenium::WebDriver::Firefox::Options.new
|
38
39
|
|
39
40
|
Capybara::Selenium::Driver.new app,
|
40
41
|
browser: :remote,
|
41
|
-
desired_capabilities: :firefox,
|
42
42
|
options: browser_options,
|
43
43
|
url: url
|
44
44
|
end
|
@@ -49,12 +49,6 @@ module TestSessions
|
|
49
49
|
RemoteFirefox = Capybara::Session.new(FIREFOX_REMOTE_DRIVER, TestApp)
|
50
50
|
end
|
51
51
|
|
52
|
-
TestSessions::RemoteFirefox.driver.browser.file_detector = lambda do |args|
|
53
|
-
# args => ["/path/to/file"]
|
54
|
-
str = args.first.to_s
|
55
|
-
str if File.exist?(str)
|
56
|
-
end
|
57
|
-
|
58
52
|
skipped_tests = %i[response_headers status_code trigger download]
|
59
53
|
|
60
54
|
Capybara::SpecHelper.run_specs TestSessions::RemoteFirefox, FIREFOX_REMOTE_DRIVER.to_s, capybara_skip: skipped_tests do |example|
|
@@ -63,9 +57,6 @@ Capybara::SpecHelper.run_specs TestSessions::RemoteFirefox, FIREFOX_REMOTE_DRIVE
|
|
63
57
|
skip "Firefox doesn't generate an event for shift+control+click" if firefox_gte?(62, @session)
|
64
58
|
when 'Capybara::Session selenium_firefox_remote #accept_prompt should accept the prompt with a blank response when there is a default'
|
65
59
|
pending "Geckodriver doesn't set a blank response in FF < 63 - https://bugzilla.mozilla.org/show_bug.cgi?id=1486485" if firefox_lt?(63, @session)
|
66
|
-
when 'Capybara::Session selenium_firefox_remote #attach_file with multipart form should fire change once for each set of files uploaded'
|
67
|
-
pending 'Gekcodriver appends files so we have to first call clear for multiple files which creates an extra change ' \
|
68
|
-
'if files are already set'
|
69
60
|
when 'Capybara::Session selenium_firefox_remote #attach_file with multipart form should fire change once when uploading multiple files from empty'
|
70
61
|
pending "FF < 62 doesn't support setting all files at once" if firefox_lt?(62, @session)
|
71
62
|
when 'Capybara::Session selenium_firefox_remote #reset_session! removes ALL cookies'
|
@@ -73,13 +64,29 @@ Capybara::SpecHelper.run_specs TestSessions::RemoteFirefox, FIREFOX_REMOTE_DRIVE
|
|
73
64
|
when /#accept_confirm should work with nested modals$/
|
74
65
|
# skip because this is timing based and hence flaky when set to pending
|
75
66
|
skip 'Broken in FF 63 - https://bugzilla.mozilla.org/show_bug.cgi?id=1487358' if firefox_gte?(63, @session)
|
67
|
+
when 'Capybara::Session selenium_firefox_remote #fill_in should handle carriage returns with line feeds in a textarea correctly'
|
68
|
+
pending 'Not sure what firefox is doing here'
|
69
|
+
when 'Capybara::Session selenium_firefox_remote node #shadow_root should find elements inside the shadow dom using CSS',
|
70
|
+
'Capybara::Session selenium_firefox_remote node #shadow_root should find nested shadow roots',
|
71
|
+
'Capybara::Session selenium_firefox_remote node #shadow_root should click on elements',
|
72
|
+
'Capybara::Session selenium_firefox_remote node #shadow_root should use convenience methods once moved to a descendant of the shadow root',
|
73
|
+
'Capybara::Session selenium_firefox_remote node #shadow_root should produce error messages when failing',
|
74
|
+
'Capybara::Session with remote firefox with selenium driver #evaluate_script returns a shadow root'
|
75
|
+
pending "Firefox doesn't yet have full W3C shadow root support"
|
76
|
+
when /Capybara::Session selenium_firefox_remote node #shadow_root should get visible text/
|
77
|
+
pending "Selenium doesn't currently support getting visible text for shadow root elements"
|
78
|
+
when /Capybara::Session selenium_firefox_remote node #shadow_root/
|
79
|
+
skip 'Not supported with this geckodriver version' if geckodriver_lt?('0.31.0', @session)
|
80
|
+
when /Capybara::Session selenium node #set should submit single text input forms if ended with \\n/
|
81
|
+
pending 'Firefox/geckodriver doesn\'t submit with values ending in \n'
|
76
82
|
end
|
77
83
|
end
|
78
84
|
|
79
85
|
RSpec.describe 'Capybara::Session with remote firefox' do
|
80
86
|
include Capybara::SpecHelper
|
81
|
-
|
82
|
-
|
87
|
+
['Capybara::Session', 'Capybara::Node', Capybara::RSpecMatchers].each do |examples|
|
88
|
+
include_examples examples, TestSessions::RemoteFirefox, FIREFOX_REMOTE_DRIVER
|
89
|
+
end
|
83
90
|
|
84
91
|
it 'is considered to be firefox' do
|
85
92
|
expect(session.driver.browser.browser).to eq :firefox
|
data/spec/selenium_spec_ie.rb
CHANGED
@@ -3,9 +3,16 @@
|
|
3
3
|
require 'spec_helper'
|
4
4
|
require 'selenium-webdriver'
|
5
5
|
require 'shared_selenium_session'
|
6
|
+
require 'shared_selenium_node'
|
6
7
|
require 'rspec/shared_spec_matchers'
|
7
8
|
|
8
|
-
|
9
|
+
# if ENV['CI']
|
10
|
+
# if ::Selenium::WebDriver::Service.respond_to? :driver_path=
|
11
|
+
# ::Selenium::WebDriver::IE::Service
|
12
|
+
# else
|
13
|
+
# ::Selenium::WebDriver::IE
|
14
|
+
# end.driver_path = 'C:\Tools\WebDriver\IEDriverServer.exe'
|
15
|
+
# end
|
9
16
|
|
10
17
|
def selenium_host
|
11
18
|
ENV.fetch('SELENIUM_HOST', '192.168.56.102')
|
@@ -21,8 +28,8 @@ end
|
|
21
28
|
|
22
29
|
Capybara.register_driver :selenium_ie do |app|
|
23
30
|
# ::Selenium::WebDriver.logger.level = "debug"
|
24
|
-
options =
|
25
|
-
options.require_window_focus = true
|
31
|
+
options = Selenium::WebDriver::IE::Options.new
|
32
|
+
# options.require_window_focus = true
|
26
33
|
# options.add_option("log", {"level": "trace"})
|
27
34
|
|
28
35
|
if ENV['REMOTE']
|
@@ -32,21 +39,13 @@ Capybara.register_driver :selenium_ie do |app|
|
|
32
39
|
Capybara::Selenium::Driver.new(app,
|
33
40
|
browser: :remote,
|
34
41
|
options: options,
|
35
|
-
url: url)
|
36
|
-
puts driver.browser.capabilities.inspect
|
37
|
-
driver.browser.file_detector = lambda do |args|
|
38
|
-
str = args.first.to_s
|
39
|
-
str if File.exist?(str)
|
40
|
-
end
|
41
|
-
end
|
42
|
+
url: url)
|
42
43
|
else
|
43
44
|
Capybara::Selenium::Driver.new(
|
44
45
|
app,
|
45
46
|
browser: :ie,
|
46
47
|
options: options
|
47
|
-
)
|
48
|
-
puts driver.browser.capabilities.inspect
|
49
|
-
end
|
48
|
+
)
|
50
49
|
end
|
51
50
|
end
|
52
51
|
|
@@ -58,7 +57,7 @@ TestSessions::SeleniumIE.current_window.resize_to(800, 500)
|
|
58
57
|
|
59
58
|
skipped_tests = %i[response_headers status_code trigger modals hover form_attribute windows]
|
60
59
|
|
61
|
-
|
60
|
+
Capybara::SpecHelper.log_selenium_driver_version(Selenium::WebDriver::IE) if ENV['CI']
|
62
61
|
|
63
62
|
TestSessions::SeleniumIE.current_window.resize_to(1600, 1200)
|
64
63
|
|
@@ -72,13 +71,10 @@ Capybara::SpecHelper.run_specs TestSessions::SeleniumIE, 'selenium', capybara_sk
|
|
72
71
|
pending "IE 11 doesn't support date input types"
|
73
72
|
when /#click_link_or_button with :disabled option happily clicks on links which incorrectly have the disabled attribute$/
|
74
73
|
skip 'IE 11 obeys non-standard disabled attribute on anchor tag'
|
75
|
-
when /#
|
76
|
-
skip "Windows can't :meta click because :meta triggers start menu"
|
77
|
-
when /#click should allow modifiers$/
|
74
|
+
when /#click should allow modifiers$/, /#double_click should allow modifiers$/
|
78
75
|
pending "Doesn't work with IE for some unknown reason$"
|
79
|
-
when /#double_click should allow modifiers$/
|
80
76
|
pending "Doesn't work with IE for some unknown reason$"
|
81
|
-
when /#click should allow multiple modifiers$/
|
77
|
+
when /#click should allow multiple modifiers$/, /#right_click should allow modifiers$/
|
82
78
|
skip "Windows can't :meta click because :meta triggers start menu"
|
83
79
|
when /#double_click should allow multiple modifiers$/
|
84
80
|
skip "Windows can't :alt double click due to being properties shortcut"
|
@@ -92,7 +88,7 @@ Capybara::SpecHelper.run_specs TestSessions::SeleniumIE, 'selenium', capybara_sk
|
|
92
88
|
pending "Window 7 and 8.1 don't support 308 http status code"
|
93
89
|
when /#scroll_to can scroll an element to the center of the viewport$/,
|
94
90
|
/#scroll_to can scroll an element to the center of the scrolling element$/
|
95
|
-
pending "
|
91
|
+
pending "IE doesn't support ScrollToOptions"
|
96
92
|
when /#attach_file with multipart form should fire change once for each set of files uploaded$/,
|
97
93
|
/#attach_file with multipart form should fire change once when uploading multiple files from empty$/,
|
98
94
|
/#attach_file with multipart form should not break when using HTML5 multiple file input uploading multiple files$/
|
@@ -104,13 +100,24 @@ Capybara::SpecHelper.run_specs TestSessions::SeleniumIE, 'selenium', capybara_sk
|
|
104
100
|
# pending "IE driver doesn't error when clicking on covered elements, it just clicks the wrong element"
|
105
101
|
when /#click should go to the same page if href is blank$/
|
106
102
|
pending 'IE treats blank href as a parent request (against HTML spec)'
|
103
|
+
when /#attach_file with a block/
|
104
|
+
skip 'Hangs IE testing for unknown reason'
|
105
|
+
when /drag_to.*HTML5/
|
106
|
+
pending "IE doesn't support a DataTransfer constructor"
|
107
|
+
when /template elements should not be visible/
|
108
|
+
skip "IE doesn't support template elements"
|
109
|
+
when /Element#drop/
|
110
|
+
pending "IE doesn't support DataTransfer constructor"
|
111
|
+
when /Capybara::Session selenium_chrome node #shadow_root should get visible text/
|
112
|
+
pending "Selenium doesn't currently support getting visible text for shadow root elements"
|
107
113
|
end
|
108
114
|
end
|
109
115
|
|
110
116
|
RSpec.describe 'Capybara::Session with Internet Explorer', capybara_skip: skipped_tests do # rubocop:disable RSpec/MultipleDescribes
|
111
117
|
include Capybara::SpecHelper
|
112
|
-
|
113
|
-
|
118
|
+
['Capybara::Session', 'Capybara::Node', Capybara::RSpecMatchers].each do |examples|
|
119
|
+
include_examples examples, TestSessions::SeleniumIE, :selenium_ie
|
120
|
+
end
|
114
121
|
end
|
115
122
|
|
116
123
|
RSpec.describe Capybara::Selenium::Node do
|