capybara 3.6.0 → 3.7.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/History.md +16 -0
- data/README.md +5 -1
- data/lib/capybara.rb +2 -0
- data/lib/capybara/minitest/spec.rb +1 -1
- data/lib/capybara/node/actions.rb +34 -25
- data/lib/capybara/node/base.rb +15 -17
- data/lib/capybara/node/document_matchers.rb +1 -3
- data/lib/capybara/node/element.rb +11 -12
- data/lib/capybara/node/finders.rb +2 -1
- data/lib/capybara/node/simple.rb +13 -6
- data/lib/capybara/queries/base_query.rb +4 -4
- data/lib/capybara/queries/selector_query.rb +119 -94
- data/lib/capybara/queries/text_query.rb +2 -1
- data/lib/capybara/rack_test/form.rb +4 -4
- data/lib/capybara/rack_test/node.rb +5 -5
- data/lib/capybara/result.rb +23 -32
- data/lib/capybara/rspec/compound.rb +1 -1
- data/lib/capybara/rspec/matchers.rb +63 -61
- data/lib/capybara/selector.rb +28 -10
- data/lib/capybara/selector/css.rb +17 -17
- data/lib/capybara/selector/filter_set.rb +9 -9
- data/lib/capybara/selector/selector.rb +3 -4
- data/lib/capybara/selenium/driver.rb +73 -95
- data/lib/capybara/selenium/driver_specializations/chrome_driver.rb +4 -4
- data/lib/capybara/selenium/driver_specializations/marionette_driver.rb +9 -0
- data/lib/capybara/selenium/node.rb +127 -67
- data/lib/capybara/selenium/nodes/chrome_node.rb +3 -3
- data/lib/capybara/selenium/nodes/marionette_node.rb +14 -8
- data/lib/capybara/server.rb +2 -2
- data/lib/capybara/server/animation_disabler.rb +17 -3
- data/lib/capybara/server/middleware.rb +8 -4
- data/lib/capybara/session.rb +43 -37
- data/lib/capybara/session/config.rb +8 -6
- data/lib/capybara/spec/session/assert_text_spec.rb +14 -0
- data/lib/capybara/spec/session/attach_file_spec.rb +7 -0
- data/lib/capybara/spec/session/check_spec.rb +21 -0
- data/lib/capybara/spec/session/choose_spec.rb +15 -1
- data/lib/capybara/spec/session/fill_in_spec.rb +7 -0
- data/lib/capybara/spec/session/find_spec.rb +2 -1
- data/lib/capybara/spec/session/has_selector_spec.rb +18 -0
- data/lib/capybara/spec/session/has_text_spec.rb +14 -0
- data/lib/capybara/spec/session/node_spec.rb +2 -1
- data/lib/capybara/spec/session/reset_session_spec.rb +4 -4
- data/lib/capybara/spec/session/text_spec.rb +2 -1
- data/lib/capybara/spec/session/title_spec.rb +2 -1
- data/lib/capybara/spec/session/uncheck_spec.rb +8 -0
- data/lib/capybara/spec/session/within_spec.rb +2 -1
- data/lib/capybara/spec/spec_helper.rb +1 -32
- data/lib/capybara/spec/views/with_js.erb +3 -4
- data/lib/capybara/version.rb +1 -1
- data/spec/minitest_spec.rb +4 -0
- data/spec/minitest_spec_spec.rb +4 -0
- data/spec/rack_test_spec.rb +4 -4
- data/spec/rspec/shared_spec_matchers.rb +4 -2
- data/spec/selector_spec.rb +15 -1
- data/spec/selenium_spec_chrome.rb +1 -6
- data/spec/selenium_spec_chrome_remote.rb +1 -1
- data/spec/selenium_spec_firefox_remote.rb +2 -5
- data/spec/selenium_spec_ie.rb +41 -4
- data/spec/selenium_spec_marionette.rb +1 -25
- data/spec/shared_selenium_session.rb +74 -16
- data/spec/spec_helper.rb +41 -0
- metadata +2 -2
@@ -45,11 +45,12 @@ Capybara::SpecHelper.spec '#text' do
|
|
45
45
|
context 'with css as default selector' do
|
46
46
|
before { Capybara.default_selector = :css }
|
47
47
|
|
48
|
+
after { Capybara.default_selector = :xpath }
|
49
|
+
|
48
50
|
it 'should print the text of the page' do
|
49
51
|
@session.visit('/with_simple_html')
|
50
52
|
expect(@session.text).to eq('Bar')
|
51
53
|
end
|
52
|
-
after { Capybara.default_selector = :xpath }
|
53
54
|
end
|
54
55
|
|
55
56
|
it 'should be correctly normalized when visible' do
|
@@ -9,11 +9,12 @@ Capybara::SpecHelper.spec '#title' do
|
|
9
9
|
context 'with css as default selector' do
|
10
10
|
before { Capybara.default_selector = :css }
|
11
11
|
|
12
|
+
after { Capybara.default_selector = :xpath }
|
13
|
+
|
12
14
|
it 'should get the title of the page' do
|
13
15
|
@session.visit('/with_title')
|
14
16
|
expect(@session.title).to eq('Test Title')
|
15
17
|
end
|
16
|
-
after { Capybara.default_selector = :xpath }
|
17
18
|
end
|
18
19
|
|
19
20
|
context 'within iframe', requires: [:frames] do
|
@@ -26,6 +26,14 @@ Capybara::SpecHelper.spec '#uncheck' do
|
|
26
26
|
expect(extract_results(@session)['pets']).not_to include('hamster')
|
27
27
|
end
|
28
28
|
|
29
|
+
it 'should be able to uncheck itself if no locator specified' do
|
30
|
+
cb = @session.find(:id, 'form_pets_hamster')
|
31
|
+
cb.uncheck
|
32
|
+
@session.click_button('awesome')
|
33
|
+
expect(extract_results(@session)['pets']).to include('dog')
|
34
|
+
expect(extract_results(@session)['pets']).not_to include('hamster')
|
35
|
+
end
|
36
|
+
|
29
37
|
it 'casts to string' do
|
30
38
|
@session.uncheck(:form_pets_hamster)
|
31
39
|
@session.click_button('awesome')
|
@@ -60,13 +60,14 @@ Capybara::SpecHelper.spec '#within' do
|
|
60
60
|
context 'with the default selector set to CSS' do
|
61
61
|
before { Capybara.default_selector = :css }
|
62
62
|
|
63
|
+
after { Capybara.default_selector = :xpath }
|
64
|
+
|
63
65
|
it 'should use CSS' do
|
64
66
|
@session.within('#for_bar li', text: 'With Simple HTML') do
|
65
67
|
@session.click_link('Go')
|
66
68
|
end
|
67
69
|
expect(@session).to have_content('Bar')
|
68
70
|
end
|
69
|
-
after { Capybara.default_selector = :xpath }
|
70
71
|
end
|
71
72
|
|
72
73
|
context 'with nested scopes' do
|
@@ -35,6 +35,7 @@ module Capybara
|
|
35
35
|
Capybara.disable_animation = false
|
36
36
|
Capybara.test_id = nil
|
37
37
|
Capybara.predicates_wait = true
|
38
|
+
Capybara.default_normalize_ws = false
|
38
39
|
reset_threadsafe
|
39
40
|
end
|
40
41
|
|
@@ -118,38 +119,6 @@ module Capybara
|
|
118
119
|
expect(session).to have_xpath("//pre[@id='results']")
|
119
120
|
YAML.load Nokogiri::HTML(session.body).xpath("//pre[@id='results']").first.inner_html.lstrip
|
120
121
|
end
|
121
|
-
|
122
|
-
def marionette?(session)
|
123
|
-
session.respond_to?(:driver) && session.driver.respond_to?(:marionette?, true) && session.driver.send(:marionette?)
|
124
|
-
end
|
125
|
-
|
126
|
-
def marionette_lt?(version, session)
|
127
|
-
marionette?(session) && (session.driver.browser.capabilities[:browser_version].to_f < version)
|
128
|
-
end
|
129
|
-
|
130
|
-
def marionette_gte?(version, session)
|
131
|
-
marionette?(session) && (session.driver.browser.capabilities[:browser_version].to_f >= version)
|
132
|
-
end
|
133
|
-
|
134
|
-
def chrome?(session)
|
135
|
-
session.respond_to?(:driver) && session.driver.respond_to?(:chrome?, true) && session.driver.send(:chrome?)
|
136
|
-
end
|
137
|
-
|
138
|
-
def chrome_lt?(version, session)
|
139
|
-
chrome?(session) && (session.driver.browser.capabilities[:version].to_f < version)
|
140
|
-
end
|
141
|
-
|
142
|
-
def chrome_gte?(version, session)
|
143
|
-
chrome?(session) && (session.driver.browser.capabilities[:version].to_f >= version)
|
144
|
-
end
|
145
|
-
|
146
|
-
def edge?(session)
|
147
|
-
session.respond_to?(:driver) && session.driver.respond_to?(:edge?, true) && session.driver.send(:edge?)
|
148
|
-
end
|
149
|
-
|
150
|
-
def ie?(session)
|
151
|
-
session.respond_to?(:driver) && session.driver.respond_to?(:ie?, true) && session.driver.send(:ie?)
|
152
|
-
end
|
153
122
|
end
|
154
123
|
end
|
155
124
|
|
@@ -18,7 +18,9 @@
|
|
18
18
|
<div id="drop">
|
19
19
|
<p>It should be dropped here.</p>
|
20
20
|
</div>
|
21
|
-
|
21
|
+
<div id="drop_scroll">
|
22
|
+
<p>It should be dropped here.</p>
|
23
|
+
</div>
|
22
24
|
<div id="drop_html5_scroll" class="drop">
|
23
25
|
<p>It should be dropped here.</p>
|
24
26
|
</div>
|
@@ -142,9 +144,6 @@
|
|
142
144
|
<div id="drag_scroll">
|
143
145
|
<p>This is a draggable element.</p>
|
144
146
|
</div>
|
145
|
-
<div id="drop_scroll">
|
146
|
-
<p>It should be dropped here.</p>
|
147
|
-
</div>
|
148
147
|
<div id="drag_html5_scroll" draggable="true">
|
149
148
|
<p>This is an HTML5 draggable element.</p>
|
150
149
|
</div>
|
data/lib/capybara/version.rb
CHANGED
data/spec/minitest_spec.rb
CHANGED
@@ -134,6 +134,10 @@ RSpec.describe 'capybara/minitest' do
|
|
134
134
|
Capybara.app = TestApp
|
135
135
|
end
|
136
136
|
|
137
|
+
after do
|
138
|
+
Capybara.use_default_driver
|
139
|
+
end
|
140
|
+
|
137
141
|
it 'should support minitest' do
|
138
142
|
output = StringIO.new
|
139
143
|
reporter = Minitest::SummaryReporter.new(output)
|
data/spec/minitest_spec_spec.rb
CHANGED
@@ -130,6 +130,10 @@ RSpec.describe 'capybara/minitest/spec' do
|
|
130
130
|
Capybara.app = TestApp
|
131
131
|
end
|
132
132
|
|
133
|
+
after do
|
134
|
+
Capybara.use_default_driver
|
135
|
+
end
|
136
|
+
|
133
137
|
it 'should support minitest spec' do
|
134
138
|
output = StringIO.new
|
135
139
|
reporter = Minitest::SummaryReporter.new(output)
|
data/spec/rack_test_spec.rb
CHANGED
@@ -40,6 +40,10 @@ RSpec.describe Capybara::Session do # rubocop:disable RSpec/MultipleDescribes
|
|
40
40
|
end
|
41
41
|
|
42
42
|
describe '#click_link' do
|
43
|
+
after do
|
44
|
+
@session.driver.options[:respect_data_method] = false
|
45
|
+
end
|
46
|
+
|
43
47
|
it 'should use data-method if option is true' do
|
44
48
|
@session.driver.options[:respect_data_method] = true
|
45
49
|
@session.visit '/with_html'
|
@@ -60,10 +64,6 @@ RSpec.describe Capybara::Session do # rubocop:disable RSpec/MultipleDescribes
|
|
60
64
|
@session.click_link 'A link with capitalized data-method'
|
61
65
|
expect(@session.html).to include('The requested object was deleted')
|
62
66
|
end
|
63
|
-
|
64
|
-
after do
|
65
|
-
@session.driver.options[:respect_data_method] = false
|
66
|
-
end
|
67
67
|
end
|
68
68
|
|
69
69
|
describe '#fill_in' do
|
@@ -325,12 +325,13 @@ RSpec.shared_examples Capybara::RSpecMatchers do |session, _mode|
|
|
325
325
|
context 'with default selector CSS' do
|
326
326
|
before { Capybara.default_selector = :css }
|
327
327
|
|
328
|
+
after { Capybara.default_selector = :xpath }
|
329
|
+
|
328
330
|
it 'fails if has_content? returns false' do
|
329
331
|
expect do
|
330
332
|
expect(page).to have_content('No such Text')
|
331
333
|
end.to raise_error(/expected to find text "No such Text" in "(.*)This is a test(.*)"/)
|
332
334
|
end
|
333
|
-
after { Capybara.default_selector = :xpath }
|
334
335
|
end
|
335
336
|
end
|
336
337
|
|
@@ -461,12 +462,13 @@ RSpec.shared_examples Capybara::RSpecMatchers do |session, _mode|
|
|
461
462
|
context 'with default selector CSS' do
|
462
463
|
before { Capybara.default_selector = :css }
|
463
464
|
|
465
|
+
after { Capybara.default_selector = :xpath }
|
466
|
+
|
464
467
|
it 'fails if has_text? returns false' do
|
465
468
|
expect do
|
466
469
|
expect(page).to have_text('No such Text')
|
467
470
|
end.to raise_error(/expected to find text "No such Text" in "(.*)This is a test(.*)"/)
|
468
471
|
end
|
469
|
-
after { Capybara.default_selector = :xpath }
|
470
472
|
end
|
471
473
|
end
|
472
474
|
|
data/spec/selector_spec.rb
CHANGED
@@ -261,11 +261,25 @@ RSpec.describe Capybara do
|
|
261
261
|
expect { string.all(:element, 'input', type: 'submit', count: 1) }.not_to raise_error
|
262
262
|
end
|
263
263
|
|
264
|
+
it 'works without element type' do
|
265
|
+
expect(string.find(:element, type: 'submit').value).to eq 'click me'
|
266
|
+
end
|
267
|
+
|
268
|
+
it 'validates attribute presence when true' do
|
269
|
+
expect(string.find(:element, name: true)[:id]).to eq 'my_text_input'
|
270
|
+
end
|
271
|
+
|
272
|
+
it 'validates attribute absence when false' do
|
273
|
+
expect(string.find(:element, 'option', disabled: false, selected: false).value).to eq 'a'
|
274
|
+
end
|
275
|
+
|
264
276
|
it 'includes wildcarded keys in description' do
|
265
|
-
expect { string.find(:element, 'input', not_there: 'bad', count: 1) }
|
277
|
+
expect { string.find(:element, 'input', not_there: 'bad', presence: true, absence: false, count: 1) }
|
266
278
|
.to(raise_error do |e|
|
267
279
|
expect(e).to be_a(Capybara::ElementNotFound)
|
268
280
|
expect(e.message).to include 'not_there => bad'
|
281
|
+
expect(e.message).to include 'with presence attribute'
|
282
|
+
expect(e.message).to include 'without absence attribute'
|
269
283
|
expect(e.message).not_to include 'count 1'
|
270
284
|
end)
|
271
285
|
end
|
@@ -45,12 +45,7 @@ skipped_tests << :windows if ENV['TRAVIS'] && (ENV['SKIP_WINDOW'] || ENV['HEADLE
|
|
45
45
|
|
46
46
|
$stdout.puts `#{Selenium::WebDriver::Chrome.driver_path} --version` if ENV['CI']
|
47
47
|
|
48
|
-
Capybara::SpecHelper.run_specs TestSessions::Chrome, CHROME_DRIVER.to_s, capybara_skip: skipped_tests
|
49
|
-
case example.metadata[:description]
|
50
|
-
when /should fetch a response when sequentially visiting same destination with a target/
|
51
|
-
skip 'Chrome/chromedriver has an issue visiting URL with target after visiting same URL without target' if chrome_lt?(65.0, @session)
|
52
|
-
end
|
53
|
-
end
|
48
|
+
Capybara::SpecHelper.run_specs TestSessions::Chrome, CHROME_DRIVER.to_s, capybara_skip: skipped_tests
|
54
49
|
|
55
50
|
RSpec.describe 'Capybara::Session with chrome' do
|
56
51
|
include Capybara::SpecHelper
|
@@ -77,6 +77,6 @@ RSpec.describe 'Capybara::Session with remote Chrome' do
|
|
77
77
|
include_examples Capybara::RSpecMatchers, TestSessions::Chrome, CHROME_REMOTE_DRIVER
|
78
78
|
|
79
79
|
it 'is considered to be chrome' do
|
80
|
-
expect(session.driver.
|
80
|
+
expect(session.driver.browser.browser).to eq :chrome
|
81
81
|
end
|
82
82
|
end
|
@@ -64,10 +64,8 @@ Capybara::SpecHelper.run_specs TestSessions::RemoteFirefox, FIREFOX_REMOTE_DRIVE
|
|
64
64
|
pending "Firefox doesn't generate an event for shift+control+click" if marionette_gte?(62, @session)
|
65
65
|
when /^Capybara::Session selenium node #double_click/
|
66
66
|
pending "selenium-webdriver/geckodriver doesn't generate double click event" if marionette_lt?(59, @session)
|
67
|
-
when 'Capybara::Session selenium_firefox_remote #refresh it reposts'
|
68
|
-
skip 'Firefox insists on prompting without providing a way to suppress'
|
69
67
|
when 'Capybara::Session selenium_firefox_remote #accept_prompt should accept the prompt with a blank response when there is a default'
|
70
|
-
pending "Geckodriver doesn't set a blank response
|
68
|
+
pending "Geckodriver doesn't set a blank response in FF < 63 - https://bugzilla.mozilla.org/show_bug.cgi?id=1486485" if marionette_lt?(63, @session)
|
71
69
|
when 'Capybara::Session selenium_firefox_remote #attach_file with multipart form should fire change once for each set of files uploaded',
|
72
70
|
'Capybara::Session selenium_firefox_remote #attach_file with multipart form should fire change once when uploading multiple files from empty'
|
73
71
|
pending 'Due to having to work around selenium remote lack of multiple file upload support the change event count is off'
|
@@ -80,7 +78,6 @@ RSpec.describe 'Capybara::Session with remote firefox' do
|
|
80
78
|
include_examples Capybara::RSpecMatchers, TestSessions::RemoteFirefox, FIREFOX_REMOTE_DRIVER
|
81
79
|
|
82
80
|
it 'is considered to be firefox' do
|
83
|
-
expect(session.driver.
|
84
|
-
expect(session.driver.send(:marionette?)).to be_truthy
|
81
|
+
expect(session.driver.browser.browser).to eq :firefox
|
85
82
|
end
|
86
83
|
end
|
data/spec/selenium_spec_ie.rb
CHANGED
@@ -7,10 +7,13 @@ require 'rspec/shared_spec_matchers'
|
|
7
7
|
|
8
8
|
Capybara.register_driver :selenium_ie do |app|
|
9
9
|
# ::Selenium::WebDriver.logger.level = "debug"
|
10
|
+
options = ::Selenium::WebDriver::IE::Options.new
|
11
|
+
options.require_window_focus = true
|
10
12
|
Capybara::Selenium::Driver.new(
|
11
13
|
app,
|
12
14
|
browser: :ie,
|
13
|
-
desired_capabilities: ::Selenium::WebDriver::Remote::Capabilities.ie
|
15
|
+
desired_capabilities: ::Selenium::WebDriver::Remote::Capabilities.ie,
|
16
|
+
options: options
|
14
17
|
)
|
15
18
|
end
|
16
19
|
|
@@ -18,6 +21,8 @@ module TestSessions
|
|
18
21
|
SeleniumIE = Capybara::Session.new(:selenium_ie, TestApp)
|
19
22
|
end
|
20
23
|
|
24
|
+
TestSessions::SeleniumIE.current_window.resize_to(800, 500)
|
25
|
+
|
21
26
|
skipped_tests = %i[response_headers status_code trigger modals hover form_attribute windows]
|
22
27
|
|
23
28
|
$stdout.puts `#{Selenium::WebDriver::IE.driver_path} --version` if ENV['CI']
|
@@ -27,18 +32,50 @@ TestSessions::SeleniumIE.current_window.resize_to(1600, 1200)
|
|
27
32
|
Capybara::SpecHelper.run_specs TestSessions::SeleniumIE, 'selenium', capybara_skip: skipped_tests do |example|
|
28
33
|
case example.metadata[:full_description]
|
29
34
|
when /#refresh it reposts$/
|
30
|
-
skip '
|
35
|
+
skip 'IE insists on prompting without providing a way to suppress'
|
31
36
|
when /#click_link can download a file$/
|
32
37
|
skip 'Not sure how to configure IE for automatic downloading'
|
33
38
|
when /#fill_in with Date /
|
34
39
|
pending "IE 11 doesn't support date input types"
|
35
40
|
when /#click_link_or_button with :disabled option happily clicks on links which incorrectly have the disabled attribute$/
|
36
|
-
|
41
|
+
skip 'IE 11 obeys non-standard disabled attribute on anchor tag'
|
42
|
+
when /#right_click should allow modifiers$/
|
43
|
+
skip "Windows can't :meta click because :meta triggers start menu"
|
44
|
+
when /#click should allow multiple modifiers$/
|
45
|
+
skip "Windows can't :meta click because :meta triggers start menu"
|
46
|
+
when /#double_click should allow multiple modifiers$/
|
47
|
+
skip "Windows can't :alt double click due to being properties shortcut"
|
48
|
+
when /via clicking the wrapping label if possible$/
|
49
|
+
pending 'IEDriver has an issue with the click location of elements with multiple children if the first child is a text node and the page is scrolled'
|
37
50
|
end
|
38
51
|
end
|
39
52
|
|
40
|
-
RSpec.describe 'Capybara::Session with Internet Explorer', capybara_skip: skipped_tests do
|
53
|
+
RSpec.describe 'Capybara::Session with Internet Explorer', capybara_skip: skipped_tests do # rubocop:disable RSpec/MultipleDescribes
|
41
54
|
include Capybara::SpecHelper
|
42
55
|
include_examples 'Capybara::Session', TestSessions::SeleniumIE, :selenium_ie
|
43
56
|
include_examples Capybara::RSpecMatchers, TestSessions::SeleniumIE, :selenium_ie
|
44
57
|
end
|
58
|
+
|
59
|
+
RSpec.describe Capybara::Selenium::Node do
|
60
|
+
it '#right_click should allow modifiers' do
|
61
|
+
session = TestSessions::SeleniumIE
|
62
|
+
session.visit('/with_js')
|
63
|
+
session.find(:css, '#click-test').right_click(:control)
|
64
|
+
expect(session).to have_link('Has been control right clicked')
|
65
|
+
end
|
66
|
+
|
67
|
+
it '#click should allow multiple modifiers' do
|
68
|
+
session = TestSessions::SeleniumIE
|
69
|
+
session.visit('with_js')
|
70
|
+
# IE triggers system behavior with :meta so can't use those here
|
71
|
+
session.find(:css, '#click-test').click(:ctrl, :shift, :alt)
|
72
|
+
expect(session).to have_link('Has been alt control shift clicked')
|
73
|
+
end
|
74
|
+
|
75
|
+
it '#double_click should allow modifiers' do
|
76
|
+
session = TestSessions::SeleniumIE
|
77
|
+
session.visit('/with_js')
|
78
|
+
session.find(:css, '#click-test').double_click(:shift)
|
79
|
+
expect(session).to have_link('Has been shift double clicked')
|
80
|
+
end
|
81
|
+
end
|
@@ -54,10 +54,8 @@ Capybara::SpecHelper.run_specs TestSessions::SeleniumMarionette, 'selenium', cap
|
|
54
54
|
pending "Firefox doesn't generate an event for shift+control+click" if marionette_gte?(62, @session)
|
55
55
|
when /^Capybara::Session selenium node #double_click/
|
56
56
|
pending "selenium-webdriver/geckodriver doesn't generate double click event" if marionette_lt?(59, @session)
|
57
|
-
when 'Capybara::Session selenium #refresh it reposts'
|
58
|
-
skip 'Firefox insists on prompting without providing a way to suppress'
|
59
57
|
when 'Capybara::Session selenium #accept_prompt should accept the prompt with a blank response when there is a default'
|
60
|
-
pending "Geckodriver doesn't set a blank response
|
58
|
+
pending "Geckodriver doesn't set a blank response in FF < 63 - https://bugzilla.mozilla.org/show_bug.cgi?id=1486485" if marionette_lt?(63, @session)
|
61
59
|
when 'Capybara::Session selenium #attach_file with multipart form should fire change once for each set of files uploaded'
|
62
60
|
pending 'Gekcodriver appends files so we have to first call clear for multiple files which creates an extra change ' \
|
63
61
|
'if files are already set'
|
@@ -145,28 +143,6 @@ RSpec.describe Capybara::Selenium::Driver do
|
|
145
143
|
end
|
146
144
|
end
|
147
145
|
end
|
148
|
-
|
149
|
-
context '#refresh' do
|
150
|
-
def extract_results(session)
|
151
|
-
expect(session).to have_xpath("//pre[@id='results']")
|
152
|
-
YAML.load Nokogiri::HTML(session.body).xpath("//pre[@id='results']").first.inner_html.lstrip
|
153
|
-
end
|
154
|
-
|
155
|
-
it 'can repost by accepting confirm' do
|
156
|
-
@session = TestSessions::SeleniumMarionette
|
157
|
-
@session.visit('/form')
|
158
|
-
@session.select('Sweden', from: 'form_region')
|
159
|
-
@session.click_button('awesome')
|
160
|
-
sleep 1
|
161
|
-
expect do
|
162
|
-
@session.accept_confirm(wait: 0.1) do
|
163
|
-
@session.refresh
|
164
|
-
sleep 2
|
165
|
-
end
|
166
|
-
sleep 1
|
167
|
-
end.to change { extract_results(@session)['post_count'] }.by(1)
|
168
|
-
end
|
169
|
-
end
|
170
146
|
end
|
171
147
|
|
172
148
|
RSpec.describe Capybara::Selenium::Node do
|
@@ -305,7 +305,7 @@ RSpec.shared_examples 'Capybara::Session' do |session, mode|
|
|
305
305
|
expect(session).not_to have_xpath('//div[contains(., "HTML5 Dropped drag_html5")]')
|
306
306
|
end
|
307
307
|
|
308
|
-
it 'should
|
308
|
+
it 'should HTML5 drag and drop when scrolling needed' do
|
309
309
|
pending "Firefox < 62 doesn't support a DataTransfer constuctor" if marionette_lt?(62.0, session)
|
310
310
|
session.visit('/with_js')
|
311
311
|
element = session.find('//div[@id="drag_html5_scroll"]')
|
@@ -323,26 +323,84 @@ RSpec.shared_examples 'Capybara::Session' do |session, mode|
|
|
323
323
|
end
|
324
324
|
end
|
325
325
|
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
326
|
+
describe 'Capybara#disable_animation' do
|
327
|
+
context 'when set to `true`' do
|
328
|
+
before(:context) do # rubocop:disable RSpec/BeforeAfterAll
|
329
|
+
# NOTE: Although Capybara.SpecHelper.reset! sets Capybara.disable_animation to false,
|
330
|
+
# it doesn't affect any of these tests because the settings are applied per-session
|
331
|
+
Capybara.disable_animation = true
|
332
|
+
@animation_session = Capybara::Session.new(session.mode, TestApp.new)
|
333
|
+
end
|
334
|
+
|
335
|
+
after(:context) do # rubocop:disable RSpec/BeforeAfterAll
|
336
|
+
@animation_session = nil
|
337
|
+
end
|
338
|
+
|
339
|
+
it 'should disable CSS transitions' do
|
340
|
+
@animation_session.visit('with_animation')
|
341
|
+
@animation_session.click_link('transition me away')
|
342
|
+
expect(@animation_session).to have_no_link('transition me away', wait: 0.5)
|
343
|
+
end
|
331
344
|
|
332
|
-
|
333
|
-
|
345
|
+
it 'should disable CSS animations' do
|
346
|
+
@animation_session.visit('with_animation')
|
347
|
+
@animation_session.click_link('animate me away')
|
348
|
+
expect(@animation_session).to have_no_link('animate me away', wait: 0.5)
|
349
|
+
end
|
334
350
|
end
|
335
351
|
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
352
|
+
context 'if we pass in css that matches elements' do
|
353
|
+
before(:context) do # rubocop:disable RSpec/BeforeAfterAll
|
354
|
+
# NOTE: Although Capybara.SpecHelper.reset! sets Capybara.disable_animation to false,
|
355
|
+
# it doesn't affect any of these tests because the settings are applied per-session
|
356
|
+
Capybara.disable_animation = '#with_animation a'
|
357
|
+
@animation_session_with_matching_css = Capybara::Session.new(session.mode, TestApp.new)
|
358
|
+
end
|
359
|
+
|
360
|
+
after(:context) do # rubocop:disable RSpec/BeforeAfterAll
|
361
|
+
@animation_session_with_matching_css = nil
|
362
|
+
end
|
363
|
+
|
364
|
+
it 'should disable CSS transitions' do
|
365
|
+
@animation_session_with_matching_css.visit('with_animation')
|
366
|
+
@animation_session_with_matching_css.click_link('transition me away')
|
367
|
+
expect(@animation_session_with_matching_css).to have_no_link('transition me away', wait: 0.5)
|
368
|
+
end
|
369
|
+
|
370
|
+
it 'should disable CSS animations' do
|
371
|
+
@animation_session_with_matching_css.visit('with_animation')
|
372
|
+
@animation_session_with_matching_css.click_link('animate me away')
|
373
|
+
expect(@animation_session_with_matching_css).to have_no_link('animate me away', wait: 0.5)
|
374
|
+
end
|
340
375
|
end
|
341
376
|
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
377
|
+
context 'if we pass in css that does not match elements' do
|
378
|
+
before(:context) do # rubocop:disable RSpec/BeforeAfterAll
|
379
|
+
# NOTE: Although Capybara.SpecHelper.reset! sets Capybara.disable_animation to false,
|
380
|
+
# it doesn't affect any of these tests because the settings are applied per-session
|
381
|
+
Capybara.disable_animation = '.this-class-matches-nothing'
|
382
|
+
@animation_session_without_matching_css = Capybara::Session.new(session.mode, TestApp.new)
|
383
|
+
end
|
384
|
+
|
385
|
+
after(:context) do # rubocop:disable RSpec/BeforeAfterAll
|
386
|
+
@animation_session_without_matching_css = nil
|
387
|
+
end
|
388
|
+
|
389
|
+
it 'should not disable CSS transitions' do
|
390
|
+
@animation_session_without_matching_css.visit('with_animation')
|
391
|
+
@animation_session_without_matching_css.click_link('transition me away')
|
392
|
+
sleep 0.5 # Wait long enough for click to have been processed
|
393
|
+
expect(@animation_session_without_matching_css).to have_link('transition me away', wait: false)
|
394
|
+
expect(@animation_session_without_matching_css).to have_no_link('transition me away', wait: 5)
|
395
|
+
end
|
396
|
+
|
397
|
+
it 'should not disable CSS animations' do
|
398
|
+
@animation_session_without_matching_css.visit('with_animation')
|
399
|
+
@animation_session_without_matching_css.click_link('animate me away')
|
400
|
+
sleep 0.5 # Wait long enough for click to have been processed
|
401
|
+
expect(@animation_session_without_matching_css).to have_link('animate me away', wait: false)
|
402
|
+
expect(@animation_session_without_matching_css).to have_no_link('animate me away', wait: 5)
|
403
|
+
end
|
346
404
|
end
|
347
405
|
end
|
348
406
|
end
|