capybara 3.12.0 → 3.13.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (68) hide show
  1. checksums.yaml +4 -4
  2. data/History.md +13 -0
  3. data/README.md +13 -3
  4. data/lib/capybara.rb +8 -4
  5. data/lib/capybara/config.rb +3 -1
  6. data/lib/capybara/driver/base.rb +2 -2
  7. data/lib/capybara/driver/node.rb +11 -2
  8. data/lib/capybara/minitest.rb +3 -3
  9. data/lib/capybara/minitest/spec.rb +10 -3
  10. data/lib/capybara/node/actions.rb +4 -0
  11. data/lib/capybara/node/base.rb +13 -5
  12. data/lib/capybara/node/document.rb +12 -0
  13. data/lib/capybara/node/element.rb +37 -0
  14. data/lib/capybara/node/finders.rb +1 -0
  15. data/lib/capybara/node/matchers.rb +19 -4
  16. data/lib/capybara/node/simple.rb +7 -2
  17. data/lib/capybara/queries/selector_query.rb +93 -9
  18. data/lib/capybara/rspec/matchers.rb +11 -3
  19. data/lib/capybara/rspec/matchers/become_closed.rb +1 -1
  20. data/lib/capybara/rspec/matchers/match_style.rb +38 -0
  21. data/lib/capybara/selector.rb +30 -30
  22. data/lib/capybara/selector/selector.rb +47 -3
  23. data/lib/capybara/selenium/driver.rb +12 -11
  24. data/lib/capybara/selenium/driver_specializations/chrome_driver.rb +3 -3
  25. data/lib/capybara/selenium/driver_specializations/firefox_driver.rb +2 -2
  26. data/lib/capybara/selenium/driver_specializations/internet_explorer_driver.rb +13 -0
  27. data/lib/capybara/selenium/extensions/find.rb +81 -0
  28. data/lib/capybara/selenium/extensions/scroll.rb +78 -0
  29. data/lib/capybara/selenium/node.rb +52 -28
  30. data/lib/capybara/session.rb +13 -1
  31. data/lib/capybara/spec/public/test.js +1 -0
  32. data/lib/capybara/spec/session/assert_style_spec.rb +4 -4
  33. data/lib/capybara/spec/session/attach_file_spec.rb +6 -6
  34. data/lib/capybara/spec/session/click_button_spec.rb +1 -1
  35. data/lib/capybara/spec/session/evaluate_script_spec.rb +1 -0
  36. data/lib/capybara/spec/session/execute_script_spec.rb +1 -0
  37. data/lib/capybara/spec/session/fill_in_spec.rb +7 -1
  38. data/lib/capybara/spec/session/find_field_spec.rb +1 -1
  39. data/lib/capybara/spec/session/find_spec.rb +11 -0
  40. data/lib/capybara/spec/session/frame/switch_to_frame_spec.rb +0 -1
  41. data/lib/capybara/spec/session/has_css_spec.rb +32 -0
  42. data/lib/capybara/spec/session/has_select_spec.rb +2 -2
  43. data/lib/capybara/spec/session/has_selector_spec.rb +7 -0
  44. data/lib/capybara/spec/session/has_text_spec.rb +1 -1
  45. data/lib/capybara/spec/session/matches_style_spec.rb +35 -0
  46. data/lib/capybara/spec/session/scroll_spec.rb +117 -0
  47. data/lib/capybara/spec/session/select_spec.rb +5 -0
  48. data/lib/capybara/spec/spec_helper.rb +1 -0
  49. data/lib/capybara/spec/views/obscured.erb +1 -1
  50. data/lib/capybara/spec/views/scroll.erb +20 -0
  51. data/lib/capybara/spec/views/with_html.erb +1 -1
  52. data/lib/capybara/version.rb +1 -1
  53. data/lib/capybara/window.rb +1 -1
  54. data/spec/basic_node_spec.rb +11 -0
  55. data/spec/dsl_spec.rb +1 -1
  56. data/spec/minitest_spec.rb +2 -2
  57. data/spec/minitest_spec_spec.rb +1 -1
  58. data/spec/rack_test_spec.rb +1 -0
  59. data/spec/result_spec.rb +2 -2
  60. data/spec/selector_spec.rb +11 -1
  61. data/spec/selenium_spec_firefox.rb +1 -1
  62. data/spec/selenium_spec_ie.rb +70 -9
  63. data/spec/session_spec.rb +9 -0
  64. data/spec/shared_selenium_session.rb +4 -3
  65. data/spec/spec_helper.rb +2 -0
  66. metadata +38 -6
  67. data/lib/capybara/rspec/matchers/have_style.rb +0 -23
  68. data/lib/capybara/spec/session/has_style_spec.rb +0 -25
@@ -226,4 +226,9 @@ Capybara::SpecHelper.spec '#select' do
226
226
  end
227
227
  end
228
228
  end
229
+
230
+ it 'should error when not passed a locator for :from option' do
231
+ select = @session.find(:select, 'Title')
232
+ expect { @session.select('Mr', from: select) }.to raise_error(ArgumentError, /does not take an element/)
233
+ end
229
234
  end
@@ -35,6 +35,7 @@ module Capybara
35
35
  Capybara.test_id = nil
36
36
  Capybara.predicates_wait = true
37
37
  Capybara.default_normalize_ws = false
38
+ Capybara.allow_gumbo = true
38
39
  reset_threadsafe
39
40
  end
40
41
 
@@ -4,7 +4,7 @@
4
4
  <title>with_animation</title>
5
5
  <script src="/jquery.js" type="text/javascript" charset="utf-8"></script>
6
6
  <script>
7
- $(document).on('contextmenu', function(e){ e.preventDefault(); })
7
+ $(document).on('contextmenu', function(e){ e.preventDefault(); });
8
8
  </script>
9
9
  <style>
10
10
  div {
@@ -0,0 +1,20 @@
1
+ <html style="height: 250%; width: 150%">
2
+ <head>
3
+ <style>
4
+ * { padding: 0; }
5
+ div { position: absolute; }
6
+ #scroll { top: 125%; }
7
+ #scrollable { top: 150%; overflow-y: scroll; overflow-x: scroll; height: 50px; width: 50px; position: relative; border: 1px solid black;}
8
+ #inner { top: 50%; }
9
+ </style>
10
+ </head>
11
+ <body style="height: 100%; width: 100%">
12
+ <div id="scroll" style = "top: 125%">scroll</div>
13
+ <div id="scrollable">
14
+ <div style="height: 200px; width: 200px; poistion: relative">
15
+ <div id="inner">inner</div>
16
+ </div>
17
+ </div>
18
+ </div>
19
+ </body>
20
+ </html>
@@ -12,7 +12,7 @@
12
12
  <h2 class="head" id="h2two">Header Class Test Two</h2>
13
13
  <h2 class="head" id="h2_">Header Class Test Three</h2>
14
14
  <h2 class="head">Header Class Test Four</h2>
15
- <h2 class="head">Header Class Test Five</h2>
15
+ <h2 class="head">Header Class <span style="display: none">Random</span>Test Five</h2>
16
16
 
17
17
  <span class="number">42</span>
18
18
  <span>Other span</span>
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Capybara
4
- VERSION = '3.12.0'
4
+ VERSION = '3.13.0'
5
5
  end
@@ -132,7 +132,7 @@ module Capybara
132
132
  timer = Capybara::Helpers.timer(expire_in: seconds)
133
133
  loop do
134
134
  prev_size = size
135
- sleep 0.05
135
+ sleep 0.025
136
136
  return res if prev_size == size
137
137
  break if timer.expired?
138
138
  end
@@ -110,6 +110,17 @@ RSpec.describe Capybara do
110
110
  expect(string.find('//form/input[@name="meh"]')).not_to be_disabled
111
111
  end
112
112
 
113
+ it 'drops illegal fragments when using gumbo' do
114
+ skip 'libxml is less strict than Gumbo' unless Nokogiri.respond_to?(:HTML5)
115
+ expect(Capybara.string('<td>1</td>')).not_to have_css('td')
116
+ end
117
+
118
+ it 'can disable use of gumbo' do
119
+ skip "Test doesn't make sense unlesss nokogumbo is loaded" unless Nokogiri.respond_to?(:HTML5)
120
+ Capybara.allow_gumbo = false
121
+ expect(Capybara.string('<td>1</td>')).to have_css('td')
122
+ end
123
+
113
124
  describe '#title' do
114
125
  it 'returns the page title' do
115
126
  expect(string.title).to eq('simple_node')
@@ -8,7 +8,7 @@ class TestClass
8
8
  end
9
9
 
10
10
  Capybara::SpecHelper.run_specs TestClass.new, 'DSL', capybara_skip: %i[
11
- js modals screenshot frames windows send_keys server hover about_scheme psc download css driver
11
+ js modals screenshot frames windows send_keys server hover about_scheme psc download css driver scroll
12
12
  ] do |example|
13
13
  case example.metadata[:full_description]
14
14
  when /has_css\? should support case insensitive :class and :id options/
@@ -125,10 +125,10 @@ class MinitestTest < Minitest::Test
125
125
  refute_matches_xpath(find(:select, 'form_title'), './/select[@id="form_other_title"]')
126
126
  end
127
127
 
128
- def test_assert_style
128
+ def test_assert_matches_style
129
129
  skip "Rack test doesn't support style" if Capybara.current_driver == :rack_test
130
130
  visit('/with_html')
131
- assert_style(find(:css, '#second'), display: 'inline')
131
+ assert_matches_style(find(:css, '#second'), display: 'inline')
132
132
  end
133
133
  end
134
134
 
@@ -124,7 +124,7 @@ class MinitestSpecTest < Minitest::Spec
124
124
  it 'supports style expectations' do
125
125
  skip "Rack test doesn't support style" if Capybara.current_driver == :rack_test
126
126
  visit('/with_html')
127
- find(:css, '#second').must_have_style('display' => 'inline')
127
+ find(:css, '#second').must_match_style('display' => 'inline')
128
128
  end
129
129
  end
130
130
 
@@ -24,6 +24,7 @@ skipped_tests = %i[
24
24
  about_scheme
25
25
  download
26
26
  css
27
+ scroll
27
28
  ]
28
29
  Capybara::SpecHelper.run_specs TestSessions::RackTest, 'RackTest', capybara_skip: skipped_tests do |example|
29
30
  case example.metadata[:full_description]
@@ -88,7 +88,7 @@ RSpec.describe Capybara::Result do
88
88
  it 'should catch invalid element errors during filtering' do
89
89
  allow_any_instance_of(Capybara::Node::Simple).to receive(:text).and_raise(StandardError)
90
90
  allow_any_instance_of(Capybara::Node::Simple).to receive(:session).and_return(
91
- instance_double('Capybara::Session', driver: instance_double('Capybara::Driver::Base', invalid_element_errors: [StandardError]))
91
+ instance_double('Capybara::Session', driver: instance_double('Capybara::Driver::Base', invalid_element_errors: [StandardError], wait?: false))
92
92
  )
93
93
  result = string.all('//li', text: 'Alpha')
94
94
  expect(result.size).to eq 0
@@ -97,7 +97,7 @@ RSpec.describe Capybara::Result do
97
97
  it 'should return non-invalid element errors during filtering' do
98
98
  allow_any_instance_of(Capybara::Node::Simple).to receive(:text).and_raise(StandardError)
99
99
  allow_any_instance_of(Capybara::Node::Simple).to receive(:session).and_return(
100
- instance_double('Capybara::Session', driver: instance_double('Capybara::Driver::Base', invalid_element_errors: [ArgumentError]))
100
+ instance_double('Capybara::Session', driver: instance_double('Capybara::Driver::Base', invalid_element_errors: [ArgumentError], wait?: false))
101
101
  )
102
102
  expect do
103
103
  string.all('//li', text: 'Alpha').to_a
@@ -31,7 +31,7 @@ RSpec.describe Capybara do
31
31
  <input type="file" id="file" class=".special file"/>
32
32
  <input type="hidden" id="hidden_field" value="this is hidden"/>
33
33
  <input type="submit" value="click me" title="submit button"/>
34
- <input type="button" value="don't click me" title="Other button 1"/>
34
+ <input type="button" value="don't click me" title="Other button 1" style="line-height: 30px;"/>
35
35
  <a href="#">link</a>
36
36
  <fieldset></fieldset>
37
37
  <select id="select">
@@ -304,6 +304,16 @@ RSpec.describe Capybara do
304
304
  end
305
305
  end
306
306
 
307
+ context 'with :style option' do
308
+ it 'accepts string for CSS based selectors' do
309
+ expect(string.find(:custom_css_selector, 'input', style: 'line-height: 30px;')[:title]).to eq 'Other button 1'
310
+ end
311
+
312
+ it 'accepts Regexp for CSS base selectors' do
313
+ expect(string.find(:custom_css_selector, 'input', style: /30px/)[:title]).to eq 'Other button 1'
314
+ end
315
+ end
316
+
307
317
  # :css, :xpath, :id, :field, :fieldset, :link, :button, :link_or_button, :fillable_field, :radio_button, :checkbox, :select,
308
318
  # :option, :file_field, :label, :table, :frame
309
319
 
@@ -21,7 +21,7 @@ Capybara.register_driver :selenium_firefox do |app|
21
21
  app,
22
22
  browser: :firefox,
23
23
  options: browser_options,
24
- timeout: 31,
24
+ timeout: 31
25
25
  # Get a trace level log from geckodriver
26
26
  # :driver_opts => { args: ['-vv'] }
27
27
  )
@@ -5,16 +5,49 @@ require 'selenium-webdriver'
5
5
  require 'shared_selenium_session'
6
6
  require 'rspec/shared_spec_matchers'
7
7
 
8
+ ::Selenium::WebDriver::IE.driver_path = 'C:\Tools\WebDriver\IEDriverServer.exe' if ENV['CI']
9
+
10
+ def selenium_host
11
+ ENV.fetch('SELENIUM_HOST', '192.168.56.102')
12
+ end
13
+
14
+ def selenium_port
15
+ ENV.fetch('SELENIUM_PORT', 4444)
16
+ end
17
+
18
+ def server_host
19
+ ENV.fetch('SERVER_HOST', '10.24.4.135')
20
+ end
21
+
8
22
  Capybara.register_driver :selenium_ie do |app|
9
23
  # ::Selenium::WebDriver.logger.level = "debug"
10
24
  options = ::Selenium::WebDriver::IE::Options.new
11
25
  options.require_window_focus = true
12
- Capybara::Selenium::Driver.new(
13
- app,
14
- browser: :ie,
15
- desired_capabilities: ::Selenium::WebDriver::Remote::Capabilities.ie,
16
- options: options
17
- )
26
+ # options.add_option("log", {"level": "trace"})
27
+
28
+ if ENV['REMOTE']
29
+ Capybara.server_host = server_host
30
+
31
+ url = "http://#{selenium_host}:#{selenium_port}/wd/hub"
32
+ Capybara::Selenium::Driver.new(app,
33
+ browser: :remote,
34
+ options: options,
35
+ url: url).tap do |driver|
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
+ else
43
+ Capybara::Selenium::Driver.new(
44
+ app,
45
+ browser: :ie,
46
+ options: options
47
+ ).tap do |driver|
48
+ puts driver.browser.capabilities.inspect
49
+ end
50
+ end
18
51
  end
19
52
 
20
53
  module TestSessions
@@ -41,12 +74,36 @@ Capybara::SpecHelper.run_specs TestSessions::SeleniumIE, 'selenium', capybara_sk
41
74
  skip 'IE 11 obeys non-standard disabled attribute on anchor tag'
42
75
  when /#right_click should allow modifiers$/
43
76
  skip "Windows can't :meta click because :meta triggers start menu"
77
+ when /#click should allow modifiers$/
78
+ pending "Doesn't work with IE for some unknown reason$"
79
+ when /#double_click should allow modifiers$/
80
+ pending "Doesn't work with IE for some unknown reason$"
44
81
  when /#click should allow multiple modifiers$/
45
82
  skip "Windows can't :meta click because :meta triggers start menu"
46
83
  when /#double_click should allow multiple modifiers$/
47
84
  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'
85
+ when /#has_css\? should support case insensitive :class and :id options$/
86
+ pending "IE doesn't support case insensitive CSS selectors"
87
+ when /#reset_session! removes ALL cookies$/
88
+ pending "IE driver doesn't provide a way to remove ALL cookies"
89
+ when /#click_button should send button in document order$/
90
+ pending "IE 11 doesn't support the 'form' attribute"
91
+ when /#click_button should follow permanent redirects that maintain method$/
92
+ pending "Window 7 and 8.1 don't support 308 http status code"
93
+ when /#scroll_to can scroll an element to the center of the viewport$/,
94
+ /#scroll_to can scroll an element to the center of the scrolling element$/
95
+ pending " IE doesn't support ScrollToOptions"
96
+ when /#attach_file with multipart form should fire change once for each set of files uploaded$/,
97
+ /#attach_file with multipart form should fire change once when uploading multiple files from empty$/,
98
+ /#attach_file with multipart form should not break when using HTML5 multiple file input uploading multiple files$/
99
+ pending "IE requires all files be uploaded from same directory. Selenium doesn't provide that." if ENV['REMOTE']
100
+ when %r{#attach_file with multipart form should send content type image/jpeg when uploading an image$}
101
+ pending 'IE gets text/plain type for some reason'
102
+ # when /#click should not retry clicking when wait is disabled$/
103
+ # Fixed in IEDriverServer 3.141.0.5
104
+ # pending "IE driver doesn't error when clicking on covered elements, it just clicks the wrong element"
105
+ when /#click should go to the same page if href is blank$/
106
+ pending 'IE treats blank href as a parent request (against HTML spec)'
50
107
  end
51
108
  end
52
109
 
@@ -58,13 +115,16 @@ end
58
115
 
59
116
  RSpec.describe Capybara::Selenium::Node do
60
117
  it '#right_click should allow modifiers' do
118
+ # pending "Actions API doesn't appear to work for this"
61
119
  session = TestSessions::SeleniumIE
62
120
  session.visit('/with_js')
63
- session.find(:css, '#click-test').right_click(:control)
121
+ el = session.find(:css, '#click-test')
122
+ el.right_click(:control)
64
123
  expect(session).to have_link('Has been control right clicked')
65
124
  end
66
125
 
67
126
  it '#click should allow multiple modifiers' do
127
+ # pending "Actions API doesn't appear to work for this"
68
128
  session = TestSessions::SeleniumIE
69
129
  session.visit('with_js')
70
130
  # IE triggers system behavior with :meta so can't use those here
@@ -73,6 +133,7 @@ RSpec.describe Capybara::Selenium::Node do
73
133
  end
74
134
 
75
135
  it '#double_click should allow modifiers' do
136
+ # pending "Actions API doesn't appear to work for this"
76
137
  session = TestSessions::SeleniumIE
77
138
  session.visit('/with_js')
78
139
  session.find(:css, '#click-test').double_click(:shift)
@@ -72,4 +72,13 @@ RSpec.describe Capybara::Session do
72
72
  expect(Capybara.session_name).to eq 'sess1'
73
73
  end
74
74
  end
75
+
76
+ context 'quit' do
77
+ it 'will reset the driver' do
78
+ session = Capybara::Session.new(:rack_test, TestApp)
79
+ driver = session.driver
80
+ session.quit
81
+ expect(session.driver).not_to eql driver
82
+ end
83
+ end
75
84
  end
@@ -199,14 +199,14 @@ RSpec.shared_examples 'Capybara::Session' do |session, mode|
199
199
  # this is here because it is testing for an XPath that is specific to the algorithm used in the selenium driver
200
200
  session.visit('/path')
201
201
  element = session.find(:link, 'Second Link')
202
- expect(element.path).to eq('/HTML/BODY/DIV[2]/A[1]')
202
+ expect(element.path).to eq('/HTML/BODY[1]/DIV[2]/A[1]')
203
203
  end
204
204
 
205
205
  it 'handles namespaces in xhtml' do
206
206
  pending "IE 11 doesn't handle all XPath querys (namespace-uri, etc)" if ie?(session)
207
207
  session.visit '/with_namespace'
208
208
  rect = session.find(:css, 'div svg rect:first-of-type')
209
- expect(rect.path).to eq("/HTML/BODY/DIV/./*[((local-name(.) = 'svg') and (namespace-uri(.) = 'http://www.w3.org/2000/svg'))]/./*[((local-name(.) = 'rect') and (namespace-uri(.) = 'http://www.w3.org/2000/svg'))][1]")
209
+ expect(rect.path).to eq("/HTML/BODY[1]/DIV[1]/*[local-name()='svg' and namespace-uri()='http://www.w3.org/2000/svg'][1]/*[local-name()='rect' and namespace-uri()='http://www.w3.org/2000/svg'][1]")
210
210
  expect(session.find(:xpath, rect.path)).to eq rect
211
211
  end
212
212
 
@@ -214,7 +214,7 @@ RSpec.shared_examples 'Capybara::Session' do |session, mode|
214
214
  pending "IE 11 doesn't handle all XPath querys (namespace-uri, etc)" if ie?(session)
215
215
  session.visit '/with_html5_svg'
216
216
  rect = session.find(:css, 'div svg rect:first-of-type')
217
- expect(rect.path).to eq("/HTML/BODY/DIV/./*[((local-name(.) = 'svg') and (namespace-uri(.) = 'http://www.w3.org/2000/svg'))]/./*[((local-name(.) = 'rect') and (namespace-uri(.) = 'http://www.w3.org/2000/svg'))][1]")
217
+ expect(rect.path).to eq("/HTML/BODY[1]/DIV[1]/*[local-name()='svg' and namespace-uri()='http://www.w3.org/2000/svg'][1]/*[local-name()='rect' and namespace-uri()='http://www.w3.org/2000/svg'][1]")
218
218
  expect(session.find(:xpath, rect.path)).to eq rect
219
219
  end
220
220
 
@@ -339,6 +339,7 @@ RSpec.shared_examples 'Capybara::Session' do |session, mode|
339
339
  pending "Geckodriver doesn't support uploading a directory" if firefox?(session)
340
340
  pending "Selenium remote doesn't support transferring a directory" if remote?(session)
341
341
  pending "Headless Chrome doesn't support directory upload - https://bugs.chromium.org/p/chromedriver/issues/detail?id=2521&q=directory%20upload&colspec=ID%20Status%20Pri%20Owner%20Summary" if chrome?(session) && ENV['HEADLESS']
342
+ pending "IE doesn't support uploading a directory" if ie?(session)
342
343
 
343
344
  session.visit('/form')
344
345
  @test_file_dir = File.expand_path('./fixtures', File.dirname(__FILE__))
@@ -3,6 +3,7 @@
3
3
  require 'rspec/expectations'
4
4
  require 'capybara/spec/spec_helper'
5
5
  require 'webdrivers' if ENV['CI']
6
+ require 'selenium_statistics'
6
7
 
7
8
  module Capybara
8
9
  module SpecHelper
@@ -53,4 +54,5 @@ RSpec.configure do |config|
53
54
  Capybara::SpecHelper.configure(config)
54
55
  config.filter_run_including focus_: true unless ENV['CI']
55
56
  config.run_all_when_everything_filtered = true
57
+ config.after(:suite) { SeleniumStatistics.print_results }
56
58
  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: 3.12.0
4
+ version: 3.13.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: 2018-11-28 00:00:00.000000000 Z
13
+ date: 2019-01-24 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: addressable
@@ -166,6 +166,20 @@ dependencies:
166
166
  - - ">="
167
167
  - !ruby/object:Gem::Version
168
168
  version: 1.0.0
169
+ - !ruby/object:Gem::Dependency
170
+ name: irb
171
+ requirement: !ruby/object:Gem::Requirement
172
+ requirements:
173
+ - - ">="
174
+ - !ruby/object:Gem::Version
175
+ version: '0'
176
+ type: :development
177
+ prerelease: false
178
+ version_requirements: !ruby/object:Gem::Requirement
179
+ requirements:
180
+ - - ">="
181
+ - !ruby/object:Gem::Version
182
+ version: '0'
169
183
  - !ruby/object:Gem::Dependency
170
184
  name: launchy
171
185
  requirement: !ruby/object:Gem::Requirement
@@ -278,6 +292,20 @@ dependencies:
278
292
  - - "~>"
279
293
  - !ruby/object:Gem::Version
280
294
  version: '3.5'
295
+ - !ruby/object:Gem::Dependency
296
+ name: selenium_statistics
297
+ requirement: !ruby/object:Gem::Requirement
298
+ requirements:
299
+ - - ">="
300
+ - !ruby/object:Gem::Version
301
+ version: '0'
302
+ type: :development
303
+ prerelease: false
304
+ version_requirements: !ruby/object:Gem::Requirement
305
+ requirements:
306
+ - - ">="
307
+ - !ruby/object:Gem::Version
308
+ version: '0'
281
309
  - !ruby/object:Gem::Dependency
282
310
  name: sinatra
283
311
  requirement: !ruby/object:Gem::Requirement
@@ -360,10 +388,10 @@ files:
360
388
  - lib/capybara/rspec/matchers/compound.rb
361
389
  - lib/capybara/rspec/matchers/have_current_path.rb
362
390
  - lib/capybara/rspec/matchers/have_selector.rb
363
- - lib/capybara/rspec/matchers/have_style.rb
364
391
  - lib/capybara/rspec/matchers/have_text.rb
365
392
  - lib/capybara/rspec/matchers/have_title.rb
366
393
  - lib/capybara/rspec/matchers/match_selector.rb
394
+ - lib/capybara/rspec/matchers/match_style.rb
367
395
  - lib/capybara/selector.rb
368
396
  - lib/capybara/selector/builders/css_builder.rb
369
397
  - lib/capybara/selector/builders/xpath_builder.rb
@@ -379,7 +407,10 @@ files:
379
407
  - lib/capybara/selenium/driver.rb
380
408
  - lib/capybara/selenium/driver_specializations/chrome_driver.rb
381
409
  - lib/capybara/selenium/driver_specializations/firefox_driver.rb
410
+ - lib/capybara/selenium/driver_specializations/internet_explorer_driver.rb
411
+ - lib/capybara/selenium/extensions/find.rb
382
412
  - lib/capybara/selenium/extensions/html5_drag.rb
413
+ - lib/capybara/selenium/extensions/scroll.rb
383
414
  - lib/capybara/selenium/node.rb
384
415
  - lib/capybara/selenium/nodes/chrome_node.rb
385
416
  - lib/capybara/selenium/nodes/firefox_node.rb
@@ -450,13 +481,13 @@ files:
450
481
  - lib/capybara/spec/session/has_none_selectors_spec.rb
451
482
  - lib/capybara/spec/session/has_select_spec.rb
452
483
  - lib/capybara/spec/session/has_selector_spec.rb
453
- - lib/capybara/spec/session/has_style_spec.rb
454
484
  - lib/capybara/spec/session/has_table_spec.rb
455
485
  - lib/capybara/spec/session/has_text_spec.rb
456
486
  - lib/capybara/spec/session/has_title_spec.rb
457
487
  - lib/capybara/spec/session/has_xpath_spec.rb
458
488
  - lib/capybara/spec/session/headers_spec.rb
459
489
  - lib/capybara/spec/session/html_spec.rb
490
+ - lib/capybara/spec/session/matches_style_spec.rb
460
491
  - lib/capybara/spec/session/node_spec.rb
461
492
  - lib/capybara/spec/session/node_wrapper_spec.rb
462
493
  - lib/capybara/spec/session/refresh_spec.rb
@@ -467,6 +498,7 @@ files:
467
498
  - lib/capybara/spec/session/save_page_spec.rb
468
499
  - lib/capybara/spec/session/save_screenshot_spec.rb
469
500
  - lib/capybara/spec/session/screenshot_spec.rb
501
+ - lib/capybara/spec/session/scroll_spec.rb
470
502
  - lib/capybara/spec/session/select_spec.rb
471
503
  - lib/capybara/spec/session/selectors_spec.rb
472
504
  - lib/capybara/spec/session/sibling_spec.rb
@@ -502,6 +534,7 @@ files:
502
534
  - lib/capybara/spec/views/popup_one.erb
503
535
  - lib/capybara/spec/views/popup_two.erb
504
536
  - lib/capybara/spec/views/postback.erb
537
+ - lib/capybara/spec/views/scroll.erb
505
538
  - lib/capybara/spec/views/tables.erb
506
539
  - lib/capybara/spec/views/with_animation.erb
507
540
  - lib/capybara/spec/views/with_base_tag.erb
@@ -578,8 +611,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
578
611
  - !ruby/object:Gem::Version
579
612
  version: '0'
580
613
  requirements: []
581
- rubyforge_project:
582
- rubygems_version: 2.7.8
614
+ rubygems_version: 3.0.2
583
615
  signing_key:
584
616
  specification_version: 4
585
617
  summary: Capybara aims to simplify the process of integration testing Rack applications,