diabolo-webrat 0.4.2 → 0.4.3
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.
- data/History.txt +22 -3
- data/Rakefile +6 -1
- data/lib/webrat/core/configuration.rb +4 -4
- data/lib/webrat/core/elements/area.rb +7 -7
- data/lib/webrat/core/elements/element.rb +11 -11
- data/lib/webrat/core/elements/field.rb +50 -50
- data/lib/webrat/core/elements/form.rb +17 -17
- data/lib/webrat/core/elements/label.rb +6 -6
- data/lib/webrat/core/elements/link.rb +13 -11
- data/lib/webrat/core/elements/select_option.rb +9 -9
- data/lib/webrat/core/locators/area_locator.rb +10 -10
- data/lib/webrat/core/locators/button_locator.rb +13 -13
- data/lib/webrat/core/locators/field_by_id_locator.rb +8 -8
- data/lib/webrat/core/locators/field_labeled_locator.rb +10 -10
- data/lib/webrat/core/locators/field_locator.rb +7 -7
- data/lib/webrat/core/locators/field_named_locator.rb +10 -10
- data/lib/webrat/core/locators/form_locator.rb +6 -6
- data/lib/webrat/core/locators/label_locator.rb +8 -8
- data/lib/webrat/core/locators/link_locator.rb +11 -12
- data/lib/webrat/core/locators/locator.rb +5 -5
- data/lib/webrat/core/locators/select_option_locator.rb +11 -11
- data/lib/webrat/core/locators.rb +2 -2
- data/lib/webrat/core/logging.rb +3 -3
- data/lib/webrat/core/matchers/have_content.rb +12 -12
- data/lib/webrat/core/matchers/have_selector.rb +9 -9
- data/lib/webrat/core/matchers/have_tag.rb +4 -4
- data/lib/webrat/core/matchers/have_xpath.rb +24 -24
- data/lib/webrat/core/methods.rb +9 -9
- data/lib/webrat/core/mime.rb +3 -3
- data/lib/webrat/core/save_and_open_page.rb +9 -9
- data/lib/webrat/core/scope.rb +51 -51
- data/lib/webrat/core/session.rb +7 -7
- data/lib/webrat/core/xml/hpricot.rb +3 -3
- data/lib/webrat/core/xml/nokogiri.rb +11 -11
- data/lib/webrat/core/xml/rexml.rb +3 -3
- data/lib/webrat/core/xml.rb +16 -16
- data/lib/webrat/core_extensions/blank.rb +1 -1
- data/lib/webrat/core_extensions/deprecate.rb +1 -1
- data/lib/webrat/core_extensions/detect_mapped.rb +4 -4
- data/lib/webrat/core_extensions/meta_class.rb +1 -1
- data/lib/webrat/mechanize.rb +9 -9
- data/lib/webrat/merb.rb +1 -1
- data/lib/webrat/merb_session.rb +10 -10
- data/lib/webrat/rails.rb +2 -2
- data/lib/webrat/rspec-rails.rb +2 -2
- data/lib/webrat/selenium/matchers/have_content.rb +4 -4
- data/lib/webrat/selenium/matchers/have_selector.rb +4 -4
- data/lib/webrat/selenium/matchers/have_tag.rb +16 -16
- data/lib/webrat/selenium/matchers/have_xpath.rb +4 -4
- data/lib/webrat/selenium/matchers.rb +1 -1
- data/lib/webrat/selenium/selenium_session.rb +12 -18
- data/lib/webrat/selenium.rb +3 -77
- data/lib/webrat.rb +4 -4
- metadata +1 -1
|
@@ -2,7 +2,7 @@ require "webrat/core/matchers/have_xpath"
|
|
|
2
2
|
|
|
3
3
|
module Webrat
|
|
4
4
|
module Matchers
|
|
5
|
-
|
|
5
|
+
|
|
6
6
|
class HaveSelector < HaveXpath #:nodoc:
|
|
7
7
|
# ==== Returns
|
|
8
8
|
# String:: The failure message.
|
|
@@ -15,7 +15,7 @@ module Webrat
|
|
|
15
15
|
def negative_failure_message
|
|
16
16
|
"expected following output to omit a #{tag_inspect}:\n#{@document}"
|
|
17
17
|
end
|
|
18
|
-
|
|
18
|
+
|
|
19
19
|
def tag_inspect
|
|
20
20
|
options = @options.dup
|
|
21
21
|
count = options.delete(:count)
|
|
@@ -40,9 +40,9 @@ module Webrat
|
|
|
40
40
|
ast.to_xpath
|
|
41
41
|
end.first
|
|
42
42
|
end
|
|
43
|
-
|
|
43
|
+
|
|
44
44
|
end
|
|
45
|
-
|
|
45
|
+
|
|
46
46
|
# Matches HTML content against a CSS 3 selector.
|
|
47
47
|
#
|
|
48
48
|
# ==== Parameters
|
|
@@ -54,21 +54,21 @@ module Webrat
|
|
|
54
54
|
HaveSelector.new(name, attributes, &block)
|
|
55
55
|
end
|
|
56
56
|
alias_method :match_selector, :have_selector
|
|
57
|
-
|
|
58
|
-
|
|
57
|
+
|
|
58
|
+
|
|
59
59
|
# Asserts that the body of the response contains
|
|
60
60
|
# the supplied selector
|
|
61
61
|
def assert_have_selector(name, attributes = {}, &block)
|
|
62
62
|
matcher = HaveSelector.new(name, attributes, &block)
|
|
63
63
|
assert matcher.matches?(response_body), matcher.failure_message
|
|
64
64
|
end
|
|
65
|
-
|
|
65
|
+
|
|
66
66
|
# Asserts that the body of the response
|
|
67
67
|
# does not contain the supplied string or regepx
|
|
68
68
|
def assert_have_no_selector(name, attributes = {}, &block)
|
|
69
69
|
matcher = HaveSelector.new(name, attributes, &block)
|
|
70
70
|
assert !matcher.matches?(response_body), matcher.negative_failure_message
|
|
71
71
|
end
|
|
72
|
-
|
|
72
|
+
|
|
73
73
|
end
|
|
74
|
-
end
|
|
74
|
+
end
|
|
@@ -6,16 +6,16 @@ module Webrat
|
|
|
6
6
|
def have_tag(*args, &block)
|
|
7
7
|
have_selector(*args, &block)
|
|
8
8
|
end
|
|
9
|
-
|
|
9
|
+
|
|
10
10
|
alias_method :match_tag, :have_tag
|
|
11
|
-
|
|
11
|
+
|
|
12
12
|
def assert_have_tag(*args, &block)
|
|
13
13
|
assert_have_selector(*args, &block)
|
|
14
14
|
end
|
|
15
|
-
|
|
15
|
+
|
|
16
16
|
def assert_have_no_tag(*args, &block)
|
|
17
17
|
assert_have_no_selector(*args, &block)
|
|
18
18
|
end
|
|
19
19
|
|
|
20
20
|
end
|
|
21
|
-
end
|
|
21
|
+
end
|
|
@@ -3,25 +3,25 @@ require "webrat/core/xml/rexml"
|
|
|
3
3
|
|
|
4
4
|
module Webrat
|
|
5
5
|
module Matchers
|
|
6
|
-
|
|
6
|
+
|
|
7
7
|
class HaveXpath #:nodoc:
|
|
8
8
|
def initialize(expected, options = {}, &block)
|
|
9
9
|
@expected = expected
|
|
10
10
|
@options = options
|
|
11
11
|
@block = block
|
|
12
12
|
end
|
|
13
|
-
|
|
13
|
+
|
|
14
14
|
def matches?(stringlike, &block)
|
|
15
15
|
@block ||= block
|
|
16
16
|
matched = matches(stringlike)
|
|
17
|
-
|
|
17
|
+
|
|
18
18
|
if @options[:count]
|
|
19
19
|
matched.size == @options[:count] && (!@block || @block.call(matched))
|
|
20
20
|
else
|
|
21
21
|
matched.any? && (!@block || @block.call(matched))
|
|
22
22
|
end
|
|
23
23
|
end
|
|
24
|
-
|
|
24
|
+
|
|
25
25
|
def matches(stringlike)
|
|
26
26
|
if Webrat.configuration.parse_with_nokogiri?
|
|
27
27
|
nokogiri_matches(stringlike)
|
|
@@ -29,7 +29,7 @@ module Webrat
|
|
|
29
29
|
rexml_matches(stringlike)
|
|
30
30
|
end
|
|
31
31
|
end
|
|
32
|
-
|
|
32
|
+
|
|
33
33
|
def rexml_matches(stringlike)
|
|
34
34
|
if REXML::Node === stringlike || Array === stringlike
|
|
35
35
|
@query = query.map { |q| q.gsub(%r'//', './') }
|
|
@@ -49,48 +49,48 @@ module Webrat
|
|
|
49
49
|
end
|
|
50
50
|
end.flatten.compact
|
|
51
51
|
end
|
|
52
|
-
|
|
52
|
+
|
|
53
53
|
def nokogiri_matches(stringlike)
|
|
54
54
|
if Nokogiri::XML::NodeSet === stringlike
|
|
55
55
|
@query = query.gsub(%r'//', './')
|
|
56
56
|
else
|
|
57
57
|
@query = query
|
|
58
58
|
end
|
|
59
|
-
|
|
59
|
+
|
|
60
60
|
add_options_conditions_to(@query)
|
|
61
|
-
|
|
61
|
+
|
|
62
62
|
@document = Webrat::XML.document(stringlike)
|
|
63
63
|
@document.xpath(*@query)
|
|
64
64
|
end
|
|
65
|
-
|
|
65
|
+
|
|
66
66
|
def add_options_conditions_to(query)
|
|
67
67
|
add_attributes_conditions_to(query)
|
|
68
68
|
add_content_condition_to(query)
|
|
69
69
|
end
|
|
70
|
-
|
|
70
|
+
|
|
71
71
|
def add_attributes_conditions_to(query)
|
|
72
72
|
attribute_conditions = []
|
|
73
|
-
|
|
73
|
+
|
|
74
74
|
@options.each do |key, value|
|
|
75
75
|
next if [:content, :count].include?(key)
|
|
76
76
|
attribute_conditions << "@#{key} = #{xpath_escape(value)}"
|
|
77
77
|
end
|
|
78
|
-
|
|
78
|
+
|
|
79
79
|
if attribute_conditions.any?
|
|
80
80
|
query << "[#{attribute_conditions.join(' and ')}]"
|
|
81
81
|
end
|
|
82
82
|
end
|
|
83
|
-
|
|
83
|
+
|
|
84
84
|
def add_content_condition_to(query)
|
|
85
85
|
if @options[:content]
|
|
86
86
|
query << "[contains(., #{xpath_escape(@options[:content])})]"
|
|
87
87
|
end
|
|
88
88
|
end
|
|
89
|
-
|
|
89
|
+
|
|
90
90
|
def query
|
|
91
91
|
@expected
|
|
92
92
|
end
|
|
93
|
-
|
|
93
|
+
|
|
94
94
|
# ==== Returns
|
|
95
95
|
# String:: The failure message.
|
|
96
96
|
def failure_message
|
|
@@ -102,15 +102,15 @@ module Webrat
|
|
|
102
102
|
def negative_failure_message
|
|
103
103
|
"expected following text to not match xpath #{@expected}:\n#{@document}"
|
|
104
104
|
end
|
|
105
|
-
|
|
105
|
+
|
|
106
106
|
protected
|
|
107
|
-
|
|
107
|
+
|
|
108
108
|
def xpath_escape(string)
|
|
109
109
|
if string.include?("'") && string.include?('"')
|
|
110
110
|
parts = string.split("'").map do |part|
|
|
111
111
|
"'#{part}'"
|
|
112
112
|
end
|
|
113
|
-
|
|
113
|
+
|
|
114
114
|
"concat(" + parts.join(", \"'\", ") + ")"
|
|
115
115
|
elsif string.include?("'")
|
|
116
116
|
"\"#{string}\""
|
|
@@ -118,9 +118,9 @@ module Webrat
|
|
|
118
118
|
"'#{string}'"
|
|
119
119
|
end
|
|
120
120
|
end
|
|
121
|
-
|
|
121
|
+
|
|
122
122
|
end
|
|
123
|
-
|
|
123
|
+
|
|
124
124
|
# Matches HTML content against an XPath query
|
|
125
125
|
#
|
|
126
126
|
# ==== Parameters
|
|
@@ -132,16 +132,16 @@ module Webrat
|
|
|
132
132
|
HaveXpath.new(expected, options, &block)
|
|
133
133
|
end
|
|
134
134
|
alias_method :match_xpath, :have_xpath
|
|
135
|
-
|
|
135
|
+
|
|
136
136
|
def assert_have_xpath(expected, options = {}, &block)
|
|
137
137
|
hs = HaveXpath.new(expected, options, &block)
|
|
138
138
|
assert hs.matches?(response_body), hs.failure_message
|
|
139
139
|
end
|
|
140
|
-
|
|
140
|
+
|
|
141
141
|
def assert_have_no_xpath(expected, options = {}, &block)
|
|
142
142
|
hs = HaveXpath.new(expected, options, &block)
|
|
143
143
|
assert !hs.matches?(response_body), hs.negative_failure_message
|
|
144
144
|
end
|
|
145
|
-
|
|
145
|
+
|
|
146
146
|
end
|
|
147
|
-
end
|
|
147
|
+
end
|
data/lib/webrat/core/methods.rb
CHANGED
|
@@ -10,15 +10,15 @@ module Webrat
|
|
|
10
10
|
RUBY
|
|
11
11
|
end
|
|
12
12
|
end
|
|
13
|
-
|
|
13
|
+
|
|
14
14
|
def webrat
|
|
15
15
|
webrat_session
|
|
16
16
|
end
|
|
17
|
-
|
|
17
|
+
|
|
18
18
|
def webrat_session
|
|
19
19
|
@_webrat_session ||= ::Webrat.session_class.new(self)
|
|
20
20
|
end
|
|
21
|
-
|
|
21
|
+
|
|
22
22
|
# all of these methods delegate to the @session, which should
|
|
23
23
|
# be created transparently.
|
|
24
24
|
#
|
|
@@ -31,7 +31,7 @@ module Webrat
|
|
|
31
31
|
:header, :http_accept, :basic_auth,
|
|
32
32
|
:save_and_open_page,
|
|
33
33
|
:fills_in, :fill_in,
|
|
34
|
-
:checks, :check,
|
|
34
|
+
:checks, :check,
|
|
35
35
|
:unchecks, :uncheck,
|
|
36
36
|
:chooses, :choose,
|
|
37
37
|
:selects, :select,
|
|
@@ -47,15 +47,15 @@ module Webrat
|
|
|
47
47
|
:select_option,
|
|
48
48
|
:set_hidden_field, :submit_form,
|
|
49
49
|
:request_page, :current_dom,
|
|
50
|
-
:response_body,
|
|
50
|
+
:response_body,
|
|
51
51
|
:selects_date, :selects_time, :selects_datetime,
|
|
52
52
|
:select_date, :select_time, :select_datetime,
|
|
53
53
|
:field_by_xpath,
|
|
54
54
|
:field_with_id,
|
|
55
55
|
:selenium,
|
|
56
56
|
:simulate, :automate
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
|
|
60
60
|
end
|
|
61
|
-
end
|
|
61
|
+
end
|
data/lib/webrat/core/mime.rb
CHANGED
|
@@ -2,21 +2,21 @@ module Webrat
|
|
|
2
2
|
module SaveAndOpenPage
|
|
3
3
|
# Saves the page out to RAILS_ROOT/tmp/ and opens it in the default
|
|
4
4
|
# web browser if on OS X. Useful for debugging.
|
|
5
|
-
#
|
|
5
|
+
#
|
|
6
6
|
# Example:
|
|
7
7
|
# save_and_open_page
|
|
8
8
|
def save_and_open_page
|
|
9
9
|
return unless File.exist?(saved_page_dir)
|
|
10
10
|
|
|
11
11
|
filename = "#{saved_page_dir}/webrat-#{Time.now.to_i}.html"
|
|
12
|
-
|
|
12
|
+
|
|
13
13
|
File.open(filename, "w") do |f|
|
|
14
14
|
f.write rewrite_css_and_image_references(response_body)
|
|
15
15
|
end
|
|
16
16
|
|
|
17
17
|
open_in_browser(filename)
|
|
18
18
|
end
|
|
19
|
-
|
|
19
|
+
|
|
20
20
|
def open_in_browser(path) # :nodoc
|
|
21
21
|
platform = ruby_platform
|
|
22
22
|
if platform =~ /cygwin/ || platform =~ /win32/
|
|
@@ -25,26 +25,26 @@ module Webrat
|
|
|
25
25
|
`open #{path}`
|
|
26
26
|
end
|
|
27
27
|
end
|
|
28
|
-
|
|
28
|
+
|
|
29
29
|
def rewrite_css_and_image_references(response_html) # :nodoc:
|
|
30
30
|
return response_html unless doc_root
|
|
31
31
|
response_html.gsub(/"\/(stylesheets|images)/, doc_root + '/\1')
|
|
32
32
|
end
|
|
33
|
-
|
|
33
|
+
|
|
34
34
|
def saved_page_dir #:nodoc:
|
|
35
35
|
File.expand_path(".")
|
|
36
36
|
end
|
|
37
|
-
|
|
37
|
+
|
|
38
38
|
def doc_root #:nodoc:
|
|
39
39
|
nil
|
|
40
40
|
end
|
|
41
|
-
|
|
41
|
+
|
|
42
42
|
private
|
|
43
43
|
|
|
44
44
|
# accessor for testing
|
|
45
45
|
def ruby_platform
|
|
46
46
|
RUBY_PLATFORM
|
|
47
47
|
end
|
|
48
|
-
|
|
48
|
+
|
|
49
49
|
end
|
|
50
|
-
end
|
|
50
|
+
end
|
data/lib/webrat/core/scope.rb
CHANGED
|
@@ -6,36 +6,36 @@ module Webrat
|
|
|
6
6
|
# An HTML element (link, button, field, etc.) that Webrat expected was not found on the page
|
|
7
7
|
class NotFoundError < WebratError
|
|
8
8
|
end
|
|
9
|
-
|
|
9
|
+
|
|
10
10
|
class Scope
|
|
11
11
|
include Logging
|
|
12
12
|
include Locators
|
|
13
|
-
|
|
13
|
+
|
|
14
14
|
def self.from_page(session, response, response_body) #:nodoc:
|
|
15
15
|
new(session) do
|
|
16
16
|
@response = response
|
|
17
17
|
@response_body = response_body
|
|
18
18
|
end
|
|
19
19
|
end
|
|
20
|
-
|
|
20
|
+
|
|
21
21
|
def self.from_scope(session, scope, selector) #:nodoc:
|
|
22
22
|
new(session) do
|
|
23
23
|
@scope = scope
|
|
24
24
|
@selector = selector
|
|
25
25
|
end
|
|
26
26
|
end
|
|
27
|
-
|
|
27
|
+
|
|
28
28
|
attr_reader :session
|
|
29
|
-
|
|
29
|
+
|
|
30
30
|
def initialize(session, &block) #:nodoc:
|
|
31
31
|
@session = session
|
|
32
32
|
instance_eval(&block) if block_given?
|
|
33
|
-
|
|
33
|
+
|
|
34
34
|
if @selector && scoped_dom.nil?
|
|
35
35
|
raise Webrat::NotFoundError.new("The scope was not found on the page: #{@selector.inspect}")
|
|
36
36
|
end
|
|
37
37
|
end
|
|
38
|
-
|
|
38
|
+
|
|
39
39
|
# Verifies an input field or textarea exists on the current page, and stores a value for
|
|
40
40
|
# it which will be sent when the form is submitted.
|
|
41
41
|
#
|
|
@@ -53,7 +53,7 @@ module Webrat
|
|
|
53
53
|
end
|
|
54
54
|
|
|
55
55
|
webrat_deprecate :fills_in, :fill_in
|
|
56
|
-
|
|
56
|
+
|
|
57
57
|
# Verifies that a hidden field exists on the current page and sets
|
|
58
58
|
# the value to that given by the <tt>:to</tt> option.
|
|
59
59
|
#
|
|
@@ -63,7 +63,7 @@ module Webrat
|
|
|
63
63
|
field = locate_field(field_locator, HiddenField)
|
|
64
64
|
field.set(options[:to])
|
|
65
65
|
end
|
|
66
|
-
|
|
66
|
+
|
|
67
67
|
# Verifies that an input checkbox exists on the current page and marks it
|
|
68
68
|
# as checked, so that the value will be submitted with the form.
|
|
69
69
|
#
|
|
@@ -74,7 +74,7 @@ module Webrat
|
|
|
74
74
|
end
|
|
75
75
|
|
|
76
76
|
webrat_deprecate :checks, :check
|
|
77
|
-
|
|
77
|
+
|
|
78
78
|
# Verifies that an input checkbox exists on the current page and marks it
|
|
79
79
|
# as unchecked, so that the value will not be submitted with the form.
|
|
80
80
|
#
|
|
@@ -85,7 +85,7 @@ module Webrat
|
|
|
85
85
|
end
|
|
86
86
|
|
|
87
87
|
webrat_deprecate :unchecks, :uncheck
|
|
88
|
-
|
|
88
|
+
|
|
89
89
|
# Verifies that an input radio button exists on the current page and marks it
|
|
90
90
|
# as checked, so that the value will be submitted with the form.
|
|
91
91
|
#
|
|
@@ -96,7 +96,7 @@ module Webrat
|
|
|
96
96
|
end
|
|
97
97
|
|
|
98
98
|
webrat_deprecate :chooses, :choose
|
|
99
|
-
|
|
99
|
+
|
|
100
100
|
# Verifies that a an option element exists on the current page with the specified
|
|
101
101
|
# text. You can optionally restrict the search to a specific select list by
|
|
102
102
|
# assigning <tt>options[:from]</tt> the value of the select list's name or
|
|
@@ -111,7 +111,7 @@ module Webrat
|
|
|
111
111
|
end
|
|
112
112
|
|
|
113
113
|
webrat_deprecate :selects, :select
|
|
114
|
-
|
|
114
|
+
|
|
115
115
|
DATE_TIME_SUFFIXES = {
|
|
116
116
|
:year => '1i',
|
|
117
117
|
:month => '2i',
|
|
@@ -120,9 +120,9 @@ module Webrat
|
|
|
120
120
|
:minute => '5i'
|
|
121
121
|
}
|
|
122
122
|
|
|
123
|
-
# Verifies that date elements (year, month, day) exist on the current page
|
|
123
|
+
# Verifies that date elements (year, month, day) exist on the current page
|
|
124
124
|
# with the specified values. You can optionally restrict the search to a specific
|
|
125
|
-
# date's elements by assigning <tt>options[:from]</tt> the value of the date's
|
|
125
|
+
# date's elements by assigning <tt>options[:from]</tt> the value of the date's
|
|
126
126
|
# label. Selects all the date elements with date provided. The date provided may
|
|
127
127
|
# be a string or a Date/Time object.
|
|
128
128
|
#
|
|
@@ -136,15 +136,15 @@ module Webrat
|
|
|
136
136
|
# select_date Date.parse("December 25, 2000"), :from => "Event"
|
|
137
137
|
# select_date "April 26, 1982", :id_prefix => 'birthday'
|
|
138
138
|
def select_date(date_to_select, options ={})
|
|
139
|
-
date = date_to_select.is_a?(Date) || date_to_select.is_a?(Time) ?
|
|
140
|
-
date_to_select : Date.parse(date_to_select)
|
|
141
|
-
|
|
139
|
+
date = date_to_select.is_a?(Date) || date_to_select.is_a?(Time) ?
|
|
140
|
+
date_to_select : Date.parse(date_to_select)
|
|
141
|
+
|
|
142
142
|
id_prefix = locate_id_prefix(options) do
|
|
143
143
|
year_field = FieldByIdLocator.new(@session, dom, /(.*?)_#{DATE_TIME_SUFFIXES[:year]}$/).locate
|
|
144
144
|
raise NotFoundError.new("No date fields were found") unless year_field && year_field.id =~ /(.*?)_1i/
|
|
145
145
|
$1
|
|
146
146
|
end
|
|
147
|
-
|
|
147
|
+
|
|
148
148
|
select date.year, :from => "#{id_prefix}_#{DATE_TIME_SUFFIXES[:year]}"
|
|
149
149
|
select date.strftime('%B'), :from => "#{id_prefix}_#{DATE_TIME_SUFFIXES[:month]}"
|
|
150
150
|
select date.day, :from => "#{id_prefix}_#{DATE_TIME_SUFFIXES[:day]}"
|
|
@@ -152,9 +152,9 @@ module Webrat
|
|
|
152
152
|
|
|
153
153
|
webrat_deprecate :selects_date, :select_date
|
|
154
154
|
|
|
155
|
-
# Verifies that time elements (hour, minute) exist on the current page
|
|
155
|
+
# Verifies that time elements (hour, minute) exist on the current page
|
|
156
156
|
# with the specified values. You can optionally restrict the search to a specific
|
|
157
|
-
# time's elements by assigning <tt>options[:from]</tt> the value of the time's
|
|
157
|
+
# time's elements by assigning <tt>options[:from]</tt> the value of the time's
|
|
158
158
|
# label. Selects all the time elements with date provided. The time provided may
|
|
159
159
|
# be a string or a Time object.
|
|
160
160
|
#
|
|
@@ -164,28 +164,28 @@ module Webrat
|
|
|
164
164
|
#
|
|
165
165
|
# Note: Just like Rails' time_select helper this assumes the form is using
|
|
166
166
|
# 24 hour select boxes, and not 12 hours with AM/PM.
|
|
167
|
-
#
|
|
167
|
+
#
|
|
168
168
|
# Examples:
|
|
169
169
|
# select_time "9:30"
|
|
170
170
|
# select_date "3:30PM", :from => "Party Time"
|
|
171
171
|
# select_date Time.parse("10:00PM"), :from => "Event"
|
|
172
172
|
# select_date "10:30AM", :id_prefix => 'meeting'
|
|
173
173
|
def select_time(time_to_select, options ={})
|
|
174
|
-
time = time_to_select.is_a?(Time) ? time_to_select : Time.parse(time_to_select)
|
|
174
|
+
time = time_to_select.is_a?(Time) ? time_to_select : Time.parse(time_to_select)
|
|
175
175
|
|
|
176
176
|
id_prefix = locate_id_prefix(options) do
|
|
177
177
|
hour_field = FieldByIdLocator.new(@session, dom, /(.*?)_#{DATE_TIME_SUFFIXES[:hour]}$/).locate
|
|
178
178
|
raise NotFoundError.new("No time fields were found") unless hour_field && hour_field.id =~ /(.*?)_4i/
|
|
179
179
|
$1
|
|
180
180
|
end
|
|
181
|
-
|
|
181
|
+
|
|
182
182
|
select time.hour.to_s.rjust(2,'0'), :from => "#{id_prefix}_#{DATE_TIME_SUFFIXES[:hour]}"
|
|
183
183
|
select time.min.to_s.rjust(2,'0'), :from => "#{id_prefix}_#{DATE_TIME_SUFFIXES[:minute]}"
|
|
184
184
|
end
|
|
185
185
|
|
|
186
186
|
webrat_deprecate :selects_time, :select_time
|
|
187
|
-
|
|
188
|
-
# Verifies and selects all the date and time elements on the current page.
|
|
187
|
+
|
|
188
|
+
# Verifies and selects all the date and time elements on the current page.
|
|
189
189
|
# See #select_time and #select_date for more details and available options.
|
|
190
190
|
#
|
|
191
191
|
# Examples:
|
|
@@ -194,16 +194,16 @@ module Webrat
|
|
|
194
194
|
# select_datetime Time.parse("December 25, 2000 15:30"), :from => "Event"
|
|
195
195
|
# select_datetime "April 26, 1982 5:50PM", :id_prefix => 'birthday'
|
|
196
196
|
def select_datetime(time_to_select, options ={})
|
|
197
|
-
time = time_to_select.is_a?(Time) ? time_to_select : Time.parse(time_to_select)
|
|
198
|
-
|
|
197
|
+
time = time_to_select.is_a?(Time) ? time_to_select : Time.parse(time_to_select)
|
|
198
|
+
|
|
199
199
|
options[:id_prefix] ||= (options[:from] ? FieldByIdLocator.new(@session, dom, options[:from]).locate : nil)
|
|
200
|
-
|
|
200
|
+
|
|
201
201
|
select_date time, options
|
|
202
202
|
select_time time, options
|
|
203
203
|
end
|
|
204
204
|
|
|
205
205
|
webrat_deprecate :selects_datetime, :select_datetime
|
|
206
|
-
|
|
206
|
+
|
|
207
207
|
# Verifies that an input file field exists on the current page and sets
|
|
208
208
|
# its value to the given +file+, so that the file will be uploaded
|
|
209
209
|
# along with the form. An optional <tt>content_type</tt> may be given.
|
|
@@ -229,13 +229,13 @@ module Webrat
|
|
|
229
229
|
def click_area(area_name)
|
|
230
230
|
find_area(area_name).click
|
|
231
231
|
end
|
|
232
|
-
|
|
232
|
+
|
|
233
233
|
webrat_deprecate :clicks_area, :click_area
|
|
234
|
-
|
|
234
|
+
|
|
235
235
|
# Issues a request for the URL pointed to by a link on the current page,
|
|
236
236
|
# follows any redirects, and verifies the final page load was successful.
|
|
237
|
-
#
|
|
238
|
-
# click_link has very basic support for detecting Rails-generated
|
|
237
|
+
#
|
|
238
|
+
# click_link has very basic support for detecting Rails-generated
|
|
239
239
|
# JavaScript onclick handlers for PUT, POST and DELETE links, as well as
|
|
240
240
|
# CSRF authenticity tokens if they are present.
|
|
241
241
|
#
|
|
@@ -243,15 +243,15 @@ module Webrat
|
|
|
243
243
|
#
|
|
244
244
|
# Passing a :method in the options hash overrides the HTTP method used
|
|
245
245
|
# for making the link request
|
|
246
|
-
#
|
|
246
|
+
#
|
|
247
247
|
# It will try to find links by (in order of precedence):
|
|
248
248
|
# innerHTML, with simple handling
|
|
249
249
|
# title
|
|
250
250
|
# id
|
|
251
|
-
#
|
|
251
|
+
#
|
|
252
252
|
# innerHTML and title are matchable by text subtring or Regexp
|
|
253
253
|
# id is matchable by full text equality or Regexp
|
|
254
|
-
#
|
|
254
|
+
#
|
|
255
255
|
# Example:
|
|
256
256
|
# click_link "Sign up"
|
|
257
257
|
# click_link "Sign up", :javascript => false
|
|
@@ -261,7 +261,7 @@ module Webrat
|
|
|
261
261
|
end
|
|
262
262
|
|
|
263
263
|
webrat_deprecate :clicks_link, :click_link
|
|
264
|
-
|
|
264
|
+
|
|
265
265
|
# Verifies that a submit button exists for the form, then submits the form, follows
|
|
266
266
|
# any redirects, and verifies the final page was successful.
|
|
267
267
|
#
|
|
@@ -288,38 +288,38 @@ module Webrat
|
|
|
288
288
|
def submit_form(id)
|
|
289
289
|
FormLocator.new(@session, dom, id).locate.submit
|
|
290
290
|
end
|
|
291
|
-
|
|
291
|
+
|
|
292
292
|
def dom # :nodoc:
|
|
293
293
|
return @dom if @dom
|
|
294
|
-
|
|
294
|
+
|
|
295
295
|
if @selector
|
|
296
296
|
@dom = scoped_dom
|
|
297
297
|
else
|
|
298
298
|
@dom = page_dom
|
|
299
299
|
end
|
|
300
|
-
|
|
300
|
+
|
|
301
301
|
return @dom
|
|
302
302
|
end
|
|
303
|
-
|
|
303
|
+
|
|
304
304
|
protected
|
|
305
|
-
|
|
305
|
+
|
|
306
306
|
def page_dom #:nodoc:
|
|
307
307
|
return @response.dom if @response.respond_to?(:dom)
|
|
308
|
-
|
|
308
|
+
|
|
309
309
|
if @session.xml_content_type?
|
|
310
310
|
dom = Webrat::XML.xml_document(@response_body)
|
|
311
311
|
else
|
|
312
312
|
dom = Webrat::XML.html_document(@response_body)
|
|
313
313
|
end
|
|
314
|
-
|
|
314
|
+
|
|
315
315
|
Webrat.define_dom_method(@response, dom)
|
|
316
316
|
return dom
|
|
317
317
|
end
|
|
318
|
-
|
|
318
|
+
|
|
319
319
|
def scoped_dom
|
|
320
320
|
Webrat::XML.css_at(@scope.dom, @selector)
|
|
321
321
|
end
|
|
322
|
-
|
|
322
|
+
|
|
323
323
|
def locate_field(field_locator, *field_types) #:nodoc:
|
|
324
324
|
if field_locator.is_a?(Field)
|
|
325
325
|
field_locator
|
|
@@ -327,10 +327,10 @@ module Webrat
|
|
|
327
327
|
field(field_locator, *field_types)
|
|
328
328
|
end
|
|
329
329
|
end
|
|
330
|
-
|
|
330
|
+
|
|
331
331
|
def locate_id_prefix(options, &location_strategy) #:nodoc:
|
|
332
332
|
return options[:id_prefix] if options[:id_prefix]
|
|
333
|
-
|
|
333
|
+
|
|
334
334
|
if options[:from]
|
|
335
335
|
if (label = LabelLocator.new(@session, dom, options[:from]).locate)
|
|
336
336
|
label.for_id
|
|
@@ -341,10 +341,10 @@ module Webrat
|
|
|
341
341
|
yield
|
|
342
342
|
end
|
|
343
343
|
end
|
|
344
|
-
|
|
344
|
+
|
|
345
345
|
def forms #:nodoc:
|
|
346
346
|
@forms ||= Form.load_all(@session, dom)
|
|
347
347
|
end
|
|
348
|
-
|
|
348
|
+
|
|
349
349
|
end
|
|
350
350
|
end
|