capybara 2.6.0 → 2.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.
Files changed (163) hide show
  1. checksums.yaml +4 -4
  2. data/History.md +52 -15
  3. data/README.md +45 -38
  4. data/lib/capybara/cucumber.rb +1 -0
  5. data/lib/capybara/driver/base.rb +5 -2
  6. data/lib/capybara/driver/node.rb +1 -0
  7. data/lib/capybara/dsl.rb +1 -0
  8. data/lib/capybara/helpers.rb +3 -2
  9. data/lib/capybara/node/actions.rb +6 -0
  10. data/lib/capybara/node/base.rb +1 -0
  11. data/lib/capybara/node/document.rb +1 -0
  12. data/lib/capybara/node/document_matchers.rb +1 -0
  13. data/lib/capybara/node/element.rb +1 -0
  14. data/lib/capybara/node/finders.rb +3 -2
  15. data/lib/capybara/node/matchers.rb +72 -2
  16. data/lib/capybara/node/simple.rb +6 -3
  17. data/lib/capybara/queries/base_query.rb +1 -0
  18. data/lib/capybara/queries/current_path_query.rb +6 -3
  19. data/lib/capybara/queries/match_query.rb +21 -0
  20. data/lib/capybara/queries/selector_query.rb +138 -0
  21. data/lib/capybara/queries/text_query.rb +1 -0
  22. data/lib/capybara/queries/title_query.rb +1 -0
  23. data/lib/capybara/query.rb +3 -131
  24. data/lib/capybara/rack_test/browser.rb +1 -0
  25. data/lib/capybara/rack_test/css_handlers.rb +1 -0
  26. data/lib/capybara/rack_test/driver.rb +6 -4
  27. data/lib/capybara/rack_test/form.rb +1 -0
  28. data/lib/capybara/rack_test/node.rb +1 -0
  29. data/lib/capybara/rails.rb +2 -1
  30. data/lib/capybara/result.rb +1 -0
  31. data/lib/capybara/rspec/features.rb +1 -0
  32. data/lib/capybara/rspec/matchers.rb +54 -3
  33. data/lib/capybara/rspec.rb +1 -0
  34. data/lib/capybara/selector/filter.rb +48 -0
  35. data/lib/capybara/selector.rb +175 -75
  36. data/lib/capybara/selenium/driver.rb +24 -7
  37. data/lib/capybara/selenium/node.rb +1 -0
  38. data/lib/capybara/server.rb +38 -6
  39. data/lib/capybara/session/matchers.rb +2 -1
  40. data/lib/capybara/session.rb +30 -14
  41. data/lib/capybara/spec/public/test.js +6 -0
  42. data/lib/capybara/spec/session/accept_alert_spec.rb +2 -1
  43. data/lib/capybara/spec/session/accept_confirm_spec.rb +2 -1
  44. data/lib/capybara/spec/session/accept_prompt_spec.rb +2 -1
  45. data/lib/capybara/spec/session/all_spec.rb +1 -0
  46. data/lib/capybara/spec/session/assert_current_path.rb +1 -0
  47. data/lib/capybara/spec/session/assert_selector.rb +1 -0
  48. data/lib/capybara/spec/session/assert_text.rb +1 -0
  49. data/lib/capybara/spec/session/assert_title.rb +1 -0
  50. data/lib/capybara/spec/session/attach_file_spec.rb +1 -0
  51. data/lib/capybara/spec/session/body_spec.rb +1 -0
  52. data/lib/capybara/spec/session/check_spec.rb +1 -0
  53. data/lib/capybara/spec/session/choose_spec.rb +1 -0
  54. data/lib/capybara/spec/session/click_button_spec.rb +1 -0
  55. data/lib/capybara/spec/session/click_link_or_button_spec.rb +1 -0
  56. data/lib/capybara/spec/session/click_link_spec.rb +1 -0
  57. data/lib/capybara/spec/session/current_scope_spec.rb +2 -1
  58. data/lib/capybara/spec/session/current_url_spec.rb +1 -0
  59. data/lib/capybara/spec/session/dismiss_confirm_spec.rb +2 -1
  60. data/lib/capybara/spec/session/dismiss_prompt_spec.rb +2 -1
  61. data/lib/capybara/spec/session/element/assert_match_selector.rb +31 -0
  62. data/lib/capybara/spec/session/element/match_css_spec.rb +17 -0
  63. data/lib/capybara/spec/session/element/match_xpath_spec.rb +23 -0
  64. data/lib/capybara/spec/session/element/matches_selector_spec.rb +63 -0
  65. data/lib/capybara/spec/session/evaluate_script_spec.rb +1 -0
  66. data/lib/capybara/spec/session/execute_script_spec.rb +1 -0
  67. data/lib/capybara/spec/session/fill_in_spec.rb +1 -0
  68. data/lib/capybara/spec/session/find_button_spec.rb +1 -0
  69. data/lib/capybara/spec/session/find_by_id_spec.rb +1 -0
  70. data/lib/capybara/spec/session/find_field_spec.rb +1 -0
  71. data/lib/capybara/spec/session/find_link_spec.rb +1 -0
  72. data/lib/capybara/spec/session/find_spec.rb +1 -0
  73. data/lib/capybara/spec/session/first_spec.rb +1 -0
  74. data/lib/capybara/spec/session/go_back_spec.rb +1 -0
  75. data/lib/capybara/spec/session/go_forward_spec.rb +1 -0
  76. data/lib/capybara/spec/session/has_button_spec.rb +1 -0
  77. data/lib/capybara/spec/session/has_css_spec.rb +1 -0
  78. data/lib/capybara/spec/session/has_current_path_spec.rb +1 -0
  79. data/lib/capybara/spec/session/has_field_spec.rb +13 -0
  80. data/lib/capybara/spec/session/has_link_spec.rb +1 -0
  81. data/lib/capybara/spec/session/has_select_spec.rb +19 -0
  82. data/lib/capybara/spec/session/has_selector_spec.rb +6 -0
  83. data/lib/capybara/spec/session/has_table_spec.rb +1 -0
  84. data/lib/capybara/spec/session/has_text_spec.rb +1 -0
  85. data/lib/capybara/spec/session/has_title_spec.rb +1 -0
  86. data/lib/capybara/spec/session/has_xpath_spec.rb +1 -0
  87. data/lib/capybara/spec/session/headers.rb +1 -0
  88. data/lib/capybara/spec/session/html_spec.rb +1 -0
  89. data/lib/capybara/spec/session/node_spec.rb +29 -0
  90. data/lib/capybara/spec/session/reset_session_spec.rb +35 -1
  91. data/lib/capybara/spec/session/response_code.rb +1 -0
  92. data/lib/capybara/spec/session/save_and_open_page_spec.rb +1 -0
  93. data/lib/capybara/spec/session/save_and_open_screenshot_spec.rb +3 -2
  94. data/lib/capybara/spec/session/save_page_spec.rb +34 -2
  95. data/lib/capybara/spec/session/save_screenshot_spec.rb +31 -1
  96. data/lib/capybara/spec/session/screenshot_spec.rb +3 -1
  97. data/lib/capybara/spec/session/select_spec.rb +1 -0
  98. data/lib/capybara/spec/session/selectors_spec.rb +35 -0
  99. data/lib/capybara/spec/session/text_spec.rb +1 -0
  100. data/lib/capybara/spec/session/title_spec.rb +2 -1
  101. data/lib/capybara/spec/session/uncheck_spec.rb +1 -0
  102. data/lib/capybara/spec/session/unselect_spec.rb +1 -0
  103. data/lib/capybara/spec/session/visit_spec.rb +1 -0
  104. data/lib/capybara/spec/session/window/become_closed_spec.rb +1 -0
  105. data/lib/capybara/spec/session/window/current_window_spec.rb +1 -0
  106. data/lib/capybara/spec/session/window/open_new_window_spec.rb +1 -0
  107. data/lib/capybara/spec/session/window/switch_to_window_spec.rb +1 -0
  108. data/lib/capybara/spec/session/window/window_opened_by_spec.rb +1 -0
  109. data/lib/capybara/spec/session/window/window_spec.rb +1 -8
  110. data/lib/capybara/spec/session/window/windows_spec.rb +1 -0
  111. data/lib/capybara/spec/session/window/within_window_spec.rb +2 -3
  112. data/lib/capybara/spec/session/within_frame_spec.rb +1 -0
  113. data/lib/capybara/spec/session/within_spec.rb +1 -0
  114. data/lib/capybara/spec/spec_helper.rb +2 -0
  115. data/lib/capybara/spec/test_app.rb +1 -0
  116. data/lib/capybara/spec/views/buttons.erb +1 -0
  117. data/lib/capybara/spec/views/fieldsets.erb +2 -1
  118. data/lib/capybara/spec/views/form.erb +24 -0
  119. data/lib/capybara/spec/views/frame_child.erb +2 -1
  120. data/lib/capybara/spec/views/frame_one.erb +2 -1
  121. data/lib/capybara/spec/views/frame_parent.erb +2 -1
  122. data/lib/capybara/spec/views/frame_two.erb +2 -1
  123. data/lib/capybara/spec/views/header_links.erb +1 -0
  124. data/lib/capybara/spec/views/host_links.erb +1 -0
  125. data/lib/capybara/spec/views/path.erb +1 -0
  126. data/lib/capybara/spec/views/popup_one.erb +1 -0
  127. data/lib/capybara/spec/views/popup_two.erb +1 -0
  128. data/lib/capybara/spec/views/postback.erb +2 -1
  129. data/lib/capybara/spec/views/tables.erb +1 -0
  130. data/lib/capybara/spec/views/with_base_tag.erb +1 -0
  131. data/lib/capybara/spec/views/with_count.erb +2 -1
  132. data/lib/capybara/spec/views/with_hover.erb +2 -1
  133. data/lib/capybara/spec/views/with_html.erb +3 -0
  134. data/lib/capybara/spec/views/with_html_entities.erb +1 -0
  135. data/lib/capybara/spec/views/with_js.erb +5 -0
  136. data/lib/capybara/spec/views/with_scope.erb +1 -0
  137. data/lib/capybara/spec/views/with_simple_html.erb +2 -1
  138. data/lib/capybara/spec/views/with_slow_unload.erb +17 -0
  139. data/lib/capybara/spec/views/with_title.erb +2 -1
  140. data/lib/capybara/spec/views/with_unload_alert.erb +12 -0
  141. data/lib/capybara/spec/views/with_windows.erb +1 -0
  142. data/lib/capybara/spec/views/within_frames.erb +2 -1
  143. data/lib/capybara/version.rb +2 -1
  144. data/lib/capybara/window.rb +1 -0
  145. data/lib/capybara.rb +86 -10
  146. data/spec/basic_node_spec.rb +1 -0
  147. data/spec/capybara_spec.rb +28 -1
  148. data/spec/dsl_spec.rb +1 -0
  149. data/spec/fixtures/selenium_driver_rspec_failure.rb +1 -0
  150. data/spec/fixtures/selenium_driver_rspec_success.rb +1 -0
  151. data/spec/rack_test_spec.rb +1 -0
  152. data/spec/result_spec.rb +1 -0
  153. data/spec/rspec/features_spec.rb +1 -0
  154. data/spec/rspec/matchers_spec.rb +1 -0
  155. data/spec/rspec/scenarios_spec.rb +1 -0
  156. data/spec/rspec/views_spec.rb +1 -0
  157. data/spec/rspec_spec.rb +1 -0
  158. data/spec/selector_spec.rb +55 -1
  159. data/spec/selenium_spec.rb +6 -2
  160. data/spec/selenium_spec_chrome.rb +1 -0
  161. data/spec/server_spec.rb +101 -13
  162. data/spec/spec_helper.rb +1 -0
  163. metadata +16 -6
data/spec/server_spec.rb CHANGED
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'spec_helper'
2
3
 
3
4
  RSpec.describe Capybara::Server do
@@ -71,23 +72,102 @@ RSpec.describe Capybara::Server do
71
72
  expect(@res2.body).to include('Hello Second Server')
72
73
  end
73
74
 
74
- it "should use the server if it already running" do
75
- @app1 = proc { |env| [200, {}, ["Hello Server!"]]}
76
- @app2 = proc { |env| [200, {}, ["Hello Second Server!"]]}
75
+ context "When Capybara.reuse_server is true" do
76
+ before do
77
+ @old_reuse_server = Capybara.reuse_server
78
+ Capybara.reuse_server = true
79
+ end
77
80
 
78
- @server1a = Capybara::Server.new(@app1).boot
79
- @server1b = Capybara::Server.new(@app1).boot
80
- @server2a = Capybara::Server.new(@app2).boot
81
- @server2b = Capybara::Server.new(@app2).boot
81
+ after do
82
+ Capybara.reuse_server = @old_reuse_server
83
+ end
82
84
 
83
- @res1 = Net::HTTP.start(@server1b.host, @server1b.port) { |http| http.get('/') }
84
- expect(@res1.body).to include('Hello Server')
85
+ it "should use the existing server if it already running" do
86
+ @app = proc { |env| [200, {}, ["Hello Server!"]]}
85
87
 
86
- @res2 = Net::HTTP.start(@server2b.host, @server2b.port) { |http| http.get('/') }
87
- expect(@res2.body).to include('Hello Second Server')
88
+ @server1 = Capybara::Server.new(@app).boot
89
+ @server2 = Capybara::Server.new(@app).boot
90
+
91
+ res = Net::HTTP.start(@server1.host, @server1.port) { |http| http.get('/') }
92
+ expect(res.body).to include('Hello Server')
93
+
94
+ res = Net::HTTP.start(@server2.host, @server2.port) { |http| http.get('/') }
95
+ expect(res.body).to include('Hello Server')
96
+
97
+ expect(@server1.port).to eq(@server2.port)
98
+ end
99
+
100
+ it "detects and waits for all reused server sessions pending requests" do
101
+ done = false
102
+
103
+ app = proc do |env|
104
+ request = Rack::Request.new(env)
105
+ sleep request.params['wait_time'].to_f
106
+ done = true
107
+ [200, {}, ["Hello Server!"]]
108
+ end
109
+
110
+ server1 = Capybara::Server.new(app).boot
111
+ server2 = Capybara::Server.new(app).boot
112
+
113
+ start_request(server1, 0.5)
114
+ start_request(server2, 1.0)
115
+
116
+ expect {
117
+ server1.wait_for_pending_requests
118
+ }.to change{done}.from(false).to(true)
119
+ expect(server2.instance_variable_get('@middleware').pending_requests?).to eq(false)
120
+ end
121
+
122
+ end
123
+
124
+ context "When Capybara.reuse_server is false" do
125
+ before do
126
+ @old_reuse_server = Capybara.reuse_server
127
+ Capybara.reuse_server = false
128
+ end
129
+
130
+ after do
131
+ Capybara.reuse_server = @old_reuse_server
132
+ end
133
+
134
+ it "should not reuse an already running server" do
135
+ @app = proc { |env| [200, {}, ["Hello Server!"]]}
136
+
137
+ @server1 = Capybara::Server.new(@app).boot
138
+ @server2 = Capybara::Server.new(@app).boot
139
+
140
+ res = Net::HTTP.start(@server1.host, @server1.port) { |http| http.get('/') }
141
+ expect(res.body).to include('Hello Server')
142
+
143
+ res = Net::HTTP.start(@server2.host, @server2.port) { |http| http.get('/') }
144
+ expect(res.body).to include('Hello Server')
145
+
146
+ expect(@server1.port).not_to eq(@server2.port)
147
+ end
148
+
149
+ it "detects and waits for only one sessions pending requests" do
150
+ done = false
151
+
152
+ app = proc do |env|
153
+ request = Rack::Request.new(env)
154
+ sleep request.params['wait_time'].to_f
155
+ done = true
156
+ [200, {}, ["Hello Server!"]]
157
+ end
158
+
159
+ server1 = Capybara::Server.new(app).boot
160
+ server2 = Capybara::Server.new(app).boot
161
+
162
+ start_request(server1, 0.5)
163
+ start_request(server2, 1.0)
164
+
165
+ expect {
166
+ server1.wait_for_pending_requests
167
+ }.to change{done}.from(false).to(true)
168
+ expect(server2.instance_variable_get('@middleware').pending_requests?).to eq(true)
169
+ end
88
170
 
89
- expect(@server1a.port).to eq(@server1b.port)
90
- expect(@server2a.port).to eq(@server2b.port)
91
171
  end
92
172
 
93
173
  it "should raise server errors when the server errors before the timeout" do
@@ -113,4 +193,12 @@ RSpec.describe Capybara::Server do
113
193
  expect(Net::HTTP).to receive(:start).and_raise(SystemCallError.allocate)
114
194
  expect(server.responsive?).to eq false
115
195
  end
196
+
197
+ def start_request(server, wait_time)
198
+ # Start request, but don't wait for it to finish
199
+ socket = TCPSocket.new(server.host, server.port)
200
+ socket.write "GET /?wait_time=#{wait_time.to_s} HTTP/1.0\r\n\r\n"
201
+ socket.close
202
+ sleep 0.1
203
+ end
116
204
  end
data/spec/spec_helper.rb CHANGED
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'rspec/expectations'
2
3
  require "capybara/spec/spec_helper"
3
4
  require "pry"
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.6.0
4
+ version: 2.7.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-01-17 00:00:00.000000000 Z
13
+ date: 2016-04-07 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: nokogiri
@@ -198,16 +198,16 @@ dependencies:
198
198
  name: rake
199
199
  requirement: !ruby/object:Gem::Requirement
200
200
  requirements:
201
- - - ">="
201
+ - - "<"
202
202
  - !ruby/object:Gem::Version
203
- version: '0'
203
+ version: '11.0'
204
204
  type: :development
205
205
  prerelease: false
206
206
  version_requirements: !ruby/object:Gem::Requirement
207
207
  requirements:
208
- - - ">="
208
+ - - "<"
209
209
  - !ruby/object:Gem::Version
210
- version: '0'
210
+ version: '11.0'
211
211
  - !ruby/object:Gem::Dependency
212
212
  name: pry
213
213
  requirement: !ruby/object:Gem::Requirement
@@ -250,6 +250,8 @@ files:
250
250
  - lib/capybara/node/simple.rb
251
251
  - lib/capybara/queries/base_query.rb
252
252
  - lib/capybara/queries/current_path_query.rb
253
+ - lib/capybara/queries/match_query.rb
254
+ - lib/capybara/queries/selector_query.rb
253
255
  - lib/capybara/queries/text_query.rb
254
256
  - lib/capybara/queries/title_query.rb
255
257
  - lib/capybara/query.rb
@@ -264,6 +266,7 @@ files:
264
266
  - lib/capybara/rspec/features.rb
265
267
  - lib/capybara/rspec/matchers.rb
266
268
  - lib/capybara/selector.rb
269
+ - lib/capybara/selector/filter.rb
267
270
  - lib/capybara/selenium/driver.rb
268
271
  - lib/capybara/selenium/node.rb
269
272
  - lib/capybara/server.rb
@@ -294,6 +297,10 @@ files:
294
297
  - lib/capybara/spec/session/current_url_spec.rb
295
298
  - lib/capybara/spec/session/dismiss_confirm_spec.rb
296
299
  - lib/capybara/spec/session/dismiss_prompt_spec.rb
300
+ - lib/capybara/spec/session/element/assert_match_selector.rb
301
+ - lib/capybara/spec/session/element/match_css_spec.rb
302
+ - lib/capybara/spec/session/element/match_xpath_spec.rb
303
+ - lib/capybara/spec/session/element/matches_selector_spec.rb
297
304
  - lib/capybara/spec/session/evaluate_script_spec.rb
298
305
  - lib/capybara/spec/session/execute_script_spec.rb
299
306
  - lib/capybara/spec/session/fill_in_spec.rb
@@ -327,6 +334,7 @@ files:
327
334
  - lib/capybara/spec/session/save_screenshot_spec.rb
328
335
  - lib/capybara/spec/session/screenshot_spec.rb
329
336
  - lib/capybara/spec/session/select_spec.rb
337
+ - lib/capybara/spec/session/selectors_spec.rb
330
338
  - lib/capybara/spec/session/source_spec.rb
331
339
  - lib/capybara/spec/session/text_spec.rb
332
340
  - lib/capybara/spec/session/title_spec.rb
@@ -367,7 +375,9 @@ files:
367
375
  - lib/capybara/spec/views/with_js.erb
368
376
  - lib/capybara/spec/views/with_scope.erb
369
377
  - lib/capybara/spec/views/with_simple_html.erb
378
+ - lib/capybara/spec/views/with_slow_unload.erb
370
379
  - lib/capybara/spec/views/with_title.erb
380
+ - lib/capybara/spec/views/with_unload_alert.erb
371
381
  - lib/capybara/spec/views/with_windows.erb
372
382
  - lib/capybara/spec/views/within_frames.erb
373
383
  - lib/capybara/version.rb