capybara 2.10.2 → 2.11.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (53) hide show
  1. checksums.yaml +4 -4
  2. data/History.md +15 -0
  3. data/README.md +48 -29
  4. data/lib/capybara.rb +8 -9
  5. data/lib/capybara/node/actions.rb +39 -48
  6. data/lib/capybara/node/document.rb +4 -0
  7. data/lib/capybara/node/document_matchers.rb +13 -14
  8. data/lib/capybara/node/element.rb +21 -0
  9. data/lib/capybara/node/finders.rb +3 -3
  10. data/lib/capybara/node/matchers.rb +38 -31
  11. data/lib/capybara/node/simple.rb +3 -0
  12. data/lib/capybara/queries/selector_query.rb +4 -2
  13. data/lib/capybara/rack_test/node.rb +1 -1
  14. data/lib/capybara/result.rb +3 -1
  15. data/lib/capybara/rspec/matchers.rb +53 -95
  16. data/lib/capybara/selector.rb +7 -7
  17. data/lib/capybara/selector/selector.rb +10 -5
  18. data/lib/capybara/selenium/driver.rb +34 -7
  19. data/lib/capybara/selenium/node.rb +5 -1
  20. data/lib/capybara/session.rb +22 -27
  21. data/lib/capybara/session/matchers.rb +12 -14
  22. data/lib/capybara/spec/public/test.js +4 -0
  23. data/lib/capybara/spec/session/accept_alert_spec.rb +1 -1
  24. data/lib/capybara/spec/session/attach_file_spec.rb +1 -1
  25. data/lib/capybara/spec/session/check_spec.rb +8 -0
  26. data/lib/capybara/spec/session/choose_spec.rb +5 -0
  27. data/lib/capybara/spec/session/click_link_or_button_spec.rb +5 -0
  28. data/lib/capybara/spec/session/click_link_spec.rb +5 -0
  29. data/lib/capybara/spec/session/element/assert_match_selector.rb +5 -0
  30. data/lib/capybara/spec/session/element/match_css_spec.rb +6 -0
  31. data/lib/capybara/spec/session/element/matches_selector_spec.rb +2 -0
  32. data/lib/capybara/spec/session/fill_in_spec.rb +5 -0
  33. data/lib/capybara/spec/session/find_spec.rb +1 -1
  34. data/lib/capybara/spec/session/first_spec.rb +10 -0
  35. data/lib/capybara/spec/session/has_selector_spec.rb +11 -0
  36. data/lib/capybara/spec/session/node_spec.rb +3 -3
  37. data/lib/capybara/spec/session/text_spec.rb +3 -4
  38. data/lib/capybara/spec/views/with_js.erb +3 -1
  39. data/lib/capybara/version.rb +1 -1
  40. data/lib/capybara/window.rb +18 -2
  41. data/spec/basic_node_spec.rb +1 -1
  42. data/spec/capybara_spec.rb +4 -1
  43. data/spec/fixtures/selenium_driver_rspec_failure.rb +4 -1
  44. data/spec/fixtures/selenium_driver_rspec_success.rb +4 -1
  45. data/spec/result_spec.rb +28 -2
  46. data/spec/rspec/{matchers_spec.rb → shared_spec_matchers.rb} +4 -3
  47. data/spec/selector_spec.rb +1 -1
  48. data/spec/selenium_spec_chrome.rb +36 -5
  49. data/spec/selenium_spec_firefox.rb +67 -0
  50. data/spec/selenium_spec_marionette.rb +114 -0
  51. data/spec/shared_selenium_session.rb +6 -4
  52. metadata +13 -6
  53. 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
- result = @session.find(:xpath, XPath.descendant[XPath.attr(:class).is("almost_singular but")], match: :smart, exact: true)
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 /Your application server raised an error/
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], twtw: true do
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 /Your application server raised an error/
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
- n = @session.find(:css, '#second')
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
@@ -97,7 +97,9 @@
97
97
  <p>
98
98
  <input id="disable-on-click"/>
99
99
  </p>
100
-
100
+ <p>
101
+ <input id="set-storage"/>
102
+ </p>
101
103
  <p>
102
104
  <a href="#" id="delayed-page-change">Change page</a>
103
105
  <a href="/with_html?options[]=things">Non-escaped query options</a>
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module Capybara
3
- VERSION = '2.10.2'
3
+ VERSION = '2.11.0'
4
4
  end
@@ -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."
@@ -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| "//option[contains(.,'#{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')
@@ -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.dup)
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
- browser = Capybara::Selenium::Driver.new(TestApp, browser: (ENV['SELENIUM_BROWSER'] || :firefox).to_sym).browser
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
- browser = Capybara::Selenium::Driver.new(TestApp, browser: (ENV['SELENIUM_BROWSER'] || :firefox).to_sym).browser
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
@@ -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 &:text).to eq ['Alpha', 'Beta']
70
- expect(result[1..3].map &:text).to eq ['Beta', 'Gamma', 'Delta']
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.describe Capybara::RSpecMatchers do
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 = TestSessions::Selenium
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 = TestSessions::Selenium
590
+ @session = session
590
591
  @session.visit('/with_js')
591
592
  end
592
593
 
@@ -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 &:native
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
- Capybara::SpecHelper.run_specs TestSessions::Chrome, "selenium_chrome", capybara_skip: [
16
- :response_headers,
17
- :status_code,
18
- :trigger
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
+