capybara 2.14.0 → 2.14.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/History.md +12 -0
- data/README.md +1 -1
- data/lib/capybara.rb +16 -15
- data/lib/capybara/minitest.rb +92 -113
- data/lib/capybara/minitest/spec.rb +12 -37
- data/lib/capybara/node/matchers.rb +6 -5
- data/lib/capybara/queries/base_query.rb +4 -0
- data/lib/capybara/queries/current_path_query.rb +1 -0
- data/lib/capybara/queries/selector_query.rb +39 -12
- data/lib/capybara/queries/text_query.rb +1 -1
- data/lib/capybara/queries/title_query.rb +1 -0
- data/lib/capybara/rack_test/driver.rb +1 -0
- data/lib/capybara/rspec/matcher_proxies.rb +10 -6
- data/lib/capybara/rspec/matchers.rb +29 -0
- data/lib/capybara/selector.rb +61 -50
- data/lib/capybara/selector/expression_filter.rb +40 -0
- data/lib/capybara/selector/filter_set.rb +22 -3
- data/lib/capybara/selector/selector.rb +33 -12
- data/lib/capybara/selenium/driver.rb +130 -25
- data/lib/capybara/selenium/node.rb +3 -3
- data/lib/capybara/session/config.rb +29 -23
- data/lib/capybara/session/matchers.rb +3 -0
- data/lib/capybara/spec/session/accept_alert_spec.rb +1 -1
- data/lib/capybara/spec/session/all_spec.rb +2 -1
- data/lib/capybara/spec/session/assert_selector.rb +1 -1
- data/lib/capybara/spec/session/assert_title.rb +22 -9
- data/lib/capybara/spec/session/dismiss_confirm_spec.rb +3 -3
- data/lib/capybara/spec/session/dismiss_prompt_spec.rb +1 -1
- data/lib/capybara/spec/session/find_spec.rb +3 -2
- data/lib/capybara/spec/session/first_spec.rb +10 -5
- data/lib/capybara/spec/session/has_css_spec.rb +11 -0
- data/lib/capybara/spec/session/has_current_path_spec.rb +5 -3
- data/lib/capybara/spec/session/has_select_spec.rb +62 -4
- data/lib/capybara/spec/session/has_text_spec.rb +5 -3
- data/lib/capybara/spec/session/has_title_spec.rb +4 -2
- data/lib/capybara/spec/session/has_xpath_spec.rb +5 -3
- data/lib/capybara/spec/session/node_spec.rb +8 -4
- data/lib/capybara/spec/session/window/become_closed_spec.rb +4 -4
- data/lib/capybara/spec/session/window/window_opened_by_spec.rb +4 -4
- data/lib/capybara/spec/spec_helper.rb +1 -1
- data/lib/capybara/spec/views/form.erb +22 -1
- data/lib/capybara/spec/views/with_html.erb +1 -1
- data/lib/capybara/version.rb +1 -1
- data/spec/capybara_spec.rb +16 -0
- data/spec/filter_set_spec.rb +28 -0
- data/spec/minitest_spec_spec.rb +4 -4
- data/spec/per_session_config_spec.rb +4 -4
- data/spec/result_spec.rb +20 -0
- data/spec/selector_spec.rb +2 -1
- data/spec/selenium_spec_chrome.rb +12 -1
- data/spec/selenium_spec_firefox.rb +2 -1
- data/spec/selenium_spec_marionette.rb +4 -3
- data/spec/shared_selenium_session.rb +14 -7
- metadata +18 -2
@@ -22,12 +22,12 @@ Capybara::SpecHelper.spec '#window_opened_by', requires: [:windows] do
|
|
22
22
|
Capybara.using_wait_time 2 do
|
23
23
|
button=@session.find(:css, '#openWindowWithLongerTimeout')
|
24
24
|
expect do
|
25
|
-
@session.window_opened_by(wait: 0.
|
25
|
+
@session.window_opened_by(wait: 0.3) do
|
26
26
|
button.click
|
27
27
|
end
|
28
28
|
end.to raise_error(Capybara::WindowError, zero_windows_message)
|
29
29
|
end
|
30
|
-
@session.document.synchronize(
|
30
|
+
@session.document.synchronize(5, errors: [Capybara::CapybaraError]) do
|
31
31
|
raise Capybara::CapybaraError if @session.windows.size != 2
|
32
32
|
end
|
33
33
|
end
|
@@ -46,7 +46,7 @@ Capybara::SpecHelper.spec '#window_opened_by', requires: [:windows] do
|
|
46
46
|
context 'without :wait option' do
|
47
47
|
it 'should raise error if default_max_wait_time is less than timeout' do
|
48
48
|
button = @session.find(:css, '#openWindowWithTimeout')
|
49
|
-
Capybara.using_wait_time 0.
|
49
|
+
Capybara.using_wait_time 0.1 do
|
50
50
|
expect do
|
51
51
|
@session.window_opened_by do
|
52
52
|
button.click
|
@@ -60,7 +60,7 @@ Capybara::SpecHelper.spec '#window_opened_by', requires: [:windows] do
|
|
60
60
|
|
61
61
|
it 'should find window if default_max_wait_time is more than timeout' do
|
62
62
|
button = @session.find(:css, '#openWindowWithTimeout')
|
63
|
-
Capybara.using_wait_time
|
63
|
+
Capybara.using_wait_time 5 do
|
64
64
|
window = @session.window_opened_by do
|
65
65
|
button.click
|
66
66
|
end
|
@@ -235,6 +235,17 @@ New line after and before textarea tag
|
|
235
235
|
</select>
|
236
236
|
</p>
|
237
237
|
|
238
|
+
<!-- invisible multiselect and options -->
|
239
|
+
<p style="display: none">
|
240
|
+
<label for="form_dessert">Dessert</label>
|
241
|
+
<select name="form[dessert]" id="form_dessert" multiple="multiple">
|
242
|
+
<option selected="selected">Pudding</option>
|
243
|
+
<option>Lava cake</option>
|
244
|
+
<option selected="selected">Tiramisu</option>
|
245
|
+
<option>Panna cotta</option>
|
246
|
+
</select>
|
247
|
+
</p>
|
248
|
+
|
238
249
|
<!-- visible select with invisible selected option (which some browsers may treat as visible) -->
|
239
250
|
<p>
|
240
251
|
<label for="form_sorbet">Sorbet</label>
|
@@ -245,6 +256,17 @@ New line after and before textarea tag
|
|
245
256
|
</select>
|
246
257
|
</p>
|
247
258
|
|
259
|
+
<!-- visible multiselect with invisible selected options (which some browsers may treat as visible) -->
|
260
|
+
<p>
|
261
|
+
<label for="form_cake">Cake</label>
|
262
|
+
<select name="form[cake]" id="form_cake" multiple="multiple">
|
263
|
+
<option>Butter Cake</option>
|
264
|
+
<option selected="selected" style="display: none">Chocolate Cake</option>
|
265
|
+
<option>Strawberry Cake</option>
|
266
|
+
<option selected="selected" style="display: none">Sponge Cake</option>
|
267
|
+
</select>
|
268
|
+
</p>
|
269
|
+
|
248
270
|
<p>
|
249
271
|
<span>First address<span>
|
250
272
|
<label for='address1_street'>Street</label>
|
@@ -593,4 +615,3 @@ New line after and before textarea tag
|
|
593
615
|
<label for="asterisk_input">With Asterisk<abbr title="required">*</abbr></label>
|
594
616
|
<input id="asterisk_input" type="number"value="2016"/>
|
595
617
|
</p>
|
596
|
-
|
@@ -13,7 +13,7 @@
|
|
13
13
|
<span class="number">42</span>
|
14
14
|
<span>Other span</span>
|
15
15
|
|
16
|
-
<p class="para" id="first">
|
16
|
+
<p class="para" id="first" data-random="abc\def">
|
17
17
|
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
|
18
18
|
tempor incididunt ut <a href="/with_simple_html" title="awesome title" class="simple">labore</a>
|
19
19
|
et dolore magna aliqua. Ut enim ad minim veniam,
|
data/lib/capybara/version.rb
CHANGED
data/spec/capybara_spec.rb
CHANGED
@@ -79,6 +79,22 @@ RSpec.describe Capybara do
|
|
79
79
|
Capybara.server(&server)
|
80
80
|
expect(Capybara.server).to eq(server)
|
81
81
|
end
|
82
|
+
|
83
|
+
it "should have :webrick registered" do
|
84
|
+
require 'rack/handler/webrick'
|
85
|
+
mock_app = double('app')
|
86
|
+
Capybara.server = :webrick
|
87
|
+
expect(Rack::Handler::WEBrick).to receive(:run)
|
88
|
+
Capybara.server.call(mock_app, 8000)
|
89
|
+
end
|
90
|
+
|
91
|
+
it "should have :puma registered" do
|
92
|
+
require 'rack/handler/puma'
|
93
|
+
mock_app = double('app')
|
94
|
+
Capybara.server = :puma
|
95
|
+
expect(Rack::Handler::Puma).to receive(:run)
|
96
|
+
Capybara.server.call(mock_app, 8000)
|
97
|
+
end
|
82
98
|
end
|
83
99
|
|
84
100
|
describe 'app_host' do
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
RSpec.describe Capybara::Selector::FilterSet do
|
5
|
+
after do
|
6
|
+
Capybara::Selector::FilterSet.remove(:test)
|
7
|
+
end
|
8
|
+
|
9
|
+
it "allows node filters" do
|
10
|
+
fs = Capybara::Selector::FilterSet.add(:test) do
|
11
|
+
filter(:node_test, :boolean) { |node, value| true }
|
12
|
+
expression_filter(:expression_test, :boolean) { |expr, value| true }
|
13
|
+
end
|
14
|
+
|
15
|
+
expect(fs.node_filters.keys).to include(:node_test)
|
16
|
+
expect(fs.node_filters.keys).not_to include(:expression_test)
|
17
|
+
end
|
18
|
+
|
19
|
+
it "allows expression filters" do
|
20
|
+
fs = Capybara::Selector::FilterSet.add(:test) do
|
21
|
+
filter(:node_test, :boolean) { |node, value| true }
|
22
|
+
expression_filter(:expression_test, :boolean) { |expr, value| true }
|
23
|
+
end
|
24
|
+
|
25
|
+
expect(fs.expression_filters.keys).to include(:expression_test)
|
26
|
+
expect(fs.expression_filters.keys).not_to include(:node_test)
|
27
|
+
end
|
28
|
+
end
|
data/spec/minitest_spec_spec.rb
CHANGED
@@ -37,10 +37,10 @@ class MinitestSpecTest < Minitest::Spec
|
|
37
37
|
page.must_have_xpath('.//input[@id="customer_email"]')
|
38
38
|
page.wont_have_xpath('.//select[@id="not_form_title"]')
|
39
39
|
page.wont_have_xpath('.//input[@id="customer_email"]') { |el| el[:id] == "not_customer_email" }
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
40
|
+
select = find(:select, 'form_title')
|
41
|
+
select.must_have_xpath('.//option[@class="title"]')
|
42
|
+
select.must_have_xpath('.//option', count: 1) { |option| option[:class] != 'title' && !option.disabled?}
|
43
|
+
select.wont_have_xpath('.//input[@id="customer_email"]')
|
44
44
|
end
|
45
45
|
|
46
46
|
it "support css expectations" do
|
@@ -40,12 +40,12 @@ RSpec.describe Capybara::SessionConfig do
|
|
40
40
|
it "doesn't allow session config when false" do
|
41
41
|
Capybara.threadsafe = false
|
42
42
|
session = Capybara::Session.new(:rack_test, TestApp)
|
43
|
-
expect { session.config.default_selector = :title }.to raise_error
|
43
|
+
expect { session.config.default_selector = :title }.to raise_error(/Per session settings are only supported when Capybara.threadsafe == true/)
|
44
44
|
expect do
|
45
45
|
session.configure do |config|
|
46
46
|
config.exact = true
|
47
47
|
end
|
48
|
-
end.to raise_error
|
48
|
+
end.to raise_error(/Session configuration is only supported when Capybara.threadsafe == true/)
|
49
49
|
end
|
50
50
|
|
51
51
|
it "uses the config from the session" do
|
@@ -60,8 +60,8 @@ RSpec.describe Capybara::SessionConfig do
|
|
60
60
|
it "won't change threadsafe once a session is created" do
|
61
61
|
Capybara.threadsafe = true
|
62
62
|
Capybara.threadsafe = false
|
63
|
-
|
64
|
-
expect { Capybara.threadsafe = true }.to raise_error
|
63
|
+
Capybara::Session.new(:rack_test, TestApp)
|
64
|
+
expect { Capybara.threadsafe = true }.to raise_error(/Threadsafe setting cannot be changed once a session is created/)
|
65
65
|
end
|
66
66
|
end
|
67
67
|
end
|
data/spec/result_spec.rb
CHANGED
@@ -71,6 +71,26 @@ RSpec.describe Capybara::Result do
|
|
71
71
|
expect(result[-1].text).to eq 'Delta'
|
72
72
|
end
|
73
73
|
|
74
|
+
it 'works with filter blocks' do
|
75
|
+
result = string.all('//li') { |node| node.text == 'Alpha' }
|
76
|
+
expect(result.size).to eq 1
|
77
|
+
end
|
78
|
+
|
79
|
+
it 'should catch invalid element errors during filtering' do
|
80
|
+
allow_any_instance_of(Capybara::Node::Simple).to receive(:text).and_raise(StandardError)
|
81
|
+
allow_any_instance_of(Capybara::Node::Simple).to receive(:session).and_return(double("session", driver: double("driver", invalid_element_errors: [StandardError] )))
|
82
|
+
result = string.all('//li', text: 'Alpha')
|
83
|
+
expect(result.size).to eq 0
|
84
|
+
end
|
85
|
+
|
86
|
+
it 'should return non-invalid element errors during filtering' do
|
87
|
+
allow_any_instance_of(Capybara::Node::Simple).to receive(:text).and_raise(StandardError)
|
88
|
+
allow_any_instance_of(Capybara::Node::Simple).to receive(:session).and_return(double("session", driver: double("driver", invalid_element_errors: [ArgumentError] )))
|
89
|
+
expect do
|
90
|
+
string.all('//li', text: 'Alpha').to_a
|
91
|
+
end.to raise_error(StandardError)
|
92
|
+
end
|
93
|
+
|
74
94
|
#Not a great test but it indirectly tests what is needed
|
75
95
|
it "should evaluate filters lazily" do
|
76
96
|
skip 'JRuby has an issue with lazy enumerator evaluation' if RUBY_PLATFORM == 'java'
|
data/spec/selector_spec.rb
CHANGED
@@ -28,7 +28,7 @@ RSpec.describe Capybara do
|
|
28
28
|
<input type="hidden" id="hidden_field" value="this is hidden"/>
|
29
29
|
<a href="#">link</a>
|
30
30
|
<fieldset></fieldset>
|
31
|
-
<select>
|
31
|
+
<select id="select">
|
32
32
|
<option value="a">A</option>
|
33
33
|
<option value="b" disabled>B</option>
|
34
34
|
<option value="c" selected>C</option>
|
@@ -177,6 +177,7 @@ RSpec.describe Capybara do
|
|
177
177
|
|
178
178
|
it "finds by type" do
|
179
179
|
expect(string.find(:field, type: 'file')[:id]).to eq 'file'
|
180
|
+
expect(string.find(:field, type: 'select')[:id]).to eq 'select'
|
180
181
|
end
|
181
182
|
end
|
182
183
|
|
@@ -5,11 +5,19 @@ require 'shared_selenium_session'
|
|
5
5
|
|
6
6
|
Capybara.register_driver :selenium_chrome do |app|
|
7
7
|
args = ENV['TRAVIS'] ? ['no-sandbox' ] : []
|
8
|
+
if ENV['CAPYBARA_CHROME_HEADLESS']
|
9
|
+
args << 'headless'
|
10
|
+
Selenium::WebDriver::Chrome.path='/usr/bin/google-chrome-beta' if ENV['TRAVIS']
|
11
|
+
end
|
8
12
|
Capybara::Selenium::Driver.new(app, :browser => :chrome, :args => args)
|
9
13
|
end
|
10
14
|
|
11
15
|
Capybara.register_driver :selenium_chrome_clear_storage do |app|
|
12
16
|
args = ENV['TRAVIS'] ? ['no-sandbox' ] : []
|
17
|
+
if ENV['CAPYBARA_CHROME_HEADLESS']
|
18
|
+
args << 'headless'
|
19
|
+
Selenium::WebDriver::Chrome.path='/usr/bin/google-chrome-beta' if ENV['TRAVIS']
|
20
|
+
end
|
13
21
|
Capybara::Selenium::Driver.new(app, :browser => :chrome,
|
14
22
|
:args => args,
|
15
23
|
clear_local_storage: true,
|
@@ -21,11 +29,14 @@ module TestSessions
|
|
21
29
|
end
|
22
30
|
|
23
31
|
skipped_tests = [:response_headers, :status_code, :trigger]
|
24
|
-
skipped_tests << :windows if ENV['TRAVIS'] &&
|
32
|
+
skipped_tests << :windows if ENV['TRAVIS'] && ENV['SKIP_WINDOW']
|
33
|
+
# skip window tests when headless for now - closing a window not supported by chromedriver/chrome
|
34
|
+
skipped_tests << :windows if ENV['TRAVIS'] && ENV['CAPYBARA_CHROME_HEADLESS']
|
25
35
|
|
26
36
|
Capybara::SpecHelper.run_specs TestSessions::Chrome, "selenium_chrome", capybara_skip: skipped_tests
|
27
37
|
|
28
38
|
RSpec.describe "Capybara::Session with chrome" do
|
39
|
+
include Capybara::SpecHelper
|
29
40
|
include_examples "Capybara::Session", TestSessions::Chrome, :selenium_chrome
|
30
41
|
|
31
42
|
context "storage" do
|
@@ -31,11 +31,12 @@ skipped_tests = [
|
|
31
31
|
:status_code,
|
32
32
|
:trigger
|
33
33
|
]
|
34
|
-
skipped_tests << :windows if ENV['TRAVIS'] &&
|
34
|
+
skipped_tests << :windows if ENV['TRAVIS'] && ENV['SKIP_WINDOW']
|
35
35
|
|
36
36
|
Capybara::SpecHelper.run_specs TestSessions::Selenium, "selenium", capybara_skip: skipped_tests
|
37
37
|
|
38
38
|
RSpec.describe "Capybara::Session with legacy firefox" do
|
39
|
+
include Capybara::SpecHelper
|
39
40
|
include_examples "Capybara::Session", TestSessions::Selenium, :selenium_firefox
|
40
41
|
include_examples Capybara::RSpecMatchers, TestSessions::Selenium, :selenium_firefox
|
41
42
|
|
@@ -8,7 +8,7 @@ Capybara.register_driver :selenium_marionette do |app|
|
|
8
8
|
Capybara::Selenium::Driver.new(
|
9
9
|
app,
|
10
10
|
browser: :firefox,
|
11
|
-
desired_capabilities:
|
11
|
+
desired_capabilities: {marionette: true}
|
12
12
|
)
|
13
13
|
end
|
14
14
|
|
@@ -16,7 +16,7 @@ Capybara.register_driver :selenium_marionette_clear_storage do |app|
|
|
16
16
|
Capybara::Selenium::Driver.new(
|
17
17
|
app,
|
18
18
|
browser: :firefox,
|
19
|
-
desired_capabilities:
|
19
|
+
desired_capabilities: {marionette: true},
|
20
20
|
clear_local_storage: true,
|
21
21
|
clear_session_storage: true
|
22
22
|
)
|
@@ -31,11 +31,12 @@ skipped_tests = [
|
|
31
31
|
:status_code,
|
32
32
|
:trigger
|
33
33
|
]
|
34
|
-
skipped_tests << :windows if ENV['TRAVIS'] &&
|
34
|
+
skipped_tests << :windows if ENV['TRAVIS'] && ENV['SKIP_WINDOW']
|
35
35
|
|
36
36
|
Capybara::SpecHelper.run_specs TestSessions::SeleniumMarionette, "selenium", capybara_skip: skipped_tests
|
37
37
|
|
38
38
|
RSpec.describe "Capybara::Session with firefox" do
|
39
|
+
include Capybara::SpecHelper
|
39
40
|
include_examples "Capybara::Session", TestSessions::SeleniumMarionette, :selenium_marionette
|
40
41
|
include_examples Capybara::RSpecMatchers, TestSessions::SeleniumMarionette, :selenium_marionette
|
41
42
|
end
|
@@ -34,6 +34,8 @@ RSpec.shared_examples "Capybara::Session" do |session, mode|
|
|
34
34
|
before do
|
35
35
|
@current_dir = Dir.getwd
|
36
36
|
Dir.chdir(File.join(File.dirname(__FILE__), '..'))
|
37
|
+
@env = { 'SELENIUM_BROWSER' => @session.driver.options[:browser].to_s }
|
38
|
+
@env['LEGACY_FIREFOX'] = 'TRUE' if mode == :selenium_firefox
|
37
39
|
end
|
38
40
|
|
39
41
|
after do
|
@@ -41,22 +43,19 @@ RSpec.shared_examples "Capybara::Session" do |session, mode|
|
|
41
43
|
end
|
42
44
|
|
43
45
|
it "should have return code 1 when running selenium_driver_rspec_failure.rb" do
|
44
|
-
env
|
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
|
+
system(@env, 'rspec spec/fixtures/selenium_driver_rspec_failure.rb', out: File::NULL, err: File::NULL)
|
47
47
|
expect($?.exitstatus).to eq(1)
|
48
48
|
end
|
49
49
|
|
50
50
|
it "should have return code 0 when running selenium_driver_rspec_success.rb" do
|
51
|
-
env
|
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)
|
51
|
+
system(@env, 'rspec spec/fixtures/selenium_driver_rspec_success.rb', out: File::NULL, err: File::NULL)
|
54
52
|
expect($?.exitstatus).to eq(0)
|
55
53
|
end
|
56
54
|
end
|
57
55
|
|
58
56
|
describe "#accept_alert" do
|
59
57
|
it "supports a blockless mode" do
|
58
|
+
skip "Headless Chrome doesn't support blockless modal methods" if @session.driver.send(:headless_chrome?)
|
60
59
|
@session.visit('/with_js')
|
61
60
|
@session.click_link('Open alert')
|
62
61
|
@session.accept_alert
|
@@ -102,7 +101,7 @@ RSpec.shared_examples "Capybara::Session" do |session, mode|
|
|
102
101
|
|
103
102
|
context "#fill_in with { clear: Array } fill_options" do
|
104
103
|
it 'should pass the array through to the element' do
|
105
|
-
pending "selenium-webdriver/geckodriver doesn't support complex sets of characters" if @session
|
104
|
+
pending "selenium-webdriver/geckodriver doesn't support complex sets of characters" if marionette?(@session)
|
106
105
|
#this is mainly for use with [[:control, 'a'], :backspace] - however since that is platform dependant I'm testing with something less useful
|
107
106
|
@session.visit('/form')
|
108
107
|
@session.fill_in('form_first_name', with: 'Harry',
|
@@ -120,6 +119,14 @@ RSpec.shared_examples "Capybara::Session" do |session, mode|
|
|
120
119
|
end
|
121
120
|
end
|
122
121
|
|
122
|
+
describe "all with disappearing elements" do
|
123
|
+
it "ignores stale elements in results" do
|
124
|
+
@session.visit('/path')
|
125
|
+
elements = @session.all(:link) { |node| raise Selenium::WebDriver::Error::StaleElementReferenceError }
|
126
|
+
expect(elements.size).to eq 0
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
123
130
|
describe "#evaluate_script" do
|
124
131
|
it "can return an element" do
|
125
132
|
@session.visit('/form')
|
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.14.
|
4
|
+
version: 2.14.1
|
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: 2017-
|
13
|
+
date: 2017-06-07 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: nokogiri
|
@@ -228,6 +228,20 @@ dependencies:
|
|
228
228
|
- - ">="
|
229
229
|
- !ruby/object:Gem::Version
|
230
230
|
version: '0'
|
231
|
+
- !ruby/object:Gem::Dependency
|
232
|
+
name: puma
|
233
|
+
requirement: !ruby/object:Gem::Requirement
|
234
|
+
requirements:
|
235
|
+
- - ">="
|
236
|
+
- !ruby/object:Gem::Version
|
237
|
+
version: '0'
|
238
|
+
type: :development
|
239
|
+
prerelease: false
|
240
|
+
version_requirements: !ruby/object:Gem::Requirement
|
241
|
+
requirements:
|
242
|
+
- - ">="
|
243
|
+
- !ruby/object:Gem::Version
|
244
|
+
version: '0'
|
231
245
|
- !ruby/object:Gem::Dependency
|
232
246
|
name: pry
|
233
247
|
requirement: !ruby/object:Gem::Requirement
|
@@ -309,6 +323,7 @@ files:
|
|
309
323
|
- lib/capybara/rspec/matchers.rb
|
310
324
|
- lib/capybara/selector.rb
|
311
325
|
- lib/capybara/selector/css.rb
|
326
|
+
- lib/capybara/selector/expression_filter.rb
|
312
327
|
- lib/capybara/selector/filter.rb
|
313
328
|
- lib/capybara/selector/filter_set.rb
|
314
329
|
- lib/capybara/selector/selector.rb
|
@@ -433,6 +448,7 @@ files:
|
|
433
448
|
- spec/basic_node_spec.rb
|
434
449
|
- spec/capybara_spec.rb
|
435
450
|
- spec/dsl_spec.rb
|
451
|
+
- spec/filter_set_spec.rb
|
436
452
|
- spec/fixtures/capybara.csv
|
437
453
|
- spec/fixtures/selenium_driver_rspec_failure.rb
|
438
454
|
- spec/fixtures/selenium_driver_rspec_success.rb
|