capybara 2.10.2 → 2.11.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/History.md +15 -0
- data/README.md +48 -29
- data/lib/capybara.rb +8 -9
- data/lib/capybara/node/actions.rb +39 -48
- data/lib/capybara/node/document.rb +4 -0
- data/lib/capybara/node/document_matchers.rb +13 -14
- data/lib/capybara/node/element.rb +21 -0
- data/lib/capybara/node/finders.rb +3 -3
- data/lib/capybara/node/matchers.rb +38 -31
- data/lib/capybara/node/simple.rb +3 -0
- data/lib/capybara/queries/selector_query.rb +4 -2
- data/lib/capybara/rack_test/node.rb +1 -1
- data/lib/capybara/result.rb +3 -1
- data/lib/capybara/rspec/matchers.rb +53 -95
- data/lib/capybara/selector.rb +7 -7
- data/lib/capybara/selector/selector.rb +10 -5
- data/lib/capybara/selenium/driver.rb +34 -7
- data/lib/capybara/selenium/node.rb +5 -1
- data/lib/capybara/session.rb +22 -27
- data/lib/capybara/session/matchers.rb +12 -14
- data/lib/capybara/spec/public/test.js +4 -0
- data/lib/capybara/spec/session/accept_alert_spec.rb +1 -1
- data/lib/capybara/spec/session/attach_file_spec.rb +1 -1
- data/lib/capybara/spec/session/check_spec.rb +8 -0
- data/lib/capybara/spec/session/choose_spec.rb +5 -0
- data/lib/capybara/spec/session/click_link_or_button_spec.rb +5 -0
- data/lib/capybara/spec/session/click_link_spec.rb +5 -0
- data/lib/capybara/spec/session/element/assert_match_selector.rb +5 -0
- data/lib/capybara/spec/session/element/match_css_spec.rb +6 -0
- data/lib/capybara/spec/session/element/matches_selector_spec.rb +2 -0
- data/lib/capybara/spec/session/fill_in_spec.rb +5 -0
- data/lib/capybara/spec/session/find_spec.rb +1 -1
- data/lib/capybara/spec/session/first_spec.rb +10 -0
- data/lib/capybara/spec/session/has_selector_spec.rb +11 -0
- data/lib/capybara/spec/session/node_spec.rb +3 -3
- data/lib/capybara/spec/session/text_spec.rb +3 -4
- data/lib/capybara/spec/views/with_js.erb +3 -1
- data/lib/capybara/version.rb +1 -1
- data/lib/capybara/window.rb +18 -2
- data/spec/basic_node_spec.rb +1 -1
- data/spec/capybara_spec.rb +4 -1
- data/spec/fixtures/selenium_driver_rspec_failure.rb +4 -1
- data/spec/fixtures/selenium_driver_rspec_success.rb +4 -1
- data/spec/result_spec.rb +28 -2
- data/spec/rspec/{matchers_spec.rb → shared_spec_matchers.rb} +4 -3
- data/spec/selector_spec.rb +1 -1
- data/spec/selenium_spec_chrome.rb +36 -5
- data/spec/selenium_spec_firefox.rb +67 -0
- data/spec/selenium_spec_marionette.rb +114 -0
- data/spec/shared_selenium_session.rb +6 -4
- metadata +13 -6
- data/spec/selenium_firefox_spec.rb +0 -44
@@ -52,6 +52,8 @@ Capybara::SpecHelper.spec '#match_selector?' do
|
|
52
52
|
it 'should accept a custom filter block' do
|
53
53
|
@session.visit('/form')
|
54
54
|
cbox = @session.find(:css, '#form_pets_dog')
|
55
|
+
expect(cbox).to match_selector(:checkbox){ |node| node[:id] == "form_pets_dog"}
|
56
|
+
expect(cbox).not_to match_selector(:checkbox){ |node| node[:id] != "form_pets_dog"}
|
55
57
|
expect(cbox.matches_selector?(:checkbox){ |node| node[:id] == "form_pets_dog"}).to be true
|
56
58
|
expect(cbox.matches_selector?(:checkbox){ |node| node[:id] != "form_pets_dog"}).to be false
|
57
59
|
end
|
@@ -181,4 +181,9 @@ Capybara::SpecHelper.spec "#fill_in" do
|
|
181
181
|
end.to raise_error(Capybara::ElementNotFound)
|
182
182
|
end
|
183
183
|
end
|
184
|
+
|
185
|
+
it "should return the element filled in" do
|
186
|
+
el = @session.find(:fillable_field, 'form_first_name')
|
187
|
+
expect(@session.fill_in('form_first_name', with: 'Harry')).to eq el
|
188
|
+
end
|
184
189
|
end
|
@@ -320,7 +320,7 @@ Capybara::SpecHelper.spec '#find' do
|
|
320
320
|
end
|
321
321
|
it "raises an error when there is a single inexact matches" do
|
322
322
|
expect do
|
323
|
-
|
323
|
+
@session.find(:xpath, XPath.descendant[XPath.attr(:class).is("almost_singular but")], match: :smart, exact: true)
|
324
324
|
end.to raise_error(Capybara::ElementNotFound)
|
325
325
|
end
|
326
326
|
it "raises an error if there is no match" do
|
@@ -19,6 +19,11 @@ Capybara::SpecHelper.spec '#first' do
|
|
19
19
|
expect(@session.first(@xpath).value).to eq('John')
|
20
20
|
end
|
21
21
|
|
22
|
+
it "should warn when unused parameters are passed" do
|
23
|
+
expect_any_instance_of(Kernel).to receive(:warn).with(/Unused parameters passed.*unused text/)
|
24
|
+
@session.first(:css, '.header h2', 'unused text')
|
25
|
+
end
|
26
|
+
|
22
27
|
context "with css selectors" do
|
23
28
|
it "should find the first element using the given selector" do
|
24
29
|
expect(@session.first(:css, 'h1').text).to eq('This is a test')
|
@@ -48,21 +53,26 @@ Capybara::SpecHelper.spec '#first' do
|
|
48
53
|
|
49
54
|
it "should find nodes regardless of whether they are invisible when false" do
|
50
55
|
expect(@session.first(:css, "a#invisible", visible: false)).not_to be_nil
|
56
|
+
expect(@session.first(:css, "a#invisible", visible: false, text: 'hidden link')).not_to be_nil
|
51
57
|
expect(@session.first(:css, "a#visible", visible: false)).not_to be_nil
|
52
58
|
end
|
53
59
|
|
54
60
|
it "should find nodes regardless of whether they are invisible when :all" do
|
55
61
|
expect(@session.first(:css, "a#invisible", visible: :all)).not_to be_nil
|
62
|
+
expect(@session.first(:css, "a#invisible", visible: :all, text: 'hidden link')).not_to be_nil
|
56
63
|
expect(@session.first(:css, "a#visible", visible: :all)).not_to be_nil
|
57
64
|
end
|
58
65
|
|
59
66
|
it "should find only hidden nodes when :hidden" do
|
60
67
|
expect(@session.first(:css, "a#invisible", visible: :hidden)).not_to be_nil
|
68
|
+
expect(@session.first(:css, "a#invisible", visible: :hidden, text: 'hidden link')).not_to be_nil
|
69
|
+
expect(@session.first(:css, "a#invisible", visible: :hidden, text: 'not hidden link')).to be_nil
|
61
70
|
expect(@session.first(:css, "a#visible", visible: :hidden)).to be_nil
|
62
71
|
end
|
63
72
|
|
64
73
|
it "should find only visible nodes when :visible" do
|
65
74
|
expect(@session.first(:css, "a#invisible", visible: :visible)).to be_nil
|
75
|
+
expect(@session.first(:css, "a#invisible", visible: :visible, text: 'hidden link')).to be_nil
|
66
76
|
expect(@session.first(:css, "a#visible", visible: :visible)).not_to be_nil
|
67
77
|
end
|
68
78
|
|
@@ -29,6 +29,10 @@ Capybara::SpecHelper.spec '#has_selector?' do
|
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
32
|
+
it "should accept a filter block" do
|
33
|
+
expect(@session).to have_selector(:css, "a", count: 1) { |el| el[:id] == "foo" }
|
34
|
+
end
|
35
|
+
|
32
36
|
context "with count" do
|
33
37
|
it "should be true if the content is on the page the given number of times" do
|
34
38
|
expect(@session).to have_selector("//p", count: 3)
|
@@ -105,6 +109,13 @@ Capybara::SpecHelper.spec '#has_no_selector?' do
|
|
105
109
|
end
|
106
110
|
end
|
107
111
|
|
112
|
+
it "should accept a filter block" do
|
113
|
+
if !defined?(::RSpec::Expectations::Version) || (Gem::Version.new(RSpec::Expectations::Version::STRING) < Gem::Version.new('3.0'))
|
114
|
+
skip "RSpec < 3 doesn't pass the block along to the matcher for the Builtin::Has matcher"
|
115
|
+
end
|
116
|
+
expect(@session).to have_no_selector(:css, "a#foo") { |el| el[:id] != "foo" }
|
117
|
+
end
|
118
|
+
|
108
119
|
context "with count" do
|
109
120
|
it "should be false if the content is on the page the given number of times" do
|
110
121
|
expect(@session).not_to have_no_selector("//p", count: 3)
|
@@ -425,18 +425,18 @@ Capybara::SpecHelper.spec "node" do
|
|
425
425
|
@session.find(:css, 'span')
|
426
426
|
end.to raise_error(TestApp::TestAppError) do |e|
|
427
427
|
expect(e.cause).to be_a Capybara::CapybaraError
|
428
|
-
expect(e.cause.message).to match
|
428
|
+
expect(e.cause.message).to match(/Your application server raised an error/)
|
429
429
|
end
|
430
430
|
end
|
431
431
|
|
432
|
-
it "sets an explanatory exception as the cause of server exceptions with errors with initializers", requires: [:server, :js]
|
432
|
+
it "sets an explanatory exception as the cause of server exceptions with errors with initializers", requires: [:server, :js] do
|
433
433
|
skip "This version of ruby doesn't support exception causes" unless Exception.instance_methods.include? :cause
|
434
434
|
quietly { @session.visit("/other_error") }
|
435
435
|
expect do
|
436
436
|
@session.find(:css, 'span')
|
437
437
|
end.to raise_error(TestApp::TestAppOtherError) do |e|
|
438
438
|
expect(e.cause).to be_a Capybara::CapybaraError
|
439
|
-
expect(e.cause.message).to match
|
439
|
+
expect(e.cause.message).to match(/Your application server raised an error/)
|
440
440
|
end
|
441
441
|
end
|
442
442
|
end
|
@@ -35,7 +35,7 @@ Capybara::SpecHelper.spec '#text' do
|
|
35
35
|
Capybara.ignore_hidden_elements = false
|
36
36
|
expect(@session.find(:id, "hidden-text").text).to eq('Some of this text is')
|
37
37
|
end
|
38
|
-
|
38
|
+
|
39
39
|
it "ignores invisible text if ancestor is invisible" do
|
40
40
|
@session.visit('/with_html')
|
41
41
|
expect(@session.find(:id, "hidden_via_ancestor", visible: false).text).to eq('')
|
@@ -52,8 +52,7 @@ Capybara::SpecHelper.spec '#text' do
|
|
52
52
|
|
53
53
|
it "should strip whitespace" do
|
54
54
|
@session.visit('/with_html')
|
55
|
-
|
56
|
-
expect(@session.find(:css, '#second').text).to match
|
57
|
-
/\ADuis aute .* text with whitespace .* est laborum\.\z/
|
55
|
+
@session.find(:css, '#second')
|
56
|
+
expect(@session.find(:css, '#second').text).to match(/\ADuis aute .* text with whitespace .* est laborum\.\z/)
|
58
57
|
end
|
59
58
|
end
|
data/lib/capybara/version.rb
CHANGED
data/lib/capybara/window.rb
CHANGED
@@ -85,7 +85,7 @@ module Capybara
|
|
85
85
|
# @param height [String] the new window height in pixels
|
86
86
|
#
|
87
87
|
def resize_to(width, height)
|
88
|
-
@driver.resize_window_to(handle, width, height)
|
88
|
+
wait_for_stable_size { @driver.resize_window_to(handle, width, height) }
|
89
89
|
end
|
90
90
|
|
91
91
|
##
|
@@ -97,7 +97,7 @@ module Capybara
|
|
97
97
|
# @macro about_current
|
98
98
|
#
|
99
99
|
def maximize
|
100
|
-
@driver.maximize_window(handle)
|
100
|
+
wait_for_stable_size { @driver.maximize_window(handle) }
|
101
101
|
end
|
102
102
|
|
103
103
|
def eql?(other)
|
@@ -115,6 +115,22 @@ module Capybara
|
|
115
115
|
|
116
116
|
private
|
117
117
|
|
118
|
+
def wait_for_stable_size(seconds=Capybara.default_max_wait_time)
|
119
|
+
res = yield if block_given?
|
120
|
+
prev_size = size
|
121
|
+
start_time = Capybara::Helpers.monotonic_time
|
122
|
+
begin
|
123
|
+
sleep 0.05
|
124
|
+
cur_size = size
|
125
|
+
return res if cur_size == prev_size
|
126
|
+
prev_size = cur_size
|
127
|
+
end while (Capybara::Helpers.monotonic_time - start_time) < seconds
|
128
|
+
#TODO raise error in 3.0
|
129
|
+
#raise Capybara::WindowError, "Window size not stable."
|
130
|
+
warn "Window size not stable in #{seconds} seconds. This will raise an exception in a future version of Capybara"
|
131
|
+
return res
|
132
|
+
end
|
133
|
+
|
118
134
|
def raise_unless_current(what)
|
119
135
|
unless current?
|
120
136
|
raise Capybara::WindowError, "#{what} not current window is not possible."
|
data/spec/basic_node_spec.rb
CHANGED
@@ -52,7 +52,7 @@ RSpec.describe Capybara do
|
|
52
52
|
|
53
53
|
it "allows using custom matchers" do
|
54
54
|
Capybara.add_selector :lifeform do
|
55
|
-
xpath { |name| "
|
55
|
+
xpath { |name| ".//option[contains(.,'#{name}')]" }
|
56
56
|
end
|
57
57
|
expect(string).to have_selector(:id, "page")
|
58
58
|
expect(string).not_to have_selector(:id, 'does-not-exist')
|
data/spec/capybara_spec.rb
CHANGED
@@ -46,11 +46,14 @@ RSpec.describe Capybara do
|
|
46
46
|
end
|
47
47
|
|
48
48
|
it "should add a new server" do
|
49
|
+
skip "JRuby fails this because of path issues to geckodriver I think. Its tested in other runs - not worth figuring out at this time" if RUBY_PLATFORM == 'java'
|
50
|
+
|
51
|
+
require 'rack/handler/webrick'
|
49
52
|
Capybara.register_server :blob do |app, port, host|
|
50
53
|
Rack::Handler::WEBrick.run(app, Host: host, Port: port, AccessLog: [], Logger: WEBrick::Log::new(nil, 0))
|
51
54
|
end
|
52
55
|
Capybara.server = :blob
|
53
|
-
session = Capybara::Session.new(:selenium, TestApp.
|
56
|
+
session = Capybara::Session.new(:selenium, TestApp.new)
|
54
57
|
session.visit('/')
|
55
58
|
expect(session.body).to include("Hello world!")
|
56
59
|
end
|
@@ -1,9 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
require 'spec_helper'
|
3
|
+
require 'selenium-webdriver'
|
3
4
|
|
4
5
|
RSpec.describe Capybara::Selenium::Driver do
|
5
6
|
it "should exit with a non-zero exit status" do
|
6
|
-
|
7
|
+
options = { browser: (ENV['SELENIUM_BROWSER'] || :firefox).to_sym }
|
8
|
+
options[:desired_capabilities] = Selenium::WebDriver::Remote::Capabilities.firefox(marionette: false) if ENV['LEGACY_FIREFOX']
|
9
|
+
browser = Capybara::Selenium::Driver.new(TestApp, options).browser
|
7
10
|
expect(true).to eq(false)
|
8
11
|
end
|
9
12
|
end
|
@@ -1,9 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
require 'spec_helper'
|
3
|
+
require 'selenium-webdriver'
|
3
4
|
|
4
5
|
RSpec.describe Capybara::Selenium::Driver do
|
5
6
|
it "should exit with a zero exit status" do
|
6
|
-
|
7
|
+
options = { browser: (ENV['SELENIUM_BROWSER'] || :firefox).to_sym }
|
8
|
+
options[:desired_capabilities] = Selenium::WebDriver::Remote::Capabilities.firefox(marionette: false) if ENV['LEGACY_FIREFOX']
|
9
|
+
browser = Capybara::Selenium::Driver.new(TestApp, options ).browser
|
7
10
|
expect(true).to eq(true)
|
8
11
|
end
|
9
12
|
end
|
data/spec/result_spec.rb
CHANGED
@@ -66,8 +66,8 @@ RSpec.describe Capybara::Result do
|
|
66
66
|
|
67
67
|
it 'supports all modes of []' do
|
68
68
|
expect(result[1].text).to eq 'Beta'
|
69
|
-
expect(result[0,2].map
|
70
|
-
expect(result[1..3].map
|
69
|
+
expect(result[0,2].map(&:text)).to eq ['Alpha', 'Beta']
|
70
|
+
expect(result[1..3].map(&:text)).to eq ['Beta', 'Gamma', 'Delta']
|
71
71
|
expect(result[-1].text).to eq 'Delta'
|
72
72
|
end
|
73
73
|
|
@@ -92,4 +92,30 @@ RSpec.describe Capybara::Result do
|
|
92
92
|
result.to_a
|
93
93
|
expect(result.instance_variable_get('@result_cache').size).to eq 4
|
94
94
|
end
|
95
|
+
|
96
|
+
context '#each' do
|
97
|
+
it 'lazily evaluates' do
|
98
|
+
skip 'JRuby has an issue with lazy enumerator next evaluation' if RUBY_PLATFORM == 'java'
|
99
|
+
results=[]
|
100
|
+
result.each do |el|
|
101
|
+
results << el
|
102
|
+
expect(result.instance_variable_get('@result_cache').size).to eq results.size
|
103
|
+
end
|
104
|
+
|
105
|
+
expect(results.size).to eq 4
|
106
|
+
end
|
107
|
+
|
108
|
+
context 'without a block' do
|
109
|
+
it 'returns an iterator' do
|
110
|
+
expect(result.each).to be_a(Enumerator)
|
111
|
+
end
|
112
|
+
|
113
|
+
it 'lazily evaluates' do
|
114
|
+
skip 'JRuby has an issue with lazy enumerator next evaluation' if RUBY_PLATFORM == 'java'
|
115
|
+
result.each.with_index do |el, idx|
|
116
|
+
expect(result.instance_variable_get('@result_cache').size).to eq(idx+1) # 0 indexing
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
95
121
|
end
|
@@ -3,7 +3,8 @@ require 'spec_helper'
|
|
3
3
|
require 'capybara/dsl'
|
4
4
|
require 'capybara/rspec/matchers'
|
5
5
|
|
6
|
-
RSpec.
|
6
|
+
RSpec.shared_examples Capybara::RSpecMatchers do |session, mode|
|
7
|
+
|
7
8
|
include Capybara::DSL
|
8
9
|
include Capybara::RSpecMatchers
|
9
10
|
|
@@ -541,7 +542,7 @@ RSpec.describe Capybara::RSpecMatchers do
|
|
541
542
|
|
542
543
|
context 'with wait' do
|
543
544
|
before(:each) do
|
544
|
-
@session =
|
545
|
+
@session = session
|
545
546
|
@session.visit('/with_js')
|
546
547
|
end
|
547
548
|
|
@@ -586,7 +587,7 @@ RSpec.describe Capybara::RSpecMatchers do
|
|
586
587
|
|
587
588
|
context 'with wait' do
|
588
589
|
before(:each) do
|
589
|
-
@session =
|
590
|
+
@session = session
|
590
591
|
@session.visit('/with_js')
|
591
592
|
end
|
592
593
|
|
data/spec/selector_spec.rb
CHANGED
@@ -102,7 +102,7 @@ RSpec.describe Capybara do
|
|
102
102
|
table: ".//table"
|
103
103
|
}
|
104
104
|
selectors.each do |selector, xpath|
|
105
|
-
results = string.all(selector,nil).to_a.map
|
105
|
+
results = string.all(selector,nil).to_a.map(&:native)
|
106
106
|
expect(results.size).to be > 0
|
107
107
|
expect(results).to eq string.all(:xpath, xpath).to_a.map(&:native)
|
108
108
|
end
|
@@ -8,16 +8,47 @@ Capybara.register_driver :selenium_chrome do |app|
|
|
8
8
|
Capybara::Selenium::Driver.new(app, :browser => :chrome, :args => args)
|
9
9
|
end
|
10
10
|
|
11
|
+
Capybara.register_driver :selenium_chrome_clear_storage do |app|
|
12
|
+
args = ENV['TRAVIS'] ? ['no-sandbox' ] : []
|
13
|
+
Capybara::Selenium::Driver.new(app, :browser => :chrome,
|
14
|
+
:args => args,
|
15
|
+
clear_local_storage: true,
|
16
|
+
clear_session_storage: true)
|
17
|
+
end
|
18
|
+
|
11
19
|
module TestSessions
|
12
20
|
Chrome = Capybara::Session.new(:selenium_chrome, TestApp)
|
13
21
|
end
|
14
22
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
] unless ENV['TRAVIS'] && (RUBY_PLATFORM == 'java')
|
23
|
+
skipped_tests = [:response_headers, :status_code, :trigger]
|
24
|
+
skipped_tests << :windows if ENV['TRAVIS'] && !ENV['WINDOW_TEST']
|
25
|
+
|
26
|
+
Capybara::SpecHelper.run_specs TestSessions::Chrome, "selenium_chrome", capybara_skip: skipped_tests
|
20
27
|
|
21
28
|
RSpec.describe "Capybara::Session with chrome" do
|
22
29
|
include_examples "Capybara::Session", TestSessions::Chrome, :selenium_chrome
|
30
|
+
|
31
|
+
context "storage" do
|
32
|
+
describe "#reset!" do
|
33
|
+
it "does not clear either storage by default" do
|
34
|
+
@session = TestSessions::Chrome
|
35
|
+
@session.visit('/with_js')
|
36
|
+
@session.find(:css, '#set-storage').click
|
37
|
+
@session.reset!
|
38
|
+
@session.visit('/with_js')
|
39
|
+
expect(@session.driver.browser.local_storage.keys).not_to be_empty
|
40
|
+
expect(@session.driver.browser.session_storage.keys).not_to be_empty
|
41
|
+
end
|
42
|
+
|
43
|
+
it "clears storage when set" do
|
44
|
+
@session = Capybara::Session.new(:selenium_chrome_clear_storage, TestApp)
|
45
|
+
@session.visit('/with_js')
|
46
|
+
@session.find(:css, '#set-storage').click
|
47
|
+
@session.reset!
|
48
|
+
@session.visit('/with_js')
|
49
|
+
expect(@session.driver.browser.local_storage.keys).to be_empty
|
50
|
+
expect(@session.driver.browser.session_storage.keys).to be_empty
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
23
54
|
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'spec_helper'
|
3
|
+
require "selenium-webdriver"
|
4
|
+
require 'shared_selenium_session'
|
5
|
+
require 'rspec/shared_spec_matchers'
|
6
|
+
|
7
|
+
Capybara.register_driver :selenium_firefox do |app|
|
8
|
+
Capybara::Selenium::Driver.new(
|
9
|
+
app,
|
10
|
+
browser: :firefox,
|
11
|
+
desired_capabilities: Selenium::WebDriver::Remote::Capabilities.firefox(marionette: false)
|
12
|
+
)
|
13
|
+
end
|
14
|
+
|
15
|
+
Capybara.register_driver :selenium_firefox_cant_clear_storage do |app|
|
16
|
+
Capybara::Selenium::Driver.new(
|
17
|
+
app,
|
18
|
+
browser: :firefox,
|
19
|
+
desired_capabilities: Selenium::WebDriver::Remote::Capabilities.firefox(marionette: false),
|
20
|
+
clear_local_storage: true,
|
21
|
+
clear_session_storage: true
|
22
|
+
)
|
23
|
+
end
|
24
|
+
|
25
|
+
module TestSessions
|
26
|
+
Selenium = Capybara::Session.new(:selenium_firefox, TestApp)
|
27
|
+
end
|
28
|
+
|
29
|
+
skipped_tests = [
|
30
|
+
:response_headers,
|
31
|
+
:status_code,
|
32
|
+
:trigger
|
33
|
+
]
|
34
|
+
skipped_tests << :windows if ENV['TRAVIS'] && !ENV['WINDOW_TEST']
|
35
|
+
|
36
|
+
Capybara::SpecHelper.run_specs TestSessions::Selenium, "selenium", capybara_skip: skipped_tests
|
37
|
+
|
38
|
+
RSpec.describe "Capybara::Session with legacy firefox" do
|
39
|
+
include_examples "Capybara::Session", TestSessions::Selenium, :selenium_firefox
|
40
|
+
include_examples Capybara::RSpecMatchers, TestSessions::Selenium, :selenium_firefox
|
41
|
+
|
42
|
+
context "storage" do
|
43
|
+
it "warns storage clearing isn't available" do
|
44
|
+
@session = Capybara::Session.new(:selenium_firefox_cant_clear_storage, TestApp)
|
45
|
+
expect_any_instance_of(Kernel).to receive(:warn).with('sessionStorage clear requested but is not available for this driver')
|
46
|
+
expect_any_instance_of(Kernel).to receive(:warn).with('localStorage clear requested but is not available for this driver')
|
47
|
+
@session.visit('/')
|
48
|
+
@session.reset!
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
RSpec.describe Capybara::Selenium::Driver do
|
54
|
+
before do
|
55
|
+
@driver = Capybara::Selenium::Driver.new(TestApp, browser: :firefox, desired_capabilities: Selenium::WebDriver::Remote::Capabilities.firefox(marionette: false))
|
56
|
+
end
|
57
|
+
|
58
|
+
describe '#quit' do
|
59
|
+
it "should reset browser when quit" do
|
60
|
+
expect(@driver.browser).to be
|
61
|
+
@driver.quit
|
62
|
+
#access instance variable directly so we don't create a new browser instance
|
63
|
+
expect(@driver.instance_variable_get(:@browser)).to be_nil
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|