capybara 3.1.1 → 3.2.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 +19 -0
- data/README.md +1 -1
- data/lib/capybara.rb +2 -0
- data/lib/capybara/config.rb +2 -1
- data/lib/capybara/driver/base.rb +1 -1
- data/lib/capybara/driver/node.rb +3 -3
- data/lib/capybara/node/actions.rb +90 -92
- data/lib/capybara/node/base.rb +2 -2
- data/lib/capybara/node/document_matchers.rb +5 -5
- data/lib/capybara/node/element.rb +47 -16
- data/lib/capybara/node/finders.rb +13 -13
- data/lib/capybara/node/matchers.rb +18 -17
- data/lib/capybara/node/simple.rb +6 -2
- data/lib/capybara/queries/ancestor_query.rb +1 -1
- data/lib/capybara/queries/base_query.rb +3 -3
- data/lib/capybara/queries/current_path_query.rb +1 -1
- data/lib/capybara/queries/match_query.rb +8 -0
- data/lib/capybara/queries/selector_query.rb +97 -42
- data/lib/capybara/queries/sibling_query.rb +1 -1
- data/lib/capybara/queries/text_query.rb +12 -7
- data/lib/capybara/rack_test/browser.rb +9 -7
- data/lib/capybara/rack_test/form.rb +15 -17
- data/lib/capybara/rack_test/node.rb +12 -12
- data/lib/capybara/result.rb +26 -15
- data/lib/capybara/rspec.rb +1 -2
- data/lib/capybara/rspec/compound.rb +4 -4
- data/lib/capybara/rspec/matchers.rb +2 -2
- data/lib/capybara/selector.rb +75 -225
- data/lib/capybara/selector/css.rb +2 -2
- data/lib/capybara/selector/filter_set.rb +17 -21
- data/lib/capybara/selector/filters/base.rb +24 -1
- data/lib/capybara/selector/filters/expression_filter.rb +3 -5
- data/lib/capybara/selector/filters/node_filter.rb +4 -4
- data/lib/capybara/selector/selector.rb +221 -69
- data/lib/capybara/selenium/driver.rb +15 -88
- data/lib/capybara/selenium/node.rb +25 -28
- data/lib/capybara/server.rb +10 -54
- data/lib/capybara/server/animation_disabler.rb +43 -0
- data/lib/capybara/server/middleware.rb +55 -0
- data/lib/capybara/session.rb +29 -30
- data/lib/capybara/session/config.rb +11 -1
- data/lib/capybara/session/matchers.rb +5 -5
- data/lib/capybara/spec/session/assert_text_spec.rb +1 -1
- data/lib/capybara/spec/session/body_spec.rb +10 -12
- data/lib/capybara/spec/session/click_link_spec.rb +3 -3
- data/lib/capybara/spec/session/element/assert_match_selector_spec.rb +1 -1
- data/lib/capybara/spec/session/fill_in_spec.rb +9 -0
- data/lib/capybara/spec/session/find_field_spec.rb +1 -1
- data/lib/capybara/spec/session/find_spec.rb +8 -3
- data/lib/capybara/spec/session/has_link_spec.rb +2 -2
- data/lib/capybara/spec/session/node_spec.rb +50 -0
- data/lib/capybara/spec/session/node_wrapper_spec.rb +5 -5
- data/lib/capybara/spec/session/save_and_open_screenshot_spec.rb +1 -1
- data/lib/capybara/spec/session/window/windows_spec.rb +3 -5
- data/lib/capybara/spec/spec_helper.rb +4 -2
- data/lib/capybara/spec/views/with_animation.erb +46 -0
- data/lib/capybara/version.rb +1 -1
- data/lib/capybara/window.rb +3 -2
- data/spec/filter_set_spec.rb +19 -2
- data/spec/result_spec.rb +33 -1
- data/spec/rspec/features_spec.rb +6 -10
- data/spec/rspec/shared_spec_matchers.rb +4 -4
- data/spec/selector_spec.rb +74 -4
- data/spec/selenium_spec_marionette.rb +2 -0
- data/spec/server_spec.rb +1 -1
- data/spec/session_spec.rb +12 -0
- data/spec/shared_selenium_session.rb +30 -0
- metadata +8 -9
- data/.yard/templates_custom/default/class/html/selectors.erb +0 -38
- data/.yard/templates_custom/default/class/html/setup.rb +0 -17
- data/.yard/yard_extensions.rb +0 -78
- data/.yardopts +0 -1
data/spec/server_spec.rb
CHANGED
@@ -35,7 +35,7 @@ RSpec.describe Capybara::Server do
|
|
35
35
|
ensure
|
36
36
|
Capybara.server_host = nil
|
37
37
|
end
|
38
|
-
end unless ENV['TRAVIS'] && (RUBY_ENGINE == 'jruby')
|
38
|
+
end unless (ENV['TRAVIS'] && (RUBY_ENGINE == 'jruby')) || Gem.win_platform?
|
39
39
|
|
40
40
|
it "should use specified port" do
|
41
41
|
Capybara.server_port = 22789
|
data/spec/session_spec.rb
CHANGED
@@ -18,6 +18,12 @@ RSpec.describe Capybara::Session do
|
|
18
18
|
end
|
19
19
|
|
20
20
|
context "current_driver" do
|
21
|
+
around do |example|
|
22
|
+
orig_driver = Capybara.current_driver
|
23
|
+
example.run
|
24
|
+
Capybara.current_driver = orig_driver
|
25
|
+
end
|
26
|
+
|
21
27
|
it "is global when threadsafe false" do
|
22
28
|
Capybara.threadsafe = false
|
23
29
|
Capybara.current_driver = :selenium
|
@@ -40,6 +46,12 @@ RSpec.describe Capybara::Session do
|
|
40
46
|
end
|
41
47
|
|
42
48
|
context "session_name" do
|
49
|
+
around do |example|
|
50
|
+
orig_name = Capybara.session_name
|
51
|
+
example.run
|
52
|
+
Capybara.session_name = orig_name
|
53
|
+
end
|
54
|
+
|
43
55
|
it "is global when threadsafe false" do
|
44
56
|
Capybara.threadsafe = false
|
45
57
|
Capybara.session_name = "sess1"
|
@@ -88,6 +88,13 @@ RSpec.shared_examples "Capybara::Session" do |session, mode|
|
|
88
88
|
expect(session.find(:fillable_field, 'form_first_name').value).to eq('Harry')
|
89
89
|
end
|
90
90
|
|
91
|
+
it 'should fill in if the option is set via global option' do
|
92
|
+
Capybara.default_set_options = { clear: :backspace }
|
93
|
+
session.visit('/form')
|
94
|
+
session.fill_in('form_first_name', with: 'Thomas')
|
95
|
+
expect(session.find(:fillable_field, 'form_first_name').value).to eq('Thomas')
|
96
|
+
end
|
97
|
+
|
91
98
|
it 'should only trigger onchange once' do
|
92
99
|
session.visit('/with_js')
|
93
100
|
session.fill_in('with_change_event',
|
@@ -249,6 +256,29 @@ RSpec.shared_examples "Capybara::Session" do |session, mode|
|
|
249
256
|
end.to raise_error(ArgumentError, 'Not allowed to close the primary window')
|
250
257
|
end
|
251
258
|
end
|
259
|
+
|
260
|
+
context "AnimationDisabler" do
|
261
|
+
before(:context) do # rubocop:disable RSpec/BeforeAfterAll
|
262
|
+
Capybara.disable_animation = true
|
263
|
+
@animation_session = Capybara::Session.new(session.mode, TestApp.new)
|
264
|
+
end
|
265
|
+
|
266
|
+
after(:context) do # rubocop:disable RSpec/BeforeAfterAll
|
267
|
+
Capybara.disable_animation = false
|
268
|
+
end
|
269
|
+
|
270
|
+
it "should disable CSS transitions" do
|
271
|
+
@animation_session.visit('with_animation')
|
272
|
+
@animation_session.click_link('transition me away')
|
273
|
+
expect(@animation_session).to have_no_link('transition me away', wait: 0.5)
|
274
|
+
end
|
275
|
+
|
276
|
+
it "should disable CSS animations", :focus_ do
|
277
|
+
@animation_session.visit('with_animation')
|
278
|
+
@animation_session.click_link('animate me away')
|
279
|
+
expect(@animation_session).to have_no_link('animate me away', wait: 0.5)
|
280
|
+
end
|
281
|
+
end
|
252
282
|
end
|
253
283
|
|
254
284
|
def headless_or_remote?
|
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.
|
4
|
+
version: 3.2.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-
|
13
|
+
date: 2018-06-01 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: addressable
|
@@ -88,14 +88,14 @@ dependencies:
|
|
88
88
|
requirements:
|
89
89
|
- - "~>"
|
90
90
|
- !ruby/object:Gem::Version
|
91
|
-
version: '3.
|
91
|
+
version: '3.1'
|
92
92
|
type: :runtime
|
93
93
|
prerelease: false
|
94
94
|
version_requirements: !ruby/object:Gem::Requirement
|
95
95
|
requirements:
|
96
96
|
- - "~>"
|
97
97
|
- !ruby/object:Gem::Version
|
98
|
-
version: '3.
|
98
|
+
version: '3.1'
|
99
99
|
- !ruby/object:Gem::Dependency
|
100
100
|
name: cucumber
|
101
101
|
requirement: !ruby/object:Gem::Requirement
|
@@ -271,10 +271,6 @@ executables: []
|
|
271
271
|
extensions: []
|
272
272
|
extra_rdoc_files: []
|
273
273
|
files:
|
274
|
-
- ".yard/templates_custom/default/class/html/selectors.erb"
|
275
|
-
- ".yard/templates_custom/default/class/html/setup.rb"
|
276
|
-
- ".yard/yard_extensions.rb"
|
277
|
-
- ".yardopts"
|
278
274
|
- History.md
|
279
275
|
- License.txt
|
280
276
|
- README.md
|
@@ -326,6 +322,8 @@ files:
|
|
326
322
|
- lib/capybara/selenium/driver.rb
|
327
323
|
- lib/capybara/selenium/node.rb
|
328
324
|
- lib/capybara/server.rb
|
325
|
+
- lib/capybara/server/animation_disabler.rb
|
326
|
+
- lib/capybara/server/middleware.rb
|
329
327
|
- lib/capybara/session.rb
|
330
328
|
- lib/capybara/session/config.rb
|
331
329
|
- lib/capybara/session/matchers.rb
|
@@ -437,6 +435,7 @@ files:
|
|
437
435
|
- lib/capybara/spec/views/popup_two.erb
|
438
436
|
- lib/capybara/spec/views/postback.erb
|
439
437
|
- lib/capybara/spec/views/tables.erb
|
438
|
+
- lib/capybara/spec/views/with_animation.erb
|
440
439
|
- lib/capybara/spec/views/with_base_tag.erb
|
441
440
|
- lib/capybara/spec/views/with_count.erb
|
442
441
|
- lib/capybara/spec/views/with_fixed_header_footer.erb
|
@@ -495,7 +494,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
495
494
|
requirements:
|
496
495
|
- - ">="
|
497
496
|
- !ruby/object:Gem::Version
|
498
|
-
version: 2.
|
497
|
+
version: 2.3.0
|
499
498
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
500
499
|
requirements:
|
501
500
|
- - ">="
|
@@ -1,38 +0,0 @@
|
|
1
|
-
<div id="selectors">
|
2
|
-
<h2>Built-in Selectors</h2>
|
3
|
-
<ul>
|
4
|
-
<% @selectors.each do |name, selector| %>
|
5
|
-
<li>
|
6
|
-
<h3>:<%= name %></h3>
|
7
|
-
<div class="docstring">
|
8
|
-
<div class="discussion">
|
9
|
-
<p><%= h(selector.docstring) %></p>
|
10
|
-
</div>
|
11
|
-
</div>
|
12
|
-
<div class="tags">
|
13
|
-
<p class="inline">Locator:</p>
|
14
|
-
<% if locator=selector.tag('locator') %>
|
15
|
-
<p class="inline"><%= h locator.text %></p>
|
16
|
-
<% end %>
|
17
|
-
<% if selector.has_tag?('filter') %>
|
18
|
-
<p>Filters:</p>
|
19
|
-
<ul class="param">
|
20
|
-
<% selector.tags('filter').each do |filter| %>
|
21
|
-
<li>
|
22
|
-
<span class="name"><%= filter.name %></span>
|
23
|
-
<% if filter.types %>
|
24
|
-
<span class="type">(<tt><%= h(filter.types.join(', ')) %></tt>)</span>
|
25
|
-
<% end %>
|
26
|
-
<% if filter.text %>
|
27
|
-
—
|
28
|
-
<div class="inline"><p><%= h filter.text %></p></div>
|
29
|
-
<% end %>
|
30
|
-
</li>
|
31
|
-
<% end %>
|
32
|
-
</ul>
|
33
|
-
<% end %>
|
34
|
-
</div
|
35
|
-
</li>
|
36
|
-
<% end %>
|
37
|
-
</ul>
|
38
|
-
</div>
|
@@ -1,17 +0,0 @@
|
|
1
|
-
def init
|
2
|
-
super
|
3
|
-
sections.place(:builtins).before(:subclasses)
|
4
|
-
end
|
5
|
-
|
6
|
-
def builtins
|
7
|
-
return if object.path != "Capybara::Selector" # only show built-in selectors for Selector class
|
8
|
-
|
9
|
-
@selectors = Registry.all(:selector)
|
10
|
-
return if @selectors.nil? || @selectors.empty?
|
11
|
-
|
12
|
-
@selectors = @selectors.map do |selector|
|
13
|
-
[selector.name, selector]
|
14
|
-
end
|
15
|
-
|
16
|
-
erb(:selectors)
|
17
|
-
end
|
data/.yard/yard_extensions.rb
DELETED
@@ -1,78 +0,0 @@
|
|
1
|
-
YARD::Templates::Engine.register_template_path Pathname.new('./.yard/templates_custom')
|
2
|
-
|
3
|
-
YARD::Tags::Library.define_tag "Locator", :locator
|
4
|
-
YARD::Tags::Library.define_tag "Filter", :filter, :with_types_and_name
|
5
|
-
|
6
|
-
class SelectorObject < YARD::CodeObjects::Base
|
7
|
-
def path
|
8
|
-
"__Capybara" + sep + super
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
class AddSelectorHandler < YARD::Handlers::Ruby::Base
|
13
|
-
handles method_call(:add_selector)
|
14
|
-
namespace_only
|
15
|
-
process do
|
16
|
-
name = statement.parameters.first.jump(:tstring_content, :ident).source
|
17
|
-
# object = YARD::CodeObjects::MethodObject.new(namespace, name.to_sym)
|
18
|
-
# object = SelectorObject.new(YARD::Registry.resolve(P("Capybara"), "#add_selector", false, true), name.to_sym)
|
19
|
-
object = SelectorObject.new(namespace, name)
|
20
|
-
register(object)
|
21
|
-
parse_block(statement.last.last, :owner => object)
|
22
|
-
|
23
|
-
# modify the object
|
24
|
-
object.dynamic = true
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
class AddExpressionFilterHandler < YARD::Handlers::Ruby::Base
|
29
|
-
handles method_call(:xpath)
|
30
|
-
handles method_call(:css)
|
31
|
-
|
32
|
-
process do
|
33
|
-
return unless owner.is_a?(SelectorObject)
|
34
|
-
return if statement.parameters.empty?
|
35
|
-
# names = statement.parameters.children.map { |p| p.jump(:tstring_content, :ident).source.sub(/^:/, '') }
|
36
|
-
names = statement.parameters.children.map &:source
|
37
|
-
current_names = owner.tags(:filter).map(&:name)
|
38
|
-
(names-current_names).each do |name|
|
39
|
-
owner.add_tag(YARD::Tags::Tag.new(:filter, nil, nil, name))
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
class AddFilterHandler < YARD::Handlers::Ruby::Base
|
45
|
-
handles method_call(:filter)
|
46
|
-
|
47
|
-
process do
|
48
|
-
return unless owner.is_a?(SelectorObject)
|
49
|
-
return if statement.parameters.empty?
|
50
|
-
name = statement.parameters.first.source
|
51
|
-
type = if statement.parameters[1] && statement.parameters[1].source == ':boolean'
|
52
|
-
'Boolean'
|
53
|
-
else
|
54
|
-
nil
|
55
|
-
end
|
56
|
-
if owner.tags(:filter).none? {|tag| tag.name == name }
|
57
|
-
filter_tag = YARD::Tags::Tag.new(:filter, nil, type, name)
|
58
|
-
owner.add_tag(filter_tag)
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
class FilterSetHandler < YARD::Handlers::Ruby::Base
|
64
|
-
handles method_call(:filter_set)
|
65
|
-
|
66
|
-
process do
|
67
|
-
return unless owner.is_a?(SelectorObject)
|
68
|
-
return if statement.parameters.empty? || !statement.parameters[1]
|
69
|
-
|
70
|
-
names = statement.parameters[1].flatten.map { |name| ":#{name}" }
|
71
|
-
names.each do |name|
|
72
|
-
if owner.tags(:filter).none? {|tag| tag.name == name }
|
73
|
-
filter_tag = YARD::Tags::Tag.new(:filter, nil, nil, name)
|
74
|
-
owner.add_tag(filter_tag)
|
75
|
-
end
|
76
|
-
end
|
77
|
-
end
|
78
|
-
end
|
data/.yardopts
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
--load ./.yard/yard_extensions.rb
|