capybara 2.4.4 → 2.5.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 +32 -5
- data/README.md +69 -8
- data/lib/capybara.rb +50 -29
- data/lib/capybara/driver/base.rb +4 -0
- data/lib/capybara/driver/node.rb +4 -0
- data/lib/capybara/helpers.rb +17 -5
- data/lib/capybara/node/actions.rb +16 -11
- data/lib/capybara/node/base.rb +7 -7
- data/lib/capybara/node/document_matchers.rb +1 -1
- data/lib/capybara/node/element.rb +82 -7
- data/lib/capybara/node/finders.rb +62 -22
- data/lib/capybara/node/matchers.rb +3 -3
- data/lib/capybara/node/simple.rb +6 -1
- data/lib/capybara/queries/base_query.rb +1 -1
- data/lib/capybara/queries/current_path_query.rb +58 -0
- data/lib/capybara/queries/text_query.rb +2 -11
- data/lib/capybara/rack_test/browser.rb +7 -2
- data/lib/capybara/rack_test/driver.rb +4 -0
- data/lib/capybara/rack_test/form.rb +2 -1
- data/lib/capybara/rack_test/node.rb +1 -0
- data/lib/capybara/result.rb +2 -2
- data/lib/capybara/rspec.rb +1 -0
- data/lib/capybara/rspec/features.rb +1 -1
- data/lib/capybara/rspec/matchers.rb +42 -3
- data/lib/capybara/selector.rb +7 -2
- data/lib/capybara/selenium/driver.rb +26 -12
- data/lib/capybara/selenium/node.rb +42 -6
- data/lib/capybara/server.rb +1 -1
- data/lib/capybara/session.rb +78 -50
- data/lib/capybara/session/matchers.rb +69 -0
- data/lib/capybara/spec/public/test.js +8 -0
- data/lib/capybara/spec/session/all_spec.rb +5 -0
- data/lib/capybara/spec/session/assert_current_path.rb +59 -0
- data/lib/capybara/spec/session/assert_text.rb +1 -1
- data/lib/capybara/spec/session/attach_file_spec.rb +2 -2
- data/lib/capybara/spec/session/body_spec.rb +2 -0
- data/lib/capybara/spec/session/click_button_spec.rb +17 -8
- data/lib/capybara/spec/session/click_link_spec.rb +32 -1
- data/lib/capybara/spec/session/current_url_spec.rb +5 -0
- data/lib/capybara/spec/session/fill_in_spec.rb +1 -1
- data/lib/capybara/spec/session/find_field_spec.rb +17 -0
- data/lib/capybara/spec/session/find_spec.rb +14 -5
- data/lib/capybara/spec/session/first_spec.rb +24 -0
- data/lib/capybara/spec/session/has_current_path_spec.rb +68 -0
- data/lib/capybara/spec/session/has_link_spec.rb +3 -0
- data/lib/capybara/spec/session/has_text_spec.rb +7 -0
- data/lib/capybara/spec/session/node_spec.rb +45 -6
- data/lib/capybara/spec/session/reset_session_spec.rb +18 -1
- data/lib/capybara/spec/session/save_and_open_page_spec.rb +19 -0
- data/lib/capybara/spec/session/save_page_spec.rb +12 -3
- data/lib/capybara/spec/session/save_screenshot_spec.rb +23 -0
- data/lib/capybara/spec/session/select_spec.rb +12 -0
- data/lib/capybara/spec/session/title_spec.rb +2 -2
- data/lib/capybara/spec/session/window/become_closed_spec.rb +4 -4
- data/lib/capybara/spec/session/window/switch_to_window_spec.rb +8 -0
- data/lib/capybara/spec/session/window/window_opened_by_spec.rb +14 -8
- data/lib/capybara/spec/session/window/window_spec.rb +24 -4
- data/lib/capybara/spec/spec_helper.rb +3 -1
- data/lib/capybara/spec/test_app.rb +10 -1
- data/lib/capybara/spec/views/form.erb +7 -1
- data/lib/capybara/spec/views/path.erb +12 -0
- data/lib/capybara/spec/views/with_html.erb +2 -0
- data/lib/capybara/spec/views/with_js.erb +9 -1
- data/lib/capybara/spec/views/with_title.erb +4 -1
- data/lib/capybara/spec/views/with_windows.erb +2 -2
- data/lib/capybara/version.rb +1 -1
- data/spec/basic_node_spec.rb +1 -0
- data/spec/capybara_spec.rb +12 -3
- data/spec/dsl_spec.rb +18 -6
- data/spec/rack_test_spec.rb +6 -5
- data/spec/rspec/matchers_spec.rb +62 -16
- data/spec/rspec/views_spec.rb +7 -0
- data/spec/selenium_spec.rb +38 -3
- data/spec/selenium_spec_chrome.rb +3 -7
- metadata +13 -4
@@ -16,12 +16,11 @@ module Capybara
|
|
16
16
|
|
17
17
|
##
|
18
18
|
#
|
19
|
-
# Finds a link by id or
|
19
|
+
# Finds a link by id, text or title and clicks it. Also looks at image
|
20
20
|
# alt text inside the link.
|
21
21
|
#
|
22
|
-
# @param [String] locator
|
23
|
-
# @param options
|
24
|
-
# @option options [String] :href The value the href attribute must be
|
22
|
+
# @param [String] locator text, id, title or nested image's alt attribute
|
23
|
+
# @param options See {Capybara::Node::Finders#find_link}
|
25
24
|
#
|
26
25
|
def click_link(locator, options={})
|
27
26
|
find(:link, locator, options).click
|
@@ -29,10 +28,13 @@ module Capybara
|
|
29
28
|
|
30
29
|
##
|
31
30
|
#
|
32
|
-
# Finds a button
|
33
|
-
#
|
34
|
-
#
|
31
|
+
# Finds a button on the page and clicks it.
|
32
|
+
# This can be any \<input> element of type submit, reset, image, button or it can be a
|
33
|
+
# \<button> element. All buttons can be found by their id, value, or title. \<button> elements can also be found
|
34
|
+
# by their text content, and image \<input> elements by their alt attribute
|
35
35
|
#
|
36
|
+
# @param [String] locator Which button to find
|
37
|
+
# @param options See {Capybara::Node::Finders#find_button}
|
36
38
|
def click_button(locator, options={})
|
37
39
|
find(:button, locator, options).click
|
38
40
|
end
|
@@ -97,14 +99,17 @@ module Capybara
|
|
97
99
|
|
98
100
|
##
|
99
101
|
#
|
100
|
-
#
|
101
|
-
#
|
102
|
-
#
|
102
|
+
# If `:from` option is present, `select` finds a select box on the page
|
103
|
+
# and selects a particular option from it.
|
104
|
+
# Otherwise it finds an option inside current scope and selects it.
|
105
|
+
# If the select box is a multiple select, +select+ can be called multiple times to select more than
|
106
|
+
# one option.
|
107
|
+
# The select box can be found via its name, id or label text. The option can be found by its text.
|
103
108
|
#
|
104
109
|
# page.select 'March', :from => 'Month'
|
105
110
|
#
|
106
111
|
# @param [String] value Which option to select
|
107
|
-
# @
|
112
|
+
# @option options [String] :from The id, name or label of the select box
|
108
113
|
#
|
109
114
|
def select(value, options={})
|
110
115
|
if options.has_key?(:from)
|
data/lib/capybara/node/base.rb
CHANGED
@@ -61,10 +61,10 @@ module Capybara
|
|
61
61
|
#
|
62
62
|
# As long as any of these exceptions are thrown, the block is re-run,
|
63
63
|
# until a certain amount of time passes. The amount of time defaults to
|
64
|
-
# {Capybara.
|
64
|
+
# {Capybara.default_max_wait_time} and can be overridden through the `seconds`
|
65
65
|
# argument. This time is compared with the system time to see how much
|
66
|
-
# time has passed.
|
67
|
-
# Capybara will raise `Capybara::FrozenInTime`.
|
66
|
+
# time has passed. On rubies/platforms which don't support access to a monotonic process clock
|
67
|
+
# if the return value of `Time.now` is stubbed out, Capybara will raise `Capybara::FrozenInTime`.
|
68
68
|
#
|
69
69
|
# @param [Integer] seconds Number of seconds to retry this block
|
70
70
|
# @param options [Hash]
|
@@ -73,8 +73,8 @@ module Capybara
|
|
73
73
|
# @return [Object] The result of the given block
|
74
74
|
# @raise [Capybara::FrozenInTime] If the return value of `Time.now` appears stuck
|
75
75
|
#
|
76
|
-
def synchronize(seconds=Capybara.
|
77
|
-
start_time =
|
76
|
+
def synchronize(seconds=Capybara.default_max_wait_time, options = {})
|
77
|
+
start_time = Capybara::Helpers.monotonic_time
|
78
78
|
|
79
79
|
if session.synchronized
|
80
80
|
yield
|
@@ -86,9 +86,9 @@ module Capybara
|
|
86
86
|
session.raise_server_error!
|
87
87
|
raise e unless driver.wait?
|
88
88
|
raise e unless catch_error?(e, options[:errors])
|
89
|
-
raise e if (
|
89
|
+
raise e if (Capybara::Helpers.monotonic_time - start_time) >= seconds
|
90
90
|
sleep(0.05)
|
91
|
-
raise Capybara::FrozenInTime, "time appears to be frozen, Capybara does not work with libraries which freeze time, consider using time travelling instead" if
|
91
|
+
raise Capybara::FrozenInTime, "time appears to be frozen, Capybara does not work with libraries which freeze time, consider using time travelling instead" if Capybara::Helpers.monotonic_time == start_time
|
92
92
|
reload if Capybara.automatic_reload
|
93
93
|
retry
|
94
94
|
ensure
|
@@ -9,7 +9,7 @@ module Capybara
|
|
9
9
|
# @param string [String] The string that title should include
|
10
10
|
# @overload $0(regexp, options = {})
|
11
11
|
# @param regexp [Regexp] The regexp that title should match to
|
12
|
-
# @option options [Numeric] :wait (Capybara.
|
12
|
+
# @option options [Numeric] :wait (Capybara.default_max_wait_time) Maximum time that Capybara will wait for title to eq/match given string/regexp argument
|
13
13
|
# @raise [Capybara::ExpectationNotMet] if the assertion hasn't succeeded during wait time
|
14
14
|
# @return [true]
|
15
15
|
#
|
@@ -3,7 +3,7 @@ module Capybara
|
|
3
3
|
|
4
4
|
##
|
5
5
|
#
|
6
|
-
# A {Capybara::Element} represents a single element on the page. It is possible
|
6
|
+
# A {Capybara::Node::Element} represents a single element on the page. It is possible
|
7
7
|
# to interact with the contents of this element the same as with a document:
|
8
8
|
#
|
9
9
|
# session = Capybara::Session.new(:rack_test, my_app)
|
@@ -11,7 +11,7 @@ module Capybara
|
|
11
11
|
# bar = session.find('#bar') # from Capybara::Node::Finders
|
12
12
|
# bar.select('Baz', :from => 'Quox') # from Capybara::Node::Actions
|
13
13
|
#
|
14
|
-
# {Capybara::Element} also has access to HTML attributes and other properties of the
|
14
|
+
# {Capybara::Node::Element} also has access to HTML attributes and other properties of the
|
15
15
|
# element:
|
16
16
|
#
|
17
17
|
# bar.value
|
@@ -93,10 +93,10 @@ module Capybara
|
|
93
93
|
#
|
94
94
|
def set(value, options={})
|
95
95
|
options ||= {}
|
96
|
-
|
96
|
+
|
97
97
|
driver_supports_options = (base.method(:set).arity != 1)
|
98
98
|
|
99
|
-
unless options.empty? || driver_supports_options
|
99
|
+
unless options.empty? || driver_supports_options
|
100
100
|
warn "Options passed to Capybara::Node#set but the driver doesn't support them"
|
101
101
|
end
|
102
102
|
|
@@ -114,6 +114,7 @@ module Capybara
|
|
114
114
|
# Select this node if is an option element inside a select tag
|
115
115
|
#
|
116
116
|
def select_option
|
117
|
+
warn "Attempt to select disabled option: #{value || text}" if disabled?
|
117
118
|
synchronize { base.select_option }
|
118
119
|
end
|
119
120
|
|
@@ -149,6 +150,80 @@ module Capybara
|
|
149
150
|
synchronize { base.double_click }
|
150
151
|
end
|
151
152
|
|
153
|
+
##
|
154
|
+
#
|
155
|
+
# Send Keystrokes to the Element
|
156
|
+
#
|
157
|
+
# @overload send_keys(keys, ...)
|
158
|
+
# @param [String, Symbol, Array<String,Symbol>] keys
|
159
|
+
#
|
160
|
+
# Examples:
|
161
|
+
#
|
162
|
+
# element.send_keys "foo" #=> value: 'foo'
|
163
|
+
# element.send_keys "tet", :left, "s" #=> value: 'test'
|
164
|
+
# element.send_keys [:control, 'a'], :space #=> value: ' ' - assuming ctrl-a selects all contents
|
165
|
+
#
|
166
|
+
# Symbols supported for keys
|
167
|
+
# :cancel
|
168
|
+
# :help
|
169
|
+
# :backspace
|
170
|
+
# :tab
|
171
|
+
# :clear
|
172
|
+
# :return
|
173
|
+
# :enter
|
174
|
+
# :shift
|
175
|
+
# :control
|
176
|
+
# :alt
|
177
|
+
# :pause
|
178
|
+
# :escape
|
179
|
+
# :space
|
180
|
+
# :page_up
|
181
|
+
# :page_down
|
182
|
+
# :end
|
183
|
+
# :home
|
184
|
+
# :left
|
185
|
+
# :up
|
186
|
+
# :right
|
187
|
+
# :down
|
188
|
+
# :insert
|
189
|
+
# :delete
|
190
|
+
# :semicolon
|
191
|
+
# :equals
|
192
|
+
# :numpad0
|
193
|
+
# :numpad1
|
194
|
+
# :numpad2
|
195
|
+
# :numpad3
|
196
|
+
# :numpad4
|
197
|
+
# :numpad5
|
198
|
+
# :numpad6
|
199
|
+
# :numpad7
|
200
|
+
# :numpad8
|
201
|
+
# :numpad9
|
202
|
+
# :multiply - numeric keypad *
|
203
|
+
# :add - numeric keypad +
|
204
|
+
# :separator - numeric keypad 'separator' key ??
|
205
|
+
# :subtract - numeric keypad -
|
206
|
+
# :decimal - numeric keypad .
|
207
|
+
# :divide - numeric keypad /
|
208
|
+
# :f1
|
209
|
+
# :f2
|
210
|
+
# :f3
|
211
|
+
# :f4
|
212
|
+
# :f5
|
213
|
+
# :f6
|
214
|
+
# :f7
|
215
|
+
# :f8
|
216
|
+
# :f9
|
217
|
+
# :f10
|
218
|
+
# :f11
|
219
|
+
# :f12
|
220
|
+
# :meta
|
221
|
+
# :command - alias of :meta
|
222
|
+
#
|
223
|
+
def send_keys(*args)
|
224
|
+
synchronize { base.send_keys(*args) }
|
225
|
+
end
|
226
|
+
|
152
227
|
##
|
153
228
|
#
|
154
229
|
# Hover on the Element
|
@@ -235,7 +310,7 @@ module Capybara
|
|
235
310
|
# target = page.find('#bar')
|
236
311
|
# source.drag_to(target)
|
237
312
|
#
|
238
|
-
# @param [Capybara::Element] node The element to drag to
|
313
|
+
# @param [Capybara::Node::Element] node The element to drag to
|
239
314
|
#
|
240
315
|
def drag_to(node)
|
241
316
|
synchronize { base.drag_to(node.base) }
|
@@ -254,9 +329,9 @@ module Capybara
|
|
254
329
|
end
|
255
330
|
|
256
331
|
def inspect
|
257
|
-
%(#<Capybara::Element tag="#{tag_name}" path="#{path}">)
|
332
|
+
%(#<Capybara::Node::Element tag="#{tag_name}" path="#{path}">)
|
258
333
|
rescue NotSupportedByDriverError
|
259
|
-
%(#<Capybara::Element tag="#{tag_name}">)
|
334
|
+
%(#<Capybara::Node::Element tag="#{tag_name}">)
|
260
335
|
end
|
261
336
|
end
|
262
337
|
end
|
@@ -4,13 +4,15 @@ module Capybara
|
|
4
4
|
|
5
5
|
##
|
6
6
|
#
|
7
|
-
# Find an {Capybara::Element} based on the given arguments. +find+ will raise an error if the element
|
7
|
+
# Find an {Capybara::Node::Element} based on the given arguments. +find+ will raise an error if the element
|
8
8
|
# is not found.
|
9
9
|
#
|
10
|
-
#
|
11
|
-
#
|
12
|
-
#
|
13
|
-
#
|
10
|
+
# @!macro waiting_behavior
|
11
|
+
# If the driver is capable of executing JavaScript, +$0+ will wait for a set amount of time
|
12
|
+
# and continuously retry finding the element until either the element is found or the time
|
13
|
+
# expires. The length of time +find+ will wait is controlled through {Capybara.default_max_wait_time}
|
14
|
+
# and defaults to 2 seconds.
|
15
|
+
# @option options [false, Numeric] wait (Capybara.default_max_wait_time) Maximum time to wait for matching element to appear.
|
14
16
|
#
|
15
17
|
# +find+ takes the same options as +all+.
|
16
18
|
#
|
@@ -19,10 +21,10 @@ module Capybara
|
|
19
21
|
# page.find('li', :text => 'Quox').click_link('Delete')
|
20
22
|
#
|
21
23
|
# @param (see Capybara::Node::Finders#all)
|
24
|
+
#
|
22
25
|
# @option options [Boolean] match The matching strategy to use.
|
23
|
-
# @option options [false, Numeric] wait How long to wait for the element to appear.
|
24
26
|
#
|
25
|
-
# @return [Capybara::Element]
|
27
|
+
# @return [Capybara::Node::Element] The found element
|
26
28
|
# @raise [Capybara::ElementNotFound] If the element can't be found before time expires
|
27
29
|
#
|
28
30
|
def find(*args)
|
@@ -48,8 +50,17 @@ module Capybara
|
|
48
50
|
#
|
49
51
|
# Find a form field on the page. The field can be found by its name, id or label text.
|
50
52
|
#
|
51
|
-
# @
|
52
|
-
#
|
53
|
+
# @macro waiting_behavior
|
54
|
+
#
|
55
|
+
# @param [String] locator Which field to find
|
56
|
+
#
|
57
|
+
# @option options [Boolean] checked Match checked field?
|
58
|
+
# @option options [Boolean] unchecked Match unchecked field?
|
59
|
+
# @option options [Boolean] disabled (false) Match disabled field?
|
60
|
+
# @option options [Boolean] readonly Match readonly field?
|
61
|
+
# @option options [String] with Value of field to match on
|
62
|
+
# @option options [String] type Type of field to match on
|
63
|
+
# @return [Capybara::Node::Element] The found element
|
53
64
|
#
|
54
65
|
def find_field(locator, options={})
|
55
66
|
find(:field, locator, options)
|
@@ -60,8 +71,11 @@ module Capybara
|
|
60
71
|
#
|
61
72
|
# Find a link on the page. The link can be found by its id or text.
|
62
73
|
#
|
63
|
-
# @
|
64
|
-
#
|
74
|
+
# @macro waiting_behavior
|
75
|
+
#
|
76
|
+
# @param [String] locator Which link to find
|
77
|
+
# @option options [String,Regexp] href Value to match against the links href
|
78
|
+
# @return [Capybara::Node::Element] The found element
|
65
79
|
#
|
66
80
|
def find_link(locator, options={})
|
67
81
|
find(:link, locator, options)
|
@@ -69,10 +83,16 @@ module Capybara
|
|
69
83
|
|
70
84
|
##
|
71
85
|
#
|
72
|
-
# Find a button on the page.
|
86
|
+
# Find a button on the page.
|
87
|
+
# This can be any \<input> element of type submit, reset, image, button or it can be a
|
88
|
+
# \<button> element. All buttons can be found by their id, value, or title. \<button> elements can also be found
|
89
|
+
# by their text content, and image \<input> elements by their alt attribute
|
90
|
+
|
91
|
+
# @macro waiting_behavior
|
73
92
|
#
|
74
|
-
# @param [String] locator
|
75
|
-
# @
|
93
|
+
# @param [String] locator Which button to find
|
94
|
+
# @option options [Boolean] disabled (false) Match disabled button?
|
95
|
+
# @return [Capybara::Node::Element] The found element
|
76
96
|
#
|
77
97
|
def find_button(locator, options={})
|
78
98
|
find(:button, locator, options)
|
@@ -82,8 +102,11 @@ module Capybara
|
|
82
102
|
#
|
83
103
|
# Find a element on the page, given its id.
|
84
104
|
#
|
85
|
-
# @
|
86
|
-
#
|
105
|
+
# @macro waiting_behavior
|
106
|
+
#
|
107
|
+
# @param [String] id Which element to find
|
108
|
+
#
|
109
|
+
# @return [Capybara::Node::Element] The found element
|
87
110
|
#
|
88
111
|
def find_by_id(id, options={})
|
89
112
|
find(:id, id, options)
|
@@ -117,8 +140,9 @@ module Capybara
|
|
117
140
|
# page.all('#menu li', :visible => true)
|
118
141
|
#
|
119
142
|
# By default if no elements are found, an empty array is returned;
|
120
|
-
# however, expectations can be set on the number of elements to be
|
121
|
-
#
|
143
|
+
# however, expectations can be set on the number of elements to be found which
|
144
|
+
# will trigger Capybara's waiting behavior for the expectations to match.The
|
145
|
+
# expectations can be set using
|
122
146
|
#
|
123
147
|
# page.assert_selector('p#foo', :count => 4)
|
124
148
|
# page.assert_selector('p#foo', :maximum => 10)
|
@@ -132,13 +156,18 @@ module Capybara
|
|
132
156
|
# @param [:css, :xpath] kind The type of selector
|
133
157
|
# @param [String] locator The selector
|
134
158
|
# @option options [String, Regexp] text Only find elements which contain this text or match this regexp
|
135
|
-
# @option options [Boolean] visible
|
136
|
-
#
|
159
|
+
# @option options [Boolean, Symbol] visible Only find elements with the specified visibility:
|
160
|
+
# * true - only finds visible elements.
|
161
|
+
# * false - finds invisible _and_ visible elements.
|
162
|
+
# * :all - same as false; finds visible and invisible elements.
|
163
|
+
# * :hidden - only finds invisible elements.
|
164
|
+
# * :visible - same as true; only finds visible elements.
|
137
165
|
# @option options [Integer] count Exact number of matches that are expected to be found
|
138
166
|
# @option options [Integer] maximum Maximum number of matches that are expected to be found
|
139
167
|
# @option options [Integer] minimum Minimum number of matches that are expected to be found
|
140
168
|
# @option options [Range] between Number of matches found must be within the given range
|
141
169
|
# @option options [Boolean] exact Control whether `is` expressions in the given XPath match exactly or partially
|
170
|
+
# @option options [Integer] wait (Capybara.default_max_wait_time) The time to wait for element count expectations to become true
|
142
171
|
# @return [Capybara::Result] A collection of found elements
|
143
172
|
#
|
144
173
|
def all(*args)
|
@@ -149,20 +178,31 @@ module Capybara
|
|
149
178
|
result
|
150
179
|
end
|
151
180
|
end
|
181
|
+
alias_method :find_all, :all
|
152
182
|
|
153
183
|
##
|
154
184
|
#
|
155
185
|
# Find the first element on the page matching the given selector
|
156
|
-
# and options, or nil if no element matches.
|
186
|
+
# and options, or nil if no element matches. By default no waiting
|
187
|
+
# behavior occurs, however if {Capybara.wait_on_first_by_default} is set to true
|
188
|
+
# it will trigger Capybara's waiting behavior for a minimum of 1 matching element to be found and
|
189
|
+
# return the first. Waiting behavior can also be triggered by passing in any of the count
|
190
|
+
# expectation options.
|
157
191
|
#
|
158
192
|
# @overload first([kind], locator, options)
|
159
193
|
# @param [:css, :xpath] kind The type of selector
|
160
194
|
# @param [String] locator The selector
|
161
195
|
# @param [Hash] options Additional options; see {#all}
|
162
|
-
# @return [Capybara::Element]
|
196
|
+
# @return [Capybara::Node::Element] The found element or nil
|
163
197
|
#
|
164
198
|
def first(*args)
|
199
|
+
if Capybara.wait_on_first_by_default
|
200
|
+
options = if args.last.is_a?(Hash) then args.pop.dup else {} end
|
201
|
+
args.push({minimum: 1}.merge(options))
|
202
|
+
end
|
165
203
|
all(*args).first
|
204
|
+
rescue Capybara::ExpectationNotMet
|
205
|
+
nil
|
166
206
|
end
|
167
207
|
end
|
168
208
|
end
|
@@ -220,7 +220,7 @@ module Capybara
|
|
220
220
|
#
|
221
221
|
# @param [String] locator The text or id of a link to check for
|
222
222
|
# @param options
|
223
|
-
# @option options [String] :href The value the href attribute must be
|
223
|
+
# @option options [String, Regexp] :href The value the href attribute must be
|
224
224
|
# @return [Boolean] Whether it exists
|
225
225
|
#
|
226
226
|
def has_link?(locator, options={})
|
@@ -437,14 +437,14 @@ module Capybara
|
|
437
437
|
# @option options [Integer] :minimum (nil) Minimum number of times the text is expected to occur
|
438
438
|
# @option options [Integer] :maximum (nil) Maximum number of times the text is expected to occur
|
439
439
|
# @option options [Range] :between (nil) Range of times that is expected to contain number of times text occurs
|
440
|
-
# @option options [Numeric] :wait (Capybara.
|
440
|
+
# @option options [Numeric] :wait (Capybara.default_max_wait_time) Maximum time that Capybara will wait for text to eq/match given string/regexp argument
|
441
441
|
# @overload $0(text, options = {})
|
442
442
|
# @param [String, Regexp] text The string/regexp to check for. If it's a string, text is expected to include it. If it's a regexp, text is expected to match it.
|
443
443
|
# @option options [Integer] :count (nil) Number of times the text is expected to occur
|
444
444
|
# @option options [Integer] :minimum (nil) Minimum number of times the text is expected to occur
|
445
445
|
# @option options [Integer] :maximum (nil) Maximum number of times the text is expected to occur
|
446
446
|
# @option options [Range] :between (nil) Range of times that is expected to contain number of times text occurs
|
447
|
-
# @option options [Numeric] :wait (Capybara.
|
447
|
+
# @option options [Numeric] :wait (Capybara.default_max_wait_time) Maximum time that Capybara will wait for text to eq/match given string/regexp argument
|
448
448
|
# @raise [Capybara::ExpectationNotMet] if the assertion hasn't succeeded during wait time
|
449
449
|
# @return [true]
|
450
450
|
#
|
data/lib/capybara/node/simple.rb
CHANGED
@@ -146,7 +146,12 @@ module Capybara
|
|
146
146
|
end
|
147
147
|
|
148
148
|
def title
|
149
|
-
native.
|
149
|
+
if native.respond_to? :title
|
150
|
+
native.title
|
151
|
+
else
|
152
|
+
#old versions of nokogiri don't have #title - remove in 3.0
|
153
|
+
native.xpath('/html/head/title | /html/title').first.text
|
154
|
+
end
|
150
155
|
end
|
151
156
|
|
152
157
|
def inspect
|