capybara 2.11.0 → 2.12.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.
- checksums.yaml +4 -4
- data/History.md +30 -4
- data/README.md +4 -0
- data/lib/capybara.rb +4 -2
- data/lib/capybara/driver/base.rb +2 -2
- data/lib/capybara/helpers.rb +8 -2
- data/lib/capybara/node/actions.rb +52 -1
- data/lib/capybara/node/document_matchers.rb +1 -0
- data/lib/capybara/node/finders.rb +2 -1
- data/lib/capybara/node/matchers.rb +54 -0
- data/lib/capybara/node/simple.rb +1 -1
- data/lib/capybara/queries/current_path_query.rb +4 -2
- data/lib/capybara/queries/selector_query.rb +23 -3
- data/lib/capybara/queries/text_query.rb +15 -7
- data/lib/capybara/queries/title_query.rb +2 -2
- data/lib/capybara/rack_test/form.rb +1 -1
- data/lib/capybara/rack_test/node.rb +4 -4
- data/lib/capybara/result.rb +2 -2
- data/lib/capybara/selector.rb +16 -4
- data/lib/capybara/selenium/driver.rb +27 -22
- data/lib/capybara/selenium/node.rb +10 -1
- data/lib/capybara/session.rb +91 -30
- data/lib/capybara/spec/session/accept_prompt_spec.rb +3 -0
- data/lib/capybara/spec/session/assert_all_of_selectors_spec.rb +94 -0
- data/lib/capybara/spec/session/assert_current_path.rb +12 -0
- data/lib/capybara/spec/session/attach_file_spec.rb +30 -0
- data/lib/capybara/spec/session/click_link_spec.rb +12 -1
- data/lib/capybara/spec/session/current_url_spec.rb +8 -0
- data/lib/capybara/spec/session/evaluate_script_spec.rb +14 -0
- data/lib/capybara/spec/session/execute_script_spec.rb +13 -0
- data/lib/capybara/spec/session/fill_in_spec.rb +6 -0
- data/lib/capybara/spec/session/find_field_spec.rb +2 -0
- data/lib/capybara/spec/session/find_spec.rb +3 -3
- data/lib/capybara/spec/session/frame/switch_to_frame_spec.rb +103 -0
- data/lib/capybara/spec/session/{within_frame_spec.rb → frame/within_frame_spec.rb} +12 -0
- data/lib/capybara/spec/session/has_current_path_spec.rb +28 -0
- data/lib/capybara/spec/session/has_selector_spec.rb +21 -0
- data/lib/capybara/spec/session/has_text_spec.rb +13 -1
- data/lib/capybara/spec/session/has_title_spec.rb +15 -0
- data/lib/capybara/spec/session/node_spec.rb +34 -1
- data/lib/capybara/spec/session/within_spec.rb +7 -0
- data/lib/capybara/spec/spec_helper.rb +4 -0
- data/lib/capybara/spec/views/form.erb +48 -0
- data/lib/capybara/spec/views/with_js.erb +5 -0
- data/lib/capybara/spec/views/within_frames.erb +1 -1
- data/lib/capybara/version.rb +1 -1
- data/lib/capybara/window.rb +1 -1
- data/spec/capybara_spec.rb +2 -2
- data/spec/rack_test_spec.rb +10 -0
- data/spec/result_spec.rb +3 -3
- data/spec/rspec/shared_spec_matchers.rb +1 -1
- data/spec/session_spec.rb +10 -0
- data/spec/shared_selenium_session.rb +2 -1
- data/spec/spec_helper.rb +2 -0
- metadata +7 -4
@@ -119,6 +119,13 @@ Capybara::SpecHelper.spec '#within' do
|
|
119
119
|
end
|
120
120
|
expect(extract_results(@session)['first_name']).to eq('Dagobert')
|
121
121
|
end
|
122
|
+
|
123
|
+
it "should have #within_element as an alias" do
|
124
|
+
expect(Capybara::Session.instance_method(:within)).to eq Capybara::Session.instance_method(:within_element)
|
125
|
+
@session.within_element(:css, "#for_foo") do
|
126
|
+
expect(@session).not_to have_content('First Name')
|
127
|
+
end
|
128
|
+
end
|
122
129
|
end
|
123
130
|
|
124
131
|
Capybara::SpecHelper.spec '#within_fieldset' do
|
@@ -97,6 +97,10 @@ module Capybara
|
|
97
97
|
expect(session).to have_xpath("//pre[@id='results']")
|
98
98
|
YAML.load Nokogiri::HTML(session.body).xpath("//pre[@id='results']").first.inner_html.lstrip
|
99
99
|
end
|
100
|
+
|
101
|
+
def marionette?(session)
|
102
|
+
session.driver.respond_to?(:marionette?) && session.driver.marionette?
|
103
|
+
end
|
100
104
|
end
|
101
105
|
end
|
102
106
|
|
@@ -322,6 +322,9 @@ New line after and before textarea tag
|
|
322
322
|
Disabled Select
|
323
323
|
<select name="form[disabled_select]" id="form_disabled_select" disabled="disabled">
|
324
324
|
<option value="Should not see me" selected="selected">Should not see me</option>
|
325
|
+
<optgroup>
|
326
|
+
<option value="Disabled too">Disabled too</option>
|
327
|
+
</optgroup>
|
325
328
|
</select>
|
326
329
|
</label>
|
327
330
|
</p>
|
@@ -343,6 +346,51 @@ New line after and before textarea tag
|
|
343
346
|
</label>
|
344
347
|
</p>
|
345
348
|
|
349
|
+
<p>
|
350
|
+
<fieldset>
|
351
|
+
<input name="form[enabled_fieldset_child]" id="form_enabled_fieldset_child"/>
|
352
|
+
</fieldset>
|
353
|
+
</p>
|
354
|
+
|
355
|
+
|
356
|
+
<p>
|
357
|
+
<fieldset disabled="disabled">
|
358
|
+
<legend>Disabled Child</legend>
|
359
|
+
<input name="form[disabled_fieldset_child]" id="form_disabled_fieldset_child"/>
|
360
|
+
<select>
|
361
|
+
<option>Disabled Child Option</option>
|
362
|
+
</select>
|
363
|
+
</fieldset>
|
364
|
+
|
365
|
+
<fieldset disabled="disabled">
|
366
|
+
<legend>
|
367
|
+
Nested Disabled
|
368
|
+
<input type="checkbox" name="form[disabled_fieldeset_legend_child]" id="form_disabled_fieldset_legend_child"/>
|
369
|
+
</legend>
|
370
|
+
<legend>
|
371
|
+
Another Legend
|
372
|
+
<input type="checkbox" name="form[disabled_fieldeset_second_legend_child]" id="form_disabled_fieldset_second_legend_child"/>
|
373
|
+
</legend>
|
374
|
+
<p>
|
375
|
+
<fieldset>
|
376
|
+
<input name="form[disabled_fieldset_descendant]" id="form_disabled_fieldset_descendant"/>
|
377
|
+
</fieldset>
|
378
|
+
</p>
|
379
|
+
</fieldset>
|
380
|
+
</p>
|
381
|
+
|
382
|
+
<p>
|
383
|
+
<select>
|
384
|
+
<optgroup label="Level One">
|
385
|
+
<option> A.1 </option>
|
386
|
+
</optgroup>
|
387
|
+
<optgroup label="Level Two" disabled="disabled">
|
388
|
+
<option> A.B.1 </option>
|
389
|
+
</optgroup>
|
390
|
+
<option> A.2 </option>
|
391
|
+
</select>
|
392
|
+
</p>
|
393
|
+
|
346
394
|
<p>
|
347
395
|
<input type="button" name="form[fresh]" id="fresh_btn" value="i am fresh"/>
|
348
396
|
<input type="submit" name="form[awesome]" id="awe123" title="What an Awesome Button" value="awesome"/>
|
@@ -110,6 +110,11 @@
|
|
110
110
|
<input type="test" name="with-key-events" id="with-key-events">
|
111
111
|
<p id="key-events-output"></p>
|
112
112
|
</p>
|
113
|
+
|
114
|
+
<p>
|
115
|
+
<input type="file" id="hidden_file" style="opacity:0; display: none;">
|
116
|
+
</p>
|
117
|
+
|
113
118
|
<script type="text/javascript">
|
114
119
|
// a javascript comment
|
115
120
|
var aVar = 123;
|
@@ -5,7 +5,7 @@
|
|
5
5
|
</head>
|
6
6
|
<body>
|
7
7
|
<div id="divInMainWindow">This is the text for divInMainWindow</div>
|
8
|
-
<iframe src="/frame_one" id="frameOne"></iframe>
|
8
|
+
<iframe src="/frame_one" id="frameOne" name="my frame one"></iframe>
|
9
9
|
<iframe src="/frame_two" id="frameTwo"></iframe>
|
10
10
|
<iframe src="/frame_parent" id="parentFrame"></iframe>
|
11
11
|
</body>
|
data/lib/capybara/version.rb
CHANGED
data/lib/capybara/window.rb
CHANGED
data/spec/capybara_spec.rb
CHANGED
@@ -14,8 +14,8 @@ RSpec.describe Capybara do
|
|
14
14
|
end
|
15
15
|
|
16
16
|
it "should be accesible as the deprecated default_wait_time" do
|
17
|
-
|
18
|
-
|
17
|
+
expect(Capybara).to receive(:warn).ordered.with('DEPRECATED: #default_wait_time= is deprecated, please use #default_max_wait_time= instead')
|
18
|
+
expect(Capybara).to receive(:warn).ordered.with('DEPRECATED: #default_wait_time is deprecated, please use #default_max_wait_time instead')
|
19
19
|
@previous_default_time = Capybara.default_max_wait_time
|
20
20
|
Capybara.default_wait_time = 5
|
21
21
|
expect(Capybara.default_wait_time).to eq(5)
|
data/spec/rack_test_spec.rb
CHANGED
@@ -112,6 +112,16 @@ RSpec.describe Capybara::Session do
|
|
112
112
|
end
|
113
113
|
end
|
114
114
|
end
|
115
|
+
|
116
|
+
describe '#text' do
|
117
|
+
it "should return original text content for textareas" do
|
118
|
+
@session.visit('/with_html')
|
119
|
+
@session.find_field('normal', type: 'textarea', with: 'banana').set('hello')
|
120
|
+
normal = @session.find(:css, '#normal')
|
121
|
+
expect(normal.value).to eq 'hello'
|
122
|
+
expect(normal.text).to eq 'banana'
|
123
|
+
end
|
124
|
+
end
|
115
125
|
end
|
116
126
|
end
|
117
127
|
|
data/spec/result_spec.rb
CHANGED
@@ -73,7 +73,7 @@ RSpec.describe Capybara::Result do
|
|
73
73
|
|
74
74
|
#Not a great test but it indirectly tests what is needed
|
75
75
|
it "should evaluate filters lazily" do
|
76
|
-
skip 'JRuby has an issue with lazy enumerator next evaluation' if RUBY_PLATFORM == 'java'
|
76
|
+
skip 'JRuby has an issue with lazy enumerator next evaluation' if RUBY_PLATFORM == 'java' && (Gem::Version.new(JRUBY_VERSION) < Gem::Version.new('9.1.6.0'))
|
77
77
|
#Not processed until accessed
|
78
78
|
expect(result.instance_variable_get('@result_cache').size).to be 0
|
79
79
|
|
@@ -95,7 +95,7 @@ RSpec.describe Capybara::Result do
|
|
95
95
|
|
96
96
|
context '#each' do
|
97
97
|
it 'lazily evaluates' do
|
98
|
-
skip 'JRuby has an issue with lazy enumerator next evaluation' if RUBY_PLATFORM == 'java'
|
98
|
+
skip 'JRuby has an issue with lazy enumerator next evaluation' if RUBY_PLATFORM == 'java' && (Gem::Version.new(JRUBY_VERSION) < Gem::Version.new('9.1.6.0'))
|
99
99
|
results=[]
|
100
100
|
result.each do |el|
|
101
101
|
results << el
|
@@ -111,7 +111,7 @@ RSpec.describe Capybara::Result do
|
|
111
111
|
end
|
112
112
|
|
113
113
|
it 'lazily evaluates' do
|
114
|
-
skip 'JRuby has an issue with lazy enumerator next evaluation' if RUBY_PLATFORM == 'java'
|
114
|
+
skip 'JRuby has an issue with lazy enumerator next evaluation' if RUBY_PLATFORM == 'java' && (Gem::Version.new(JRUBY_VERSION) < Gem::Version.new('9.1.6.0'))
|
115
115
|
result.each.with_index do |el, idx|
|
116
116
|
expect(result.instance_variable_get('@result_cache').size).to eq(idx+1) # 0 indexing
|
117
117
|
end
|
@@ -372,7 +372,7 @@ RSpec.shared_examples Capybara::RSpecMatchers do |session, mode|
|
|
372
372
|
end.to raise_error('expected to find text matching /No such Text/ in "Text"')
|
373
373
|
end
|
374
374
|
|
375
|
-
it "casts
|
375
|
+
it "casts Integer to string" do
|
376
376
|
expect do
|
377
377
|
expect("<h1>Text</h1>").to have_text(3)
|
378
378
|
end.to raise_error(/expected to find text "3" in "Text"/)
|
@@ -0,0 +1,10 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
RSpec.describe Capybara::Session do
|
5
|
+
it "verifies a passed app is a rack app" do
|
6
|
+
expect do
|
7
|
+
Capybara::Session.new(:unknown, { random: "hash"})
|
8
|
+
end.to raise_error TypeError, "The second parameter to Session::new should be a rack app if passed."
|
9
|
+
end
|
10
|
+
end
|
@@ -102,7 +102,8 @@ RSpec.shared_examples "Capybara::Session" do |session, mode|
|
|
102
102
|
|
103
103
|
context "#fill_in with { clear: Array } fill_options" do
|
104
104
|
it 'should pass the array through to the element' do
|
105
|
-
|
105
|
+
pending "selenium-webdriver/geckodriver doesn't support complex sets of characters" if @session.driver.marionette?
|
106
|
+
#this is mainly for use with [[:control, 'a'], :backspace] - however since that is platform dependant I'm testing with something less useful
|
106
107
|
@session.visit('/form')
|
107
108
|
@session.fill_in('form_first_name', with: 'Harry',
|
108
109
|
fill_options: { clear: [[:shift, 'abc'], :backspace] } )
|
data/spec/spec_helper.rb
CHANGED
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.12.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:
|
13
|
+
date: 2017-01-22 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: nokogiri
|
@@ -309,6 +309,7 @@ files:
|
|
309
309
|
- lib/capybara/spec/session/accept_confirm_spec.rb
|
310
310
|
- lib/capybara/spec/session/accept_prompt_spec.rb
|
311
311
|
- lib/capybara/spec/session/all_spec.rb
|
312
|
+
- lib/capybara/spec/session/assert_all_of_selectors_spec.rb
|
312
313
|
- lib/capybara/spec/session/assert_current_path.rb
|
313
314
|
- lib/capybara/spec/session/assert_selector.rb
|
314
315
|
- lib/capybara/spec/session/assert_text.rb
|
@@ -337,6 +338,8 @@ files:
|
|
337
338
|
- lib/capybara/spec/session/find_link_spec.rb
|
338
339
|
- lib/capybara/spec/session/find_spec.rb
|
339
340
|
- lib/capybara/spec/session/first_spec.rb
|
341
|
+
- lib/capybara/spec/session/frame/switch_to_frame_spec.rb
|
342
|
+
- lib/capybara/spec/session/frame/within_frame_spec.rb
|
340
343
|
- lib/capybara/spec/session/go_back_spec.rb
|
341
344
|
- lib/capybara/spec/session/go_forward_spec.rb
|
342
345
|
- lib/capybara/spec/session/has_button_spec.rb
|
@@ -376,7 +379,6 @@ files:
|
|
376
379
|
- lib/capybara/spec/session/window/window_spec.rb
|
377
380
|
- lib/capybara/spec/session/window/windows_spec.rb
|
378
381
|
- lib/capybara/spec/session/window/within_window_spec.rb
|
379
|
-
- lib/capybara/spec/session/within_frame_spec.rb
|
380
382
|
- lib/capybara/spec/session/within_spec.rb
|
381
383
|
- lib/capybara/spec/spec_helper.rb
|
382
384
|
- lib/capybara/spec/test_app.rb
|
@@ -427,6 +429,7 @@ files:
|
|
427
429
|
- spec/selenium_spec_firefox.rb
|
428
430
|
- spec/selenium_spec_marionette.rb
|
429
431
|
- spec/server_spec.rb
|
432
|
+
- spec/session_spec.rb
|
430
433
|
- spec/shared_selenium_session.rb
|
431
434
|
- spec/spec_helper.rb
|
432
435
|
homepage: https://github.com/teamcapybara/capybara
|
@@ -449,7 +452,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
449
452
|
version: '0'
|
450
453
|
requirements: []
|
451
454
|
rubyforge_project:
|
452
|
-
rubygems_version: 2.
|
455
|
+
rubygems_version: 2.6.8
|
453
456
|
signing_key:
|
454
457
|
specification_version: 4
|
455
458
|
summary: Capybara aims to simplify the process of integration testing Rack applications,
|