webrat 0.3.4 → 0.4.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.
- data/History.txt +140 -30
- data/README.rdoc +85 -0
- data/Rakefile +72 -22
- data/install.rb +1 -1
- data/lib/webrat.rb +12 -17
- data/lib/webrat/core.rb +9 -7
- data/lib/webrat/core/configuration.rb +87 -0
- data/lib/webrat/core/{area.rb → elements/area.rb} +7 -20
- data/lib/webrat/core/elements/element.rb +33 -0
- data/lib/webrat/core/elements/field.rb +394 -0
- data/lib/webrat/core/elements/form.rb +103 -0
- data/lib/webrat/core/elements/label.rb +31 -0
- data/lib/webrat/core/{link.rb → elements/link.rb} +15 -26
- data/lib/webrat/core/elements/select_option.rb +35 -0
- data/lib/webrat/core/locators.rb +13 -85
- data/lib/webrat/core/locators/area_locator.rb +38 -0
- data/lib/webrat/core/locators/button_locator.rb +54 -0
- data/lib/webrat/core/locators/field_by_id_locator.rb +37 -0
- data/lib/webrat/core/locators/field_labeled_locator.rb +56 -0
- data/lib/webrat/core/locators/field_locator.rb +25 -0
- data/lib/webrat/core/locators/field_named_locator.rb +41 -0
- data/lib/webrat/core/locators/form_locator.rb +19 -0
- data/lib/webrat/core/locators/label_locator.rb +34 -0
- data/lib/webrat/core/locators/link_locator.rb +66 -0
- data/lib/webrat/core/locators/locator.rb +20 -0
- data/lib/webrat/core/locators/select_option_locator.rb +59 -0
- data/lib/webrat/core/logging.rb +5 -9
- data/lib/webrat/core/matchers/have_content.rb +19 -44
- data/lib/webrat/core/matchers/have_selector.rb +15 -2
- data/lib/webrat/core/matchers/have_tag.rb +15 -2
- data/lib/webrat/core/matchers/have_xpath.rb +21 -28
- data/lib/webrat/core/methods.rb +32 -15
- data/lib/webrat/core/mime.rb +3 -3
- data/lib/webrat/core/save_and_open_page.rb +50 -0
- data/lib/webrat/core/scope.rb +183 -41
- data/lib/webrat/core/session.rb +125 -63
- data/lib/webrat/core/xml.rb +115 -0
- data/lib/webrat/core/xml/hpricot.rb +19 -0
- data/lib/webrat/core/xml/nokogiri.rb +76 -0
- data/lib/webrat/core/xml/rexml.rb +24 -0
- data/lib/webrat/core_extensions/deprecate.rb +1 -1
- data/lib/webrat/mechanize.rb +58 -12
- data/lib/webrat/merb.rb +7 -73
- data/lib/webrat/merb_session.rb +65 -0
- data/lib/webrat/rack.rb +1 -1
- data/lib/webrat/rails.rb +56 -55
- data/lib/webrat/rspec-rails.rb +13 -0
- data/lib/webrat/selenium.rb +92 -1
- data/lib/webrat/selenium/matchers.rb +146 -0
- data/lib/webrat/selenium/selenium_session.rb +179 -80
- data/lib/webrat/sinatra.rb +14 -4
- data/vendor/selenium-server.jar +0 -0
- metadata +36 -17
- data/README.txt +0 -90
- data/TODO.txt +0 -10
- data/init.rb +0 -3
- data/lib/webrat/core/field.rb +0 -332
- data/lib/webrat/core/flunk.rb +0 -7
- data/lib/webrat/core/form.rb +0 -130
- data/lib/webrat/core/label.rb +0 -18
- data/lib/webrat/core/nokogiri.rb +0 -44
- data/lib/webrat/core/select_option.rb +0 -29
- data/lib/webrat/rails/redirect_actions.rb +0 -18
data/lib/webrat/core/flunk.rb
DELETED
data/lib/webrat/core/form.rb
DELETED
@@ -1,130 +0,0 @@
|
|
1
|
-
require "webrat/core/field"
|
2
|
-
require "webrat/core_extensions/blank"
|
3
|
-
|
4
|
-
module Webrat
|
5
|
-
class Form #:nodoc:
|
6
|
-
attr_reader :element
|
7
|
-
|
8
|
-
def initialize(session, element)
|
9
|
-
@session = session
|
10
|
-
@element = element
|
11
|
-
@fields = nil
|
12
|
-
end
|
13
|
-
|
14
|
-
def field(locator, *field_types)
|
15
|
-
field_with_id(locator, *field_types) ||
|
16
|
-
field_named(locator, *field_types) ||
|
17
|
-
field_labeled(locator, *field_types) ||
|
18
|
-
nil
|
19
|
-
end
|
20
|
-
|
21
|
-
def find_select_option(option_text)
|
22
|
-
select_fields = fields_by_type([SelectField])
|
23
|
-
|
24
|
-
select_fields.each do |select_field|
|
25
|
-
result = select_field.find_option(option_text)
|
26
|
-
return result if result
|
27
|
-
end
|
28
|
-
|
29
|
-
nil
|
30
|
-
end
|
31
|
-
|
32
|
-
def find_button(value = nil)
|
33
|
-
return fields_by_type([ButtonField]).first if value.nil?
|
34
|
-
possible_buttons = fields_by_type([ButtonField])
|
35
|
-
possible_buttons.detect { |possible_button| possible_button.matches_id?(value) } ||
|
36
|
-
possible_buttons.detect { |possible_button| possible_button.matches_value?(value) }
|
37
|
-
end
|
38
|
-
|
39
|
-
def fields
|
40
|
-
return @fields if @fields
|
41
|
-
|
42
|
-
@fields = (@element.search(".//button", ".//input", ".//textarea", ".//select")).collect do |field_element|
|
43
|
-
Field.class_for_element(field_element).new(self, field_element)
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
def submit
|
48
|
-
@session.request_page(form_action, form_method, params)
|
49
|
-
end
|
50
|
-
|
51
|
-
def field_with_id(id, *field_types)
|
52
|
-
possible_fields = fields_by_type(field_types)
|
53
|
-
possible_fields.detect { |possible_field| possible_field.matches_id?(id) }
|
54
|
-
end
|
55
|
-
|
56
|
-
def field_named(name, *field_types)
|
57
|
-
possible_fields = fields_by_type(field_types)
|
58
|
-
possible_fields.detect { |possible_field| possible_field.matches_name?(name) }
|
59
|
-
end
|
60
|
-
|
61
|
-
def field_labeled(label, *field_types)
|
62
|
-
possible_fields = fields_by_type(field_types)
|
63
|
-
matching_fields = possible_fields.select do |possible_field|
|
64
|
-
possible_field.matches_label?(label)
|
65
|
-
end
|
66
|
-
matching_fields.min { |a, b| a.label_text.length <=> b.label_text.length }
|
67
|
-
end
|
68
|
-
|
69
|
-
protected
|
70
|
-
|
71
|
-
def fields_by_type(field_types)
|
72
|
-
if field_types.any?
|
73
|
-
fields.select { |f| field_types.include?(f.class) }
|
74
|
-
else
|
75
|
-
fields
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
def params
|
80
|
-
all_params = {}
|
81
|
-
|
82
|
-
fields.each do |field|
|
83
|
-
next if field.to_param.nil?
|
84
|
-
merge(all_params, field.to_param)
|
85
|
-
end
|
86
|
-
|
87
|
-
all_params
|
88
|
-
end
|
89
|
-
|
90
|
-
def form_method
|
91
|
-
@element["method"].blank? ? :get : @element["method"].downcase
|
92
|
-
end
|
93
|
-
|
94
|
-
def form_action
|
95
|
-
@element["action"].blank? ? @session.current_url : @element["action"]
|
96
|
-
end
|
97
|
-
|
98
|
-
HASH = [Hash, HashWithIndifferentAccess] rescue [Hash]
|
99
|
-
|
100
|
-
def merge(all_params, new_param)
|
101
|
-
new_param.each do |key, value|
|
102
|
-
case all_params[key]
|
103
|
-
when *HASH
|
104
|
-
merge_hash_values(all_params[key], value)
|
105
|
-
when Array
|
106
|
-
all_params[key] += value
|
107
|
-
else
|
108
|
-
all_params[key] = value
|
109
|
-
end
|
110
|
-
end
|
111
|
-
end
|
112
|
-
|
113
|
-
def merge_hash_values(a, b) # :nodoc:
|
114
|
-
a.keys.each do |k|
|
115
|
-
if b.has_key?(k)
|
116
|
-
case [a[k], b[k]].map{|value| value.class}
|
117
|
-
when [Hash, Hash]
|
118
|
-
a[k] = merge_hash_values(a[k], b[k])
|
119
|
-
b.delete(k)
|
120
|
-
when [Array, Array]
|
121
|
-
a[k] += b[k]
|
122
|
-
b.delete(k)
|
123
|
-
end
|
124
|
-
end
|
125
|
-
end
|
126
|
-
a.merge!(b)
|
127
|
-
end
|
128
|
-
|
129
|
-
end
|
130
|
-
end
|
data/lib/webrat/core/label.rb
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
module Webrat
|
2
|
-
class Label #:nodoc:
|
3
|
-
|
4
|
-
def initialize(field, element)
|
5
|
-
@field = field
|
6
|
-
@element = element
|
7
|
-
end
|
8
|
-
|
9
|
-
def matches_text?(label_text)
|
10
|
-
text =~ /^\W*#{Regexp.escape(label_text.to_s)}\b/i
|
11
|
-
end
|
12
|
-
|
13
|
-
def text
|
14
|
-
@element.inner_text
|
15
|
-
end
|
16
|
-
|
17
|
-
end
|
18
|
-
end
|
data/lib/webrat/core/nokogiri.rb
DELETED
@@ -1,44 +0,0 @@
|
|
1
|
-
require "webrat/core_extensions/meta_class"
|
2
|
-
|
3
|
-
module Webrat
|
4
|
-
|
5
|
-
def self.nokogiri_document(stringlike) #:nodoc:
|
6
|
-
return stringlike.dom if stringlike.respond_to?(:dom)
|
7
|
-
|
8
|
-
if Nokogiri::HTML::Document === stringlike
|
9
|
-
stringlike
|
10
|
-
elsif Nokogiri::XML::NodeSet === stringlike
|
11
|
-
stringlike
|
12
|
-
elsif StringIO === stringlike
|
13
|
-
Nokogiri::HTML(stringlike.string)
|
14
|
-
elsif stringlike.respond_to?(:body)
|
15
|
-
Nokogiri::HTML(stringlike.body.to_s)
|
16
|
-
else
|
17
|
-
Nokogiri::HTML(stringlike.to_s)
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
def self.define_dom_method(object, dom) #:nodoc:
|
22
|
-
object.meta_class.send(:define_method, :dom) do
|
23
|
-
dom
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
end
|
28
|
-
|
29
|
-
|
30
|
-
module Nokogiri
|
31
|
-
module CSS
|
32
|
-
class XPathVisitor
|
33
|
-
|
34
|
-
def visit_pseudo_class_text(node) #:nodoc:
|
35
|
-
"@type='text'"
|
36
|
-
end
|
37
|
-
|
38
|
-
def visit_pseudo_class_password(node) #:nodoc:
|
39
|
-
"@type='password'"
|
40
|
-
end
|
41
|
-
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
@@ -1,29 +0,0 @@
|
|
1
|
-
module Webrat
|
2
|
-
class SelectOption #:nodoc:
|
3
|
-
|
4
|
-
def initialize(select, element)
|
5
|
-
@select = select
|
6
|
-
@element = element
|
7
|
-
end
|
8
|
-
|
9
|
-
def matches_text?(text)
|
10
|
-
if text.is_a?(Regexp)
|
11
|
-
@element.inner_html =~ text
|
12
|
-
else
|
13
|
-
@element.inner_html == text.to_s
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
def choose
|
18
|
-
@select.raise_error_if_disabled
|
19
|
-
@select.set(value)
|
20
|
-
end
|
21
|
-
|
22
|
-
protected
|
23
|
-
|
24
|
-
def value
|
25
|
-
@element["value"] || @element.inner_html
|
26
|
-
end
|
27
|
-
|
28
|
-
end
|
29
|
-
end
|
@@ -1,18 +0,0 @@
|
|
1
|
-
# For Rails before http://dev.rubyonrails.org/ticket/10497 was committed
|
2
|
-
module Webrat
|
3
|
-
module RedirectActions #:nodoc:
|
4
|
-
|
5
|
-
def put_via_redirect(path, parameters = {}, headers = {})
|
6
|
-
put path, parameters, headers
|
7
|
-
follow_redirect! while redirect?
|
8
|
-
status
|
9
|
-
end
|
10
|
-
|
11
|
-
def delete_via_redirect(path, parameters = {}, headers = {})
|
12
|
-
delete path, parameters, headers
|
13
|
-
follow_redirect! while redirect?
|
14
|
-
status
|
15
|
-
end
|
16
|
-
|
17
|
-
end
|
18
|
-
end
|