capybara 2.7.1 → 2.8.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 +22 -0
- data/README.md +27 -3
- data/lib/capybara.rb +19 -4
- data/lib/capybara/driver/base.rb +6 -2
- data/lib/capybara/driver/node.rb +13 -5
- data/lib/capybara/helpers.rb +2 -2
- data/lib/capybara/node/actions.rb +116 -17
- data/lib/capybara/node/base.rb +7 -1
- data/lib/capybara/node/element.rb +23 -3
- data/lib/capybara/node/finders.rb +45 -29
- data/lib/capybara/node/matchers.rb +13 -15
- data/lib/capybara/queries/selector_query.rb +22 -5
- data/lib/capybara/queries/text_query.rb +42 -6
- data/lib/capybara/rack_test/node.rb +13 -1
- data/lib/capybara/result.rb +80 -8
- data/lib/capybara/rspec/features.rb +13 -6
- data/lib/capybara/selector.rb +98 -71
- data/lib/capybara/selector/filter_set.rb +46 -0
- data/lib/capybara/selenium/driver.rb +22 -23
- data/lib/capybara/selenium/node.rb +14 -6
- data/lib/capybara/server.rb +20 -10
- data/lib/capybara/session.rb +44 -8
- data/lib/capybara/spec/session/all_spec.rb +4 -4
- data/lib/capybara/spec/session/assert_text.rb +23 -0
- data/lib/capybara/spec/session/check_spec.rb +66 -8
- data/lib/capybara/spec/session/choose_spec.rb +20 -0
- data/lib/capybara/spec/session/click_button_spec.rb +0 -3
- data/lib/capybara/spec/session/click_link_spec.rb +7 -0
- data/lib/capybara/spec/session/execute_script_spec.rb +6 -1
- data/lib/capybara/spec/session/find_button_spec.rb +19 -1
- data/lib/capybara/spec/session/find_field_spec.rb +21 -1
- data/lib/capybara/spec/session/find_link_spec.rb +19 -1
- data/lib/capybara/spec/session/find_spec.rb +32 -4
- data/lib/capybara/spec/session/first_spec.rb +4 -4
- data/lib/capybara/spec/session/has_field_spec.rb +4 -0
- data/lib/capybara/spec/session/has_text_spec.rb +2 -2
- data/lib/capybara/spec/session/node_spec.rb +24 -3
- data/lib/capybara/spec/session/reset_session_spec.rb +7 -0
- data/lib/capybara/spec/session/selectors_spec.rb +14 -0
- data/lib/capybara/spec/session/uncheck_spec.rb +39 -0
- data/lib/capybara/spec/session/window/switch_to_window_spec.rb +4 -2
- data/lib/capybara/spec/session/window/window_opened_by_spec.rb +2 -1
- data/lib/capybara/spec/session/window/window_spec.rb +36 -22
- data/lib/capybara/spec/session/within_frame_spec.rb +19 -0
- data/lib/capybara/spec/spec_helper.rb +3 -0
- data/lib/capybara/spec/views/form.erb +34 -6
- data/lib/capybara/spec/views/with_html.erb +5 -1
- data/lib/capybara/spec/views/with_unload_alert.erb +3 -1
- data/lib/capybara/spec/views/with_windows.erb +2 -0
- data/lib/capybara/version.rb +1 -1
- data/spec/capybara_spec.rb +34 -0
- data/spec/rack_test_spec.rb +24 -0
- data/spec/result_spec.rb +25 -0
- data/spec/rspec/features_spec.rb +3 -3
- data/spec/selenium_spec.rb +6 -3
- data/spec/server_spec.rb +2 -2
- metadata +18 -4
@@ -9,32 +9,38 @@ Capybara::SpecHelper.spec '#within_frame', :requires => [:frames] do
|
|
9
9
|
expect(@session.find("//*[@id='divInFrameOne']").text).to eql 'This is the text of divInFrameOne'
|
10
10
|
end
|
11
11
|
end
|
12
|
+
|
12
13
|
it "should find the div in FrameTwo" do
|
13
14
|
@session.within_frame("frameTwo") do
|
14
15
|
expect(@session.find("//*[@id='divInFrameTwo']").text).to eql 'This is the text of divInFrameTwo'
|
15
16
|
end
|
16
17
|
end
|
18
|
+
|
17
19
|
it "should find the text div in the main window after finding text in frameOne" do
|
18
20
|
@session.within_frame("frameOne") do
|
19
21
|
expect(@session.find("//*[@id='divInFrameOne']").text).to eql 'This is the text of divInFrameOne'
|
20
22
|
end
|
21
23
|
expect(@session.find("//*[@id='divInMainWindow']").text).to eql 'This is the text for divInMainWindow'
|
22
24
|
end
|
25
|
+
|
23
26
|
it "should find the text div in the main window after finding text in frameTwo" do
|
24
27
|
@session.within_frame("frameTwo") do
|
25
28
|
expect(@session.find("//*[@id='divInFrameTwo']").text).to eql 'This is the text of divInFrameTwo'
|
26
29
|
end
|
27
30
|
expect(@session.find("//*[@id='divInMainWindow']").text).to eql 'This is the text for divInMainWindow'
|
28
31
|
end
|
32
|
+
|
29
33
|
it "should return the result of executing the block" do
|
30
34
|
expect(@session.within_frame("frameOne") { "return value" }).to eql "return value"
|
31
35
|
end
|
36
|
+
|
32
37
|
it "should find the div given Element" do
|
33
38
|
element = @session.find(:id, 'frameOne')
|
34
39
|
@session.within_frame element do
|
35
40
|
expect(@session.find("//*[@id='divInFrameOne']").text).to eql 'This is the text of divInFrameOne'
|
36
41
|
end
|
37
42
|
end
|
43
|
+
|
38
44
|
it "should find multiple nested frames" do
|
39
45
|
@session.within_frame 'parentFrame' do
|
40
46
|
@session.within_frame 'childFrame' do
|
@@ -43,6 +49,7 @@ Capybara::SpecHelper.spec '#within_frame', :requires => [:frames] do
|
|
43
49
|
end
|
44
50
|
end
|
45
51
|
end
|
52
|
+
|
46
53
|
it "should reset scope when changing frames" do
|
47
54
|
@session.within(:css, '#divInMainWindow') do
|
48
55
|
@session.within_frame 'parentFrame' do
|
@@ -60,4 +67,16 @@ Capybara::SpecHelper.spec '#within_frame', :requires => [:frames] do
|
|
60
67
|
expect(@session).not_to have_selector(:css, '#childFrame')
|
61
68
|
end
|
62
69
|
end
|
70
|
+
|
71
|
+
it "should support the driver #switch_to_frame api" do
|
72
|
+
# This test is purely to notify driver authors to update their API.
|
73
|
+
# The #switch_to_frame API will be required in the next version (> 2.8) of Capybara for frames support.
|
74
|
+
# It should not be used as an example of code for users.
|
75
|
+
frame = @session.find(:frame, "frameOne")
|
76
|
+
expect {
|
77
|
+
@session.driver.switch_to_frame(frame)
|
78
|
+
sleep 0.5
|
79
|
+
@session.driver.switch_to_frame(:parent)
|
80
|
+
}.not_to raise_error
|
81
|
+
end
|
63
82
|
end
|
@@ -22,6 +22,8 @@ module Capybara
|
|
22
22
|
config.filter_run_excluding :requires => method(:filter).to_proc
|
23
23
|
config.before { Capybara::SpecHelper.reset! }
|
24
24
|
config.after { Capybara::SpecHelper.reset! }
|
25
|
+
# Test in 3.5+ where metadata doesn't autotrigger shared context inclusion - will be only behavior in RSpec 4
|
26
|
+
config.shared_context_metadata_behavior = :apply_to_host_groups if RSpec::Core::Version::STRING.to_f >= 3.5
|
25
27
|
end
|
26
28
|
|
27
29
|
def reset!
|
@@ -36,6 +38,7 @@ module Capybara
|
|
36
38
|
Capybara.visible_text_only = false
|
37
39
|
Capybara.match = :smart
|
38
40
|
Capybara.wait_on_first_by_default = false
|
41
|
+
Capybara.enable_aria_label = false
|
39
42
|
end
|
40
43
|
|
41
44
|
def filter(requires, metadata)
|
@@ -37,7 +37,7 @@
|
|
37
37
|
<p>
|
38
38
|
<label for="form_first_name">
|
39
39
|
First Name
|
40
|
-
<input type="text" name="form[first_name]" value="John" id="form_first_name"/>
|
40
|
+
<input type="text" name="form[first_name]" value="John" id="form_first_name" placeholder="FirstName"/>
|
41
41
|
</label>
|
42
42
|
</p>
|
43
43
|
|
@@ -154,6 +154,15 @@ New line after and before textarea tag
|
|
154
154
|
<label for="gender_both">Both</label>
|
155
155
|
</p>
|
156
156
|
|
157
|
+
<p>
|
158
|
+
<input type="radio" name="form[party]" value="democrat" id="party_democrat" style="display:none"/>
|
159
|
+
<label for="party_democrat">Democrat</label>
|
160
|
+
<input type="radio" name="form[party]" value="republican" id="party_republican" style="display:none"/>
|
161
|
+
<label for="party_republican">Republican</label>
|
162
|
+
<input type="radio" name="form[party]" value="independent" id="party_independent" checked="checked" style="display:none"/>
|
163
|
+
<label for="party_independent">Independent</label>
|
164
|
+
</p>
|
165
|
+
|
157
166
|
<p>
|
158
167
|
<input type="checkbox" id="no_attr_value_checked" value="1" checked/>
|
159
168
|
</p>
|
@@ -167,6 +176,24 @@ New line after and before textarea tag
|
|
167
176
|
<label for="form_pets_hamster">Hamster</label>
|
168
177
|
</p>
|
169
178
|
|
179
|
+
<p>
|
180
|
+
<input type="checkbox" value="jaguar" name="form[cars][]" id="form_cars_jaguar" checked="checked" style="display: none"/>
|
181
|
+
<label for="form_cars_jaguar">Jaguar</label>
|
182
|
+
<input type="checkbox" value="tesla" name="form[cars][]" id="form_cars_tesla" style="display: none"/>
|
183
|
+
<label for="form_cars_tesla">Tesla</label>
|
184
|
+
<input type="checkbox" value="ferrari" name="form[cars][]" id="form_cars_ferrari" checked="checked" style="display: none"/>
|
185
|
+
<label for="form_cars_ferrari">Ferrari</label>
|
186
|
+
<input type="checkbox" value="ariel" name="form[cars][]" id="form_cars_ariel" style="display: none"/>
|
187
|
+
<label>
|
188
|
+
McLaren
|
189
|
+
<input type="checkbox" value="mclaren" name="form[cars][]" id="form_cars_mclaren" style="display: none"/>
|
190
|
+
</label>
|
191
|
+
<label>
|
192
|
+
Koenigsegg
|
193
|
+
<input type="checkbox" value="koenigsegg" name="form[cars][]" id="form_cars_koenigsegg" checked="checked" style="display: none"/>
|
194
|
+
</label>
|
195
|
+
</p>
|
196
|
+
|
170
197
|
<p>
|
171
198
|
<input type="checkbox" name="form[valueless_checkbox]" id="valueless_checkbox" checked="checked"/>
|
172
199
|
<label for="valueless_checkbox">Valueless Checkbox</label>
|
@@ -226,7 +253,7 @@ New line after and before textarea tag
|
|
226
253
|
|
227
254
|
<label for='address1_country'>Country</label>
|
228
255
|
<select name="form[addresses][][country]" id="address1_country">
|
229
|
-
<option>France</option>
|
256
|
+
<option selected>France</option>
|
230
257
|
<option>Ukraine</option>
|
231
258
|
</select>
|
232
259
|
</p>
|
@@ -242,7 +269,7 @@ New line after and before textarea tag
|
|
242
269
|
<label for='address2_country'>Country</label>
|
243
270
|
<select name="form[addresses][][country]" id="address2_country">
|
244
271
|
<option>France</option>
|
245
|
-
<option>Ukraine</option>
|
272
|
+
<option selected>Ukraine</option>
|
246
273
|
</select>
|
247
274
|
</p>
|
248
275
|
|
@@ -370,7 +397,7 @@ New line after and before textarea tag
|
|
370
397
|
</p>
|
371
398
|
|
372
399
|
<p>
|
373
|
-
<input type="submit" name="form[mediocre]" id="mediocre" value="med"/>
|
400
|
+
<input type="submit" name="form[mediocre]" id="mediocre" value="med" aria-label="Mediocre Button"/>
|
374
401
|
<p>
|
375
402
|
</form>
|
376
403
|
|
@@ -455,9 +482,10 @@ New line after and before textarea tag
|
|
455
482
|
<label for="html5_search">Html5 Search</label>
|
456
483
|
<input type="search" name="form[html5_search]" value="what are you looking for" id="html5_search"/>
|
457
484
|
</p>
|
485
|
+
<p id="emergency">Emergency Number</p>
|
458
486
|
<p>
|
459
487
|
<label for="html5_tel">Html5 Tel</label>
|
460
|
-
<input type="tel" name="form[html5_tel]" value="911" id="html5_tel"/>
|
488
|
+
<input type="tel" aria-labelledby="emergency" name="form[html5_tel]" value="911" id="html5_tel"/>
|
461
489
|
</p>
|
462
490
|
<p>
|
463
491
|
<label for="html5_color">Html5 Color</label>
|
@@ -480,7 +508,7 @@ New line after and before textarea tag
|
|
480
508
|
|
481
509
|
<form action="/other_form" method="post">
|
482
510
|
<p>
|
483
|
-
<input type="text" name="form[which_form]" value="formaction form"/>
|
511
|
+
<input type="text" name="form[which_form]" value="formaction form" aria-label="Unlabelled Input"/>
|
484
512
|
</p>
|
485
513
|
<input type="submit" name="form[button]" formaction="/form" value="Formaction button"/>
|
486
514
|
<input type="submit" name="form[button]" formaction="/form/get" formmethod="get" value="Formmethod button"/>
|
@@ -19,7 +19,7 @@
|
|
19
19
|
et dolore magna aliqua. Ut enim ad minim veniam,
|
20
20
|
quis nostrud exercitation <a href="/foo" id="foo">ullamco</a> laboris nisi
|
21
21
|
ut aliquip ex ea commodo consequat.
|
22
|
-
<a href="/with_simple_html"><img width="20" height="20" alt="awesome image" /></a>
|
22
|
+
<a href="/with_simple_html" aria-label="Go to simple"><img width="20" height="20" alt="awesome image" /></a>
|
23
23
|
</p>
|
24
24
|
|
25
25
|
<p class="para" id="second">
|
@@ -79,6 +79,10 @@ banana</textarea>
|
|
79
79
|
Some of this text is <em style="display:none">hidden!</em>
|
80
80
|
</div>
|
81
81
|
|
82
|
+
<div id="some-hidden-text">
|
83
|
+
Some of this text is not hidden <em style="display:none">and some is hidden</em>
|
84
|
+
</div>
|
85
|
+
|
82
86
|
<div style="display: none;">
|
83
87
|
<a id="first_invisble" class="hidden">first hidden link</a>
|
84
88
|
</div>
|
data/lib/capybara/version.rb
CHANGED
data/spec/capybara_spec.rb
CHANGED
@@ -77,6 +77,40 @@ RSpec.describe Capybara do
|
|
77
77
|
expect(Capybara.server).to eq(server)
|
78
78
|
end
|
79
79
|
end
|
80
|
+
|
81
|
+
describe 'app_host' do
|
82
|
+
after do
|
83
|
+
Capybara.app_host = nil
|
84
|
+
end
|
85
|
+
|
86
|
+
it "should warn if not a valid URL" do
|
87
|
+
expect { Capybara.app_host = "www.example.com" }.to raise_error(ArgumentError, /Capybara\.app_host should be set to a url/)
|
88
|
+
end
|
89
|
+
|
90
|
+
it "should not warn if a valid URL" do
|
91
|
+
expect { Capybara.app_host = "http://www.example.com" }.not_to raise_error
|
92
|
+
end
|
93
|
+
|
94
|
+
it "should not warn if nil" do
|
95
|
+
expect { Capybara.app_host = nil }.not_to raise_error
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
describe 'default_host' do
|
100
|
+
around do |test|
|
101
|
+
old_default = Capybara.default_host
|
102
|
+
test.run
|
103
|
+
Capybara.default_host = old_default
|
104
|
+
end
|
105
|
+
|
106
|
+
it "should warn if not a valid URL" do
|
107
|
+
expect { Capybara.default_host = "www.example.com" }.to raise_error(ArgumentError, /Capybara\.default_host should be set to a url/)
|
108
|
+
end
|
109
|
+
|
110
|
+
it "should not warn if a valid URL" do
|
111
|
+
expect { Capybara.default_host = "http://www.example.com" }.not_to raise_error
|
112
|
+
end
|
113
|
+
end
|
80
114
|
end
|
81
115
|
|
82
116
|
RSpec.describe Capybara::Session do
|
data/spec/rack_test_spec.rb
CHANGED
@@ -80,6 +80,30 @@ RSpec.describe Capybara::Session do
|
|
80
80
|
end
|
81
81
|
end
|
82
82
|
end
|
83
|
+
|
84
|
+
describe "#click" do
|
85
|
+
context "on a label" do
|
86
|
+
it "should toggle the associated checkbox" do
|
87
|
+
@session.visit("/form")
|
88
|
+
expect(@session).to have_unchecked_field('form_pets_cat')
|
89
|
+
@session.find(:label, 'Cat').click
|
90
|
+
expect(@session).to have_checked_field('form_pets_cat')
|
91
|
+
@session.find(:label, 'Cat').click
|
92
|
+
expect(@session).to have_unchecked_field('form_pets_cat')
|
93
|
+
@session.find(:label, 'McLaren').click
|
94
|
+
expect(@session).to have_checked_field('form_cars_mclaren', visible: :hidden)
|
95
|
+
end
|
96
|
+
|
97
|
+
it "should toggle the associated radio" do
|
98
|
+
@session.visit("/form")
|
99
|
+
expect(@session).to have_unchecked_field('gender_male')
|
100
|
+
@session.find(:label, 'Male').click
|
101
|
+
expect(@session).to have_checked_field('gender_male')
|
102
|
+
@session.find(:label, 'Female').click
|
103
|
+
expect(@session).to have_unchecked_field('gender_male')
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
83
107
|
end
|
84
108
|
end
|
85
109
|
|
data/spec/result_spec.rb
CHANGED
@@ -63,4 +63,29 @@ RSpec.describe Capybara::Result do
|
|
63
63
|
el.text == 'Gamma'
|
64
64
|
end).to eq(2)
|
65
65
|
end
|
66
|
+
|
67
|
+
it 'supports all modes of []' do
|
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']
|
71
|
+
expect(result[-1].text).to eq 'Delta'
|
72
|
+
end
|
73
|
+
|
74
|
+
#Not a great test but it indirectly tests what is needed
|
75
|
+
it "should evaluate filters lazily" do
|
76
|
+
#Not processed until accessed
|
77
|
+
expect(result.instance_variable_get('@result_cache').size).to be 0
|
78
|
+
|
79
|
+
#Only one retrieved when needed
|
80
|
+
result.first
|
81
|
+
expect(result.instance_variable_get('@result_cache').size).to be 1
|
82
|
+
|
83
|
+
#works for indexed access
|
84
|
+
result[2]
|
85
|
+
expect(result.instance_variable_get('@result_cache').size).to be 3
|
86
|
+
|
87
|
+
#All cached when converted to array
|
88
|
+
result.to_a
|
89
|
+
expect(result.instance_variable_get('@result_cache').size).to eq 4
|
90
|
+
end
|
66
91
|
end
|
data/spec/rspec/features_spec.rb
CHANGED
@@ -6,11 +6,11 @@ RSpec.configuration.before(:each, { file_path: "./spec/rspec/features_spec.rb" }
|
|
6
6
|
@in_filtered_hook = true
|
7
7
|
end
|
8
8
|
|
9
|
-
feature "Capybara's feature DSL" do
|
9
|
+
feature "Capybara's feature DSL" do
|
10
10
|
background do
|
11
11
|
@in_background = true
|
12
12
|
end
|
13
|
-
|
13
|
+
|
14
14
|
def current_example(context)
|
15
15
|
RSpec.respond_to?(:current_example) ? RSpec.current_example : context.example
|
16
16
|
end
|
@@ -20,7 +20,7 @@ feature "Capybara's feature DSL" do
|
|
20
20
|
expect(page).to have_content('Hello world!')
|
21
21
|
end
|
22
22
|
|
23
|
-
scenario "preserves description" do
|
23
|
+
scenario "preserves description" do
|
24
24
|
expect(current_example(self).metadata[:full_description])
|
25
25
|
.to eq("Capybara's feature DSL preserves description")
|
26
26
|
end
|
data/spec/selenium_spec.rb
CHANGED
@@ -2,10 +2,13 @@
|
|
2
2
|
require 'spec_helper'
|
3
3
|
require "selenium-webdriver"
|
4
4
|
|
5
|
+
Selenium::WebDriver::Firefox.driver_path = '/home/travis/geckodriver' if ENV['TRAVIS'] && ENV['GECKODRIVER']
|
6
|
+
|
5
7
|
Capybara.register_driver :selenium_focus do |app|
|
6
|
-
profile = Selenium::WebDriver::Firefox::Profile.new
|
7
|
-
profile["focusmanager.testmode"] = true
|
8
|
-
Capybara::Selenium::Driver.new(app, browser: :firefox, profile: profile)
|
8
|
+
# profile = Selenium::WebDriver::Firefox::Profile.new
|
9
|
+
# profile["focusmanager.testmode"] = true
|
10
|
+
# Capybara::Selenium::Driver.new(app, browser: :firefox, profile: profile)
|
11
|
+
Capybara::Selenium::Driver.new(app, browser: :firefox)
|
9
12
|
end
|
10
13
|
|
11
14
|
module TestSessions
|
data/spec/server_spec.rb
CHANGED
@@ -116,7 +116,7 @@ RSpec.describe Capybara::Server do
|
|
116
116
|
expect {
|
117
117
|
server1.wait_for_pending_requests
|
118
118
|
}.to change{done}.from(false).to(true)
|
119
|
-
expect(server2.
|
119
|
+
expect(server2.send(:pending_requests?)).to eq(false)
|
120
120
|
end
|
121
121
|
|
122
122
|
end
|
@@ -165,7 +165,7 @@ RSpec.describe Capybara::Server do
|
|
165
165
|
expect {
|
166
166
|
server1.wait_for_pending_requests
|
167
167
|
}.to change{done}.from(false).to(true)
|
168
|
-
expect(server2.
|
168
|
+
expect(server2.send(:pending_requests?)).to eq(true)
|
169
169
|
end
|
170
170
|
|
171
171
|
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.
|
4
|
+
version: 2.8.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-
|
13
|
+
date: 2016-08-16 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: nokogiri
|
@@ -222,6 +222,20 @@ dependencies:
|
|
222
222
|
- - ">="
|
223
223
|
- !ruby/object:Gem::Version
|
224
224
|
version: '0'
|
225
|
+
- !ruby/object:Gem::Dependency
|
226
|
+
name: erubis
|
227
|
+
requirement: !ruby/object:Gem::Requirement
|
228
|
+
requirements:
|
229
|
+
- - ">="
|
230
|
+
- !ruby/object:Gem::Version
|
231
|
+
version: '0'
|
232
|
+
type: :development
|
233
|
+
prerelease: false
|
234
|
+
version_requirements: !ruby/object:Gem::Requirement
|
235
|
+
requirements:
|
236
|
+
- - ">="
|
237
|
+
- !ruby/object:Gem::Version
|
238
|
+
version: '0'
|
225
239
|
description: Capybara is an integration testing tool for rack based web applications.
|
226
240
|
It simulates how a user would interact with a website
|
227
241
|
email:
|
@@ -267,6 +281,7 @@ files:
|
|
267
281
|
- lib/capybara/rspec/matchers.rb
|
268
282
|
- lib/capybara/selector.rb
|
269
283
|
- lib/capybara/selector/filter.rb
|
284
|
+
- lib/capybara/selector/filter_set.rb
|
270
285
|
- lib/capybara/selenium/driver.rb
|
271
286
|
- lib/capybara/selenium/node.rb
|
272
287
|
- lib/capybara/server.rb
|
@@ -419,10 +434,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
419
434
|
version: '0'
|
420
435
|
requirements: []
|
421
436
|
rubyforge_project:
|
422
|
-
rubygems_version: 2.6.
|
437
|
+
rubygems_version: 2.6.4
|
423
438
|
signing_key:
|
424
439
|
specification_version: 4
|
425
440
|
summary: Capybara aims to simplify the process of integration testing Rack applications,
|
426
441
|
such as Rails, Sinatra or Merb
|
427
442
|
test_files: []
|
428
|
-
has_rdoc:
|