capybara 2.10.2 → 2.11.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.
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
@@ -0,0 +1,114 @@
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_marionette do |app|
8
+ Capybara::Selenium::Driver.new(
9
+ app,
10
+ browser: :firefox,
11
+ desired_capabilities: Selenium::WebDriver::Remote::Capabilities.firefox(marionette: true)
12
+ )
13
+ end
14
+
15
+ Capybara.register_driver :selenium_marionette_clear_storage do |app|
16
+ Capybara::Selenium::Driver.new(
17
+ app,
18
+ browser: :firefox,
19
+ desired_capabilities: Selenium::WebDriver::Remote::Capabilities.firefox(marionette: true),
20
+ clear_local_storage: true,
21
+ clear_session_storage: true
22
+ )
23
+ end
24
+
25
+ module TestSessions
26
+ SeleniumMarionette = Capybara::Session.new(:selenium_marionette, 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::SeleniumMarionette, "selenium", capybara_skip: skipped_tests
37
+
38
+ RSpec.describe "Capybara::Session with firefox" do
39
+ include_examples "Capybara::Session", TestSessions::SeleniumMarionette, :selenium_marionette
40
+ include_examples Capybara::RSpecMatchers, TestSessions::SeleniumMarionette, :selenium_marionette
41
+ end
42
+
43
+ RSpec.describe Capybara::Selenium::Driver do
44
+ before do
45
+ @driver = Capybara::Selenium::Driver.new(TestApp, browser: :firefox)
46
+ end
47
+
48
+ describe '#quit' do
49
+ it "should reset browser when quit" do
50
+ expect(@driver.browser).to be
51
+ @driver.quit
52
+ #access instance variable directly so we don't create a new browser instance
53
+ expect(@driver.instance_variable_get(:@browser)).to be_nil
54
+ end
55
+
56
+ context "with errors" do
57
+ before do
58
+ @original_browser = @driver.browser
59
+ end
60
+ after do
61
+ # Ensure browser is actually quit so we don't leave hanging processe
62
+ RSpec::Mocks.space.proxy_for(@original_browser).reset
63
+ @original_browser.quit
64
+ end
65
+
66
+ it "warns UnknownError returned during quit because the browser is probably already gone" do
67
+ expect_any_instance_of(Capybara::Selenium::Driver).to receive(:warn).with(/random message/)
68
+ allow(@driver.browser).to(
69
+ receive(:quit)
70
+ .and_raise(Selenium::WebDriver::Error::UnknownError, "random message")
71
+ )
72
+
73
+ expect { @driver.quit }.not_to raise_error
74
+ expect(@driver.instance_variable_get(:@browser)).to be_nil
75
+ end
76
+
77
+ it "ignores silenced UnknownError returned during quit because the browser is almost definitely already gone" do
78
+ expect_any_instance_of(Capybara::Selenium::Driver).not_to receive(:warn)
79
+ allow(@driver.browser).to(
80
+ receive(:quit)
81
+ .and_raise(Selenium::WebDriver::Error::UnknownError, "Error communicating with the remote browser")
82
+ )
83
+
84
+ expect { @driver.quit }.not_to raise_error
85
+ expect(@driver.instance_variable_get(:@browser)).to be_nil
86
+ end
87
+ end
88
+ end
89
+
90
+ context "storage" do
91
+ describe "#reset!" do
92
+ it "does not clear either storage by default" do
93
+ @session = TestSessions::SeleniumMarionette
94
+ @session.visit('/with_js')
95
+ @session.find(:css, '#set-storage').click
96
+ @session.reset!
97
+ @session.visit('/with_js')
98
+ expect(@session.driver.browser.local_storage.keys).not_to be_empty
99
+ expect(@session.driver.browser.session_storage.keys).not_to be_empty
100
+ end
101
+
102
+ it "clears storage when set" do
103
+ @session = Capybara::Session.new(:selenium_marionette_clear_storage, TestApp)
104
+ @session.visit('/with_js')
105
+ @session.find(:css, '#set-storage').click
106
+ @session.reset!
107
+ @session.visit('/with_js')
108
+ expect(@session.driver.browser.local_storage.keys).to be_empty
109
+ expect(@session.driver.browser.session_storage.keys).to be_empty
110
+ end
111
+ end
112
+ end
113
+ end
114
+
@@ -41,14 +41,16 @@ RSpec.shared_examples "Capybara::Session" do |session, mode|
41
41
  end
42
42
 
43
43
  it "should have return code 1 when running selenium_driver_rspec_failure.rb" do
44
- ENV['SELENIUM_BROWSER'] = @session.driver.options[:browser].to_s
45
- `rspec spec/fixtures/selenium_driver_rspec_failure.rb`
44
+ env = { 'SELENIUM_BROWSER' => @session.driver.options[:browser].to_s,
45
+ 'LEGACY_FIREFOX' => (mode == :selenium_firefox ? 'TRUE' : nil) }
46
+ system(env, 'rspec spec/fixtures/selenium_driver_rspec_failure.rb', out: File::NULL, err: File::NULL)
46
47
  expect($?.exitstatus).to eq(1)
47
48
  end
48
49
 
49
50
  it "should have return code 0 when running selenium_driver_rspec_success.rb" do
50
- ENV['SELENIUM_BROWSER'] = @session.driver.options[:browser].to_s
51
- `rspec spec/fixtures/selenium_driver_rspec_success.rb`
51
+ env = { 'SELENIUM_BROWSER' => @session.driver.options[:browser].to_s,
52
+ 'LEGACY_FIREFOX' => (mode == :selenium_firefox ? 'TRUE' : nil) }
53
+ system(env, 'rspec spec/fixtures/selenium_driver_rspec_success.rb', out: File::NULL, err: File::NULL)
52
54
  expect($?.exitstatus).to eq(0)
53
55
  end
54
56
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: capybara
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.10.2
4
+ version: 2.11.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thomas Walpole
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain:
12
12
  - gem-public_cert.pem
13
- date: 2016-11-30 00:00:00.000000000 Z
13
+ date: 2016-12-05 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: nokogiri
@@ -100,16 +100,22 @@ dependencies:
100
100
  name: selenium-webdriver
101
101
  requirement: !ruby/object:Gem::Requirement
102
102
  requirements:
103
- - - "~>"
103
+ - - ">="
104
104
  - !ruby/object:Gem::Version
105
105
  version: '2.0'
106
+ - - "<"
107
+ - !ruby/object:Gem::Version
108
+ version: '4.0'
106
109
  type: :development
107
110
  prerelease: false
108
111
  version_requirements: !ruby/object:Gem::Requirement
109
112
  requirements:
110
- - - "~>"
113
+ - - ">="
111
114
  - !ruby/object:Gem::Version
112
115
  version: '2.0'
116
+ - - "<"
117
+ - !ruby/object:Gem::Version
118
+ version: '4.0'
113
119
  - !ruby/object:Gem::Dependency
114
120
  name: sinatra
115
121
  requirement: !ruby/object:Gem::Requirement
@@ -412,13 +418,14 @@ files:
412
418
  - spec/rack_test_spec.rb
413
419
  - spec/result_spec.rb
414
420
  - spec/rspec/features_spec.rb
415
- - spec/rspec/matchers_spec.rb
416
421
  - spec/rspec/scenarios_spec.rb
422
+ - spec/rspec/shared_spec_matchers.rb
417
423
  - spec/rspec/views_spec.rb
418
424
  - spec/rspec_spec.rb
419
425
  - spec/selector_spec.rb
420
- - spec/selenium_firefox_spec.rb
421
426
  - spec/selenium_spec_chrome.rb
427
+ - spec/selenium_spec_firefox.rb
428
+ - spec/selenium_spec_marionette.rb
422
429
  - spec/server_spec.rb
423
430
  - spec/shared_selenium_session.rb
424
431
  - spec/spec_helper.rb
@@ -1,44 +0,0 @@
1
- # frozen_string_literal: true
2
- require 'spec_helper'
3
- require "selenium-webdriver"
4
- require 'shared_selenium_session'
5
-
6
- Capybara.register_driver :selenium_focus do |app|
7
- # profile = Selenium::WebDriver::Firefox::Profile.new
8
- # profile["focusmanager.testmode"] = true
9
- # Capybara::Selenium::Driver.new(app, browser: :firefox, profile: profile)
10
- Capybara::Selenium::Driver.new(app, browser: :firefox)
11
- end
12
-
13
- module TestSessions
14
- Selenium = Capybara::Session.new(:selenium_focus, TestApp)
15
- end
16
-
17
- skipped_tests = [
18
- :response_headers,
19
- :status_code,
20
- :trigger
21
- ]
22
- skipped_tests << :windows if ENV['TRAVIS'] && !ENV['WINDOW_TEST']
23
-
24
- Capybara::SpecHelper.run_specs TestSessions::Selenium, "selenium", capybara_skip: skipped_tests
25
-
26
- RSpec.describe "Capybara::Session with firefox" do
27
- include_examples "Capybara::Session", TestSessions::Selenium, :selenium_focus
28
- end
29
-
30
- RSpec.describe Capybara::Selenium::Driver do
31
- before do
32
- @driver = Capybara::Selenium::Driver.new(TestApp, browser: :firefox)
33
- end
34
-
35
- describe '#quit' do
36
- it "should reset browser when quit" do
37
- expect(@driver.browser).to be
38
- @driver.quit
39
- #access instance variable directly so we don't create a new browser instance
40
- expect(@driver.instance_variable_get(:@browser)).to be_nil
41
- end
42
- end
43
- end
44
-