mkuklis-webrat 0.5.1 → 0.6.rc1
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/.document +3 -3
- data/.gitignore +14 -14
- data/History.txt +413 -413
- data/MIT-LICENSE.txt +19 -19
- data/README.rdoc +84 -84
- data/Rakefile +187 -187
- data/VERSION +1 -1
- data/install.rb +1 -1
- data/lib/webrat/adapters/mechanize.rb +78 -78
- data/lib/webrat/adapters/merb.rb +11 -11
- data/lib/webrat/adapters/rack.rb +25 -25
- data/lib/webrat/adapters/rails.rb +81 -81
- data/lib/webrat/adapters/sinatra.rb +9 -9
- data/lib/webrat/core/configuration.rb +92 -92
- data/lib/webrat/core/elements/area.rb +31 -31
- data/lib/webrat/core/elements/element.rb +33 -33
- data/lib/webrat/core/elements/field.rb +487 -487
- data/lib/webrat/core/elements/form.rb +103 -103
- data/lib/webrat/core/elements/label.rb +31 -31
- data/lib/webrat/core/elements/link.rb +93 -93
- data/lib/webrat/core/elements/select_option.rb +48 -48
- data/lib/webrat/core/locators/area_locator.rb +38 -38
- data/lib/webrat/core/locators/button_locator.rb +54 -54
- data/lib/webrat/core/locators/field_by_id_locator.rb +37 -37
- data/lib/webrat/core/locators/field_labeled_locator.rb +56 -56
- data/lib/webrat/core/locators/field_locator.rb +25 -25
- data/lib/webrat/core/locators/field_named_locator.rb +41 -41
- data/lib/webrat/core/locators/form_locator.rb +19 -19
- data/lib/webrat/core/locators/label_locator.rb +34 -34
- data/lib/webrat/core/locators/link_locator.rb +74 -74
- data/lib/webrat/core/locators/locator.rb +20 -20
- data/lib/webrat/core/locators/select_option_locator.rb +59 -59
- data/lib/webrat/core/locators.rb +20 -20
- data/lib/webrat/core/logging.rb +23 -23
- data/lib/webrat/core/matchers/have_content.rb +68 -68
- data/lib/webrat/core/matchers/have_selector.rb +74 -74
- data/lib/webrat/core/matchers/have_tag.rb +21 -21
- data/lib/webrat/core/matchers/have_xpath.rb +122 -122
- data/lib/webrat/core/matchers.rb +4 -4
- data/lib/webrat/core/methods.rb +64 -64
- data/lib/webrat/core/mime.rb +18 -18
- data/lib/webrat/core/save_and_open_page.rb +48 -48
- data/lib/webrat/core/scope.rb +365 -365
- data/lib/webrat/core/session.rb +306 -306
- data/lib/webrat/core/xml.rb +72 -72
- data/lib/webrat/core.rb +13 -13
- data/lib/webrat/core_extensions/blank.rb +58 -58
- data/lib/webrat/core_extensions/deprecate.rb +8 -8
- data/lib/webrat/core_extensions/detect_mapped.rb +12 -12
- data/lib/webrat/core_extensions/meta_class.rb +6 -6
- data/lib/webrat/core_extensions/nil_to_param.rb +5 -5
- data/lib/webrat/core_extensions/tcp_socket.rb +27 -27
- data/lib/webrat/integrations/merb.rb +10 -10
- data/lib/webrat/integrations/rails.rb +25 -25
- data/lib/webrat/integrations/rspec-rails.rb +10 -10
- data/lib/webrat/integrations/selenium.rb +11 -11
- data/lib/webrat/merb.rb +9 -9
- data/lib/webrat/rspec-rails.rb +2 -2
- data/lib/webrat/selenium/application_server_factory.rb +40 -40
- data/lib/webrat/selenium/application_servers/external.rb +26 -26
- data/lib/webrat/selenium/application_servers/merb.rb +50 -50
- data/lib/webrat/selenium/application_servers/rails.rb +3 -6
- data/lib/webrat/selenium/application_servers/sinatra.rb +37 -37
- data/lib/webrat/selenium/application_servers.rb +5 -5
- data/lib/webrat/selenium/location_strategy_javascript/button.js +19 -19
- data/lib/webrat/selenium/location_strategy_javascript/label.js +42 -42
- data/lib/webrat/selenium/location_strategy_javascript/webrat.js +6 -6
- data/lib/webrat/selenium/location_strategy_javascript/webratlink.js +32 -32
- data/lib/webrat/selenium/location_strategy_javascript/webratlinkwithin.js +15 -15
- data/lib/webrat/selenium/location_strategy_javascript/webratselectwithoption.js +5 -5
- data/lib/webrat/selenium/matchers/have_content.rb +66 -66
- data/lib/webrat/selenium/matchers/have_selector.rb +49 -49
- data/lib/webrat/selenium/matchers/have_tag.rb +72 -72
- data/lib/webrat/selenium/matchers/have_xpath.rb +45 -45
- data/lib/webrat/selenium/matchers.rb +4 -4
- data/lib/webrat/selenium/selenium_extensions.js +5 -5
- data/lib/webrat/selenium/selenium_rc_server.rb +86 -86
- data/lib/webrat/selenium/selenium_session.rb +267 -272
- data/lib/webrat/selenium/silence_stream.rb +18 -18
- data/lib/webrat/selenium.rb +70 -70
- data/lib/webrat.rb +18 -18
- data/spec/fakes/test_adapter.rb +37 -37
- data/spec/integration/mechanize/Rakefile +6 -6
- data/spec/integration/mechanize/config.ru +1 -1
- data/spec/integration/mechanize/sample_app.rb +20 -20
- data/spec/integration/mechanize/spec/mechanize_spec.rb +22 -22
- data/spec/integration/mechanize/spec/spec_helper.rb +27 -27
- data/spec/integration/merb/.gitignore +20 -20
- data/spec/integration/merb/Rakefile +35 -35
- data/spec/integration/merb/app/controllers/application.rb +2 -2
- data/spec/integration/merb/app/controllers/exceptions.rb +13 -13
- data/spec/integration/merb/app/controllers/testing.rb +27 -27
- data/spec/integration/merb/app/views/exceptions/not_acceptable.html.erb +63 -63
- data/spec/integration/merb/app/views/exceptions/not_found.html.erb +47 -47
- data/spec/integration/merb/app/views/layout/application.html.erb +11 -11
- data/spec/integration/merb/app/views/testing/show_form.html.erb +26 -26
- data/spec/integration/merb/app/views/testing/upload.html.erb +8 -8
- data/spec/integration/merb/config/environments/development.rb +15 -15
- data/spec/integration/merb/config/environments/rake.rb +11 -11
- data/spec/integration/merb/config/environments/test.rb +14 -14
- data/spec/integration/merb/config/init.rb +25 -25
- data/spec/integration/merb/config/rack.rb +11 -11
- data/spec/integration/merb/config/router.rb +34 -34
- data/spec/integration/merb/spec/spec.opts +1 -1
- data/spec/integration/merb/spec/spec_helper.rb +26 -26
- data/spec/integration/merb/spec/webrat_spec.rb +39 -39
- data/spec/integration/merb/tasks/merb.thor/app_script.rb +31 -31
- data/spec/integration/merb/tasks/merb.thor/common.rb +64 -64
- data/spec/integration/merb/tasks/merb.thor/gem_ext.rb +124 -124
- data/spec/integration/merb/tasks/merb.thor/main.thor +149 -149
- data/spec/integration/merb/tasks/merb.thor/ops.rb +93 -93
- data/spec/integration/merb/tasks/merb.thor/utils.rb +40 -40
- data/spec/integration/rack/Rakefile +5 -5
- data/spec/integration/rack/app.rb +89 -89
- data/spec/integration/rack/test/helper.rb +21 -21
- data/spec/integration/rack/test/webrat_rack_test.rb +73 -73
- data/spec/integration/rails/.gitignore +3 -3
- data/spec/integration/rails/Rakefile +30 -30
- data/spec/integration/rails/app/controllers/application.rb +15 -15
- data/spec/integration/rails/app/controllers/buttons_controller.rb +7 -7
- data/spec/integration/rails/app/controllers/fields_controller.rb +4 -4
- data/spec/integration/rails/app/controllers/links_controller.rb +7 -7
- data/spec/integration/rails/app/controllers/webrat_controller.rb +46 -46
- data/spec/integration/rails/app/helpers/buttons_helper.rb +2 -2
- data/spec/integration/rails/app/helpers/fields_helper.rb +2 -2
- data/spec/integration/rails/app/helpers/links_helper.rb +2 -2
- data/spec/integration/rails/app/views/buttons/show.html.erb +10 -10
- data/spec/integration/rails/app/views/fields/show.html.erb +8 -8
- data/spec/integration/rails/app/views/links/show.html.erb +5 -5
- data/spec/integration/rails/app/views/webrat/before_redirect_form.html.erb +3 -3
- data/spec/integration/rails/app/views/webrat/buttons.html.erb +10 -10
- data/spec/integration/rails/app/views/webrat/form.html.erb +27 -27
- data/spec/integration/rails/app/views/webrat/within.html.erb +2 -2
- data/spec/integration/rails/config/boot.rb +109 -109
- data/spec/integration/rails/config/environment.rb +12 -12
- data/spec/integration/rails/config/environments/development.rb +17 -17
- data/spec/integration/rails/config/environments/selenium.rb +22 -22
- data/spec/integration/rails/config/environments/test.rb +22 -22
- data/spec/integration/rails/config/initializers/inflections.rb +10 -10
- data/spec/integration/rails/config/initializers/mime_types.rb +5 -5
- data/spec/integration/rails/config/initializers/new_rails_defaults.rb +17 -17
- data/spec/integration/rails/config/locales/en.yml +4 -4
- data/spec/integration/rails/config/routes.rb +19 -19
- data/spec/integration/rails/public/404.html +29 -29
- data/spec/integration/rails/public/422.html +29 -29
- data/spec/integration/rails/public/500.html +33 -33
- data/spec/integration/rails/script/about +3 -3
- data/spec/integration/rails/script/console +3 -3
- data/spec/integration/rails/script/dbconsole +3 -3
- data/spec/integration/rails/script/destroy +3 -3
- data/spec/integration/rails/script/generate +3 -3
- data/spec/integration/rails/script/performance/benchmarker +3 -3
- data/spec/integration/rails/script/performance/profiler +3 -3
- data/spec/integration/rails/script/performance/request +3 -3
- data/spec/integration/rails/script/plugin +3 -3
- data/spec/integration/rails/script/process/inspector +3 -3
- data/spec/integration/rails/script/process/reaper +3 -3
- data/spec/integration/rails/script/process/spawner +3 -3
- data/spec/integration/rails/script/runner +3 -3
- data/spec/integration/rails/script/server +3 -3
- data/spec/integration/rails/test/integration/button_click_test.rb +80 -80
- data/spec/integration/rails/test/integration/fill_in_test.rb +24 -24
- data/spec/integration/rails/test/integration/link_click_test.rb +27 -27
- data/spec/integration/rails/test/integration/webrat_test.rb +122 -122
- data/spec/integration/rails/test/test_helper.rb +26 -26
- data/spec/integration/sinatra/Rakefile +5 -5
- data/spec/integration/sinatra/classic_app.rb +64 -64
- data/spec/integration/sinatra/modular_app.rb +16 -16
- data/spec/integration/sinatra/test/classic_app_test.rb +37 -37
- data/spec/integration/sinatra/test/modular_app_test.rb +18 -18
- data/spec/integration/sinatra/test/test_helper.rb +17 -17
- data/spec/private/core/configuration_spec.rb +87 -87
- data/spec/private/core/field_spec.rb +85 -85
- data/spec/private/core/link_spec.rb +24 -24
- data/spec/private/core/session_spec.rb +200 -200
- data/spec/private/mechanize/mechanize_adapter_spec.rb +73 -73
- data/spec/private/nokogiri_spec.rb +77 -77
- data/spec/private/rails/attaches_file_spec.rb +81 -81
- data/spec/private/rails/rails_adapter_spec.rb +86 -86
- data/spec/private/selenium/application_servers/rails_spec.rb +26 -26
- data/spec/public/basic_auth_spec.rb +24 -24
- data/spec/public/check_spec.rb +191 -191
- data/spec/public/choose_spec.rb +118 -118
- data/spec/public/click_area_spec.rb +106 -106
- data/spec/public/click_button_spec.rb +494 -494
- data/spec/public/click_link_spec.rb +511 -511
- data/spec/public/fill_in_spec.rb +224 -224
- data/spec/public/locators/field_by_xpath_spec.rb +19 -19
- data/spec/public/locators/field_labeled_spec.rb +172 -172
- data/spec/public/locators/field_with_id_spec.rb +16 -16
- data/spec/public/matchers/contain_spec.rb +114 -114
- data/spec/public/matchers/have_selector_spec.rb +146 -146
- data/spec/public/matchers/have_tag_spec.rb +39 -39
- data/spec/public/matchers/have_xpath_spec.rb +136 -136
- data/spec/public/reload_spec.rb +10 -10
- data/spec/public/save_and_open_spec.rb +70 -70
- data/spec/public/select_date_spec.rb +112 -112
- data/spec/public/select_datetime_spec.rb +137 -137
- data/spec/public/select_spec.rb +455 -455
- data/spec/public/select_time_spec.rb +100 -100
- data/spec/public/selenium/application_server_factory_spec.rb +49 -49
- data/spec/public/selenium/application_servers/external_spec.rb +12 -12
- data/spec/public/selenium/selenium_session_spec.rb +37 -37
- data/spec/public/set_hidden_field_spec.rb +5 -5
- data/spec/public/submit_form_spec.rb +5 -5
- data/spec/public/visit_spec.rb +58 -58
- data/spec/public/within_spec.rb +177 -177
- data/spec/spec.opts +1 -1
- data/spec/spec_helper.rb +54 -54
- data/webrat.gemspec +360 -0
- metadata +6 -5
@@ -1,54 +1,54 @@
|
|
1
|
-
require "webrat/core/locators/locator"
|
2
|
-
|
3
|
-
module Webrat
|
4
|
-
module Locators
|
5
|
-
|
6
|
-
class ButtonLocator < Locator # :nodoc:
|
7
|
-
|
8
|
-
def locate
|
9
|
-
ButtonField.load(@session, button_element)
|
10
|
-
end
|
11
|
-
|
12
|
-
def button_element
|
13
|
-
button_elements.detect do |element|
|
14
|
-
@value.nil? ||
|
15
|
-
matches_id?(element) ||
|
16
|
-
matches_value?(element) ||
|
17
|
-
matches_html?(element) ||
|
18
|
-
matches_alt?(element)
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
def matches_id?(element)
|
23
|
-
(@value.is_a?(Regexp) && element["id"] =~ @value) ||
|
24
|
-
(!@value.is_a?(Regexp) && element["id"] == @value.to_s)
|
25
|
-
end
|
26
|
-
|
27
|
-
def matches_value?(element)
|
28
|
-
element["value"] =~ /^\W*#{Regexp.escape(@value.to_s)}/i
|
29
|
-
end
|
30
|
-
|
31
|
-
def matches_html?(element)
|
32
|
-
element.inner_html =~ /#{Regexp.escape(@value.to_s)}/i
|
33
|
-
end
|
34
|
-
|
35
|
-
def matches_alt?(element)
|
36
|
-
element["alt"] =~ /^\W*#{Regexp.escape(@value.to_s)}/i
|
37
|
-
end
|
38
|
-
|
39
|
-
def button_elements
|
40
|
-
@dom.xpath(*ButtonField.xpath_search)
|
41
|
-
end
|
42
|
-
|
43
|
-
def error_message
|
44
|
-
"Could not find button #{@value.inspect}"
|
45
|
-
end
|
46
|
-
|
47
|
-
end
|
48
|
-
|
49
|
-
def find_button(value) #:nodoc:
|
50
|
-
ButtonLocator.new(@session, dom, value).locate!
|
51
|
-
end
|
52
|
-
|
53
|
-
end
|
54
|
-
end
|
1
|
+
require "webrat/core/locators/locator"
|
2
|
+
|
3
|
+
module Webrat
|
4
|
+
module Locators
|
5
|
+
|
6
|
+
class ButtonLocator < Locator # :nodoc:
|
7
|
+
|
8
|
+
def locate
|
9
|
+
ButtonField.load(@session, button_element)
|
10
|
+
end
|
11
|
+
|
12
|
+
def button_element
|
13
|
+
button_elements.detect do |element|
|
14
|
+
@value.nil? ||
|
15
|
+
matches_id?(element) ||
|
16
|
+
matches_value?(element) ||
|
17
|
+
matches_html?(element) ||
|
18
|
+
matches_alt?(element)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def matches_id?(element)
|
23
|
+
(@value.is_a?(Regexp) && element["id"] =~ @value) ||
|
24
|
+
(!@value.is_a?(Regexp) && element["id"] == @value.to_s)
|
25
|
+
end
|
26
|
+
|
27
|
+
def matches_value?(element)
|
28
|
+
element["value"] =~ /^\W*#{Regexp.escape(@value.to_s)}/i
|
29
|
+
end
|
30
|
+
|
31
|
+
def matches_html?(element)
|
32
|
+
element.inner_html =~ /#{Regexp.escape(@value.to_s)}/i
|
33
|
+
end
|
34
|
+
|
35
|
+
def matches_alt?(element)
|
36
|
+
element["alt"] =~ /^\W*#{Regexp.escape(@value.to_s)}/i
|
37
|
+
end
|
38
|
+
|
39
|
+
def button_elements
|
40
|
+
@dom.xpath(*ButtonField.xpath_search)
|
41
|
+
end
|
42
|
+
|
43
|
+
def error_message
|
44
|
+
"Could not find button #{@value.inspect}"
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
def find_button(value) #:nodoc:
|
50
|
+
ButtonLocator.new(@session, dom, value).locate!
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
end
|
@@ -1,37 +1,37 @@
|
|
1
|
-
require "webrat/core/locators/locator"
|
2
|
-
|
3
|
-
module Webrat
|
4
|
-
module Locators
|
5
|
-
|
6
|
-
class FieldByIdLocator < Locator # :nodoc:
|
7
|
-
|
8
|
-
def locate
|
9
|
-
Field.load(@session, field_element)
|
10
|
-
end
|
11
|
-
|
12
|
-
def field_element
|
13
|
-
field_elements.detect do |field_element|
|
14
|
-
if @value.is_a?(Regexp)
|
15
|
-
field_element["id"] =~ @value
|
16
|
-
else
|
17
|
-
field_element["id"] == @value.to_s
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
def field_elements
|
23
|
-
@dom.xpath(*Field.xpath_search)
|
24
|
-
end
|
25
|
-
|
26
|
-
def error_message
|
27
|
-
"Could not find field with id #{@value.inspect}"
|
28
|
-
end
|
29
|
-
|
30
|
-
end
|
31
|
-
|
32
|
-
def field_with_id(id, *field_types)
|
33
|
-
FieldByIdLocator.new(@session, dom, id, *field_types).locate!
|
34
|
-
end
|
35
|
-
|
36
|
-
end
|
37
|
-
end
|
1
|
+
require "webrat/core/locators/locator"
|
2
|
+
|
3
|
+
module Webrat
|
4
|
+
module Locators
|
5
|
+
|
6
|
+
class FieldByIdLocator < Locator # :nodoc:
|
7
|
+
|
8
|
+
def locate
|
9
|
+
Field.load(@session, field_element)
|
10
|
+
end
|
11
|
+
|
12
|
+
def field_element
|
13
|
+
field_elements.detect do |field_element|
|
14
|
+
if @value.is_a?(Regexp)
|
15
|
+
field_element["id"] =~ @value
|
16
|
+
else
|
17
|
+
field_element["id"] == @value.to_s
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def field_elements
|
23
|
+
@dom.xpath(*Field.xpath_search)
|
24
|
+
end
|
25
|
+
|
26
|
+
def error_message
|
27
|
+
"Could not find field with id #{@value.inspect}"
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
def field_with_id(id, *field_types)
|
33
|
+
FieldByIdLocator.new(@session, dom, id, *field_types).locate!
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
end
|
@@ -1,56 +1,56 @@
|
|
1
|
-
require "webrat/core_extensions/detect_mapped"
|
2
|
-
require "webrat/core/locators/locator"
|
3
|
-
|
4
|
-
module Webrat
|
5
|
-
module Locators
|
6
|
-
|
7
|
-
class FieldLabeledLocator < Locator # :nodoc:
|
8
|
-
|
9
|
-
def locate
|
10
|
-
matching_labels.any? && matching_labels.detect_mapped { |label| label.field }
|
11
|
-
end
|
12
|
-
|
13
|
-
def matching_labels
|
14
|
-
matching_label_elements.sort_by do |label_element|
|
15
|
-
text(label_element).length
|
16
|
-
end.map do |label_element|
|
17
|
-
Label.load(@session, label_element)
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
def matching_label_elements
|
22
|
-
label_elements.select do |label_element|
|
23
|
-
text(label_element) =~ /^\W*#{Regexp.escape(@value.to_s)}(\b|\Z)/i
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
def label_elements
|
28
|
-
@dom.xpath(*Label.xpath_search)
|
29
|
-
end
|
30
|
-
|
31
|
-
def error_message
|
32
|
-
"Could not find field labeled #{@value.inspect}"
|
33
|
-
end
|
34
|
-
|
35
|
-
def text(element)
|
36
|
-
str = element.inner_text
|
37
|
-
str.gsub!("\n","")
|
38
|
-
str.strip!
|
39
|
-
str.squeeze!(" ")
|
40
|
-
str
|
41
|
-
end
|
42
|
-
|
43
|
-
end
|
44
|
-
|
45
|
-
# Locates a form field based on a <tt>label</tt> element in the HTML source.
|
46
|
-
# This can be useful in order to verify that a field is pre-filled with the
|
47
|
-
# correct value.
|
48
|
-
#
|
49
|
-
# Example:
|
50
|
-
# field_labeled("First name").value.should == "Bryan"
|
51
|
-
def field_labeled(label, *field_types)
|
52
|
-
FieldLabeledLocator.new(@session, dom, label, *field_types).locate!
|
53
|
-
end
|
54
|
-
|
55
|
-
end
|
56
|
-
end
|
1
|
+
require "webrat/core_extensions/detect_mapped"
|
2
|
+
require "webrat/core/locators/locator"
|
3
|
+
|
4
|
+
module Webrat
|
5
|
+
module Locators
|
6
|
+
|
7
|
+
class FieldLabeledLocator < Locator # :nodoc:
|
8
|
+
|
9
|
+
def locate
|
10
|
+
matching_labels.any? && matching_labels.detect_mapped { |label| label.field }
|
11
|
+
end
|
12
|
+
|
13
|
+
def matching_labels
|
14
|
+
matching_label_elements.sort_by do |label_element|
|
15
|
+
text(label_element).length
|
16
|
+
end.map do |label_element|
|
17
|
+
Label.load(@session, label_element)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def matching_label_elements
|
22
|
+
label_elements.select do |label_element|
|
23
|
+
text(label_element) =~ /^\W*#{Regexp.escape(@value.to_s)}(\b|\Z)/i
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def label_elements
|
28
|
+
@dom.xpath(*Label.xpath_search)
|
29
|
+
end
|
30
|
+
|
31
|
+
def error_message
|
32
|
+
"Could not find field labeled #{@value.inspect}"
|
33
|
+
end
|
34
|
+
|
35
|
+
def text(element)
|
36
|
+
str = element.inner_text
|
37
|
+
str.gsub!("\n","")
|
38
|
+
str.strip!
|
39
|
+
str.squeeze!(" ")
|
40
|
+
str
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
|
45
|
+
# Locates a form field based on a <tt>label</tt> element in the HTML source.
|
46
|
+
# This can be useful in order to verify that a field is pre-filled with the
|
47
|
+
# correct value.
|
48
|
+
#
|
49
|
+
# Example:
|
50
|
+
# field_labeled("First name").value.should == "Bryan"
|
51
|
+
def field_labeled(label, *field_types)
|
52
|
+
FieldLabeledLocator.new(@session, dom, label, *field_types).locate!
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
end
|
@@ -1,25 +1,25 @@
|
|
1
|
-
require "webrat/core/locators/locator"
|
2
|
-
|
3
|
-
module Webrat
|
4
|
-
module Locators
|
5
|
-
|
6
|
-
class FieldLocator < Locator # :nodoc:
|
7
|
-
|
8
|
-
def locate
|
9
|
-
FieldByIdLocator.new(@session, @dom, @value).locate ||
|
10
|
-
FieldNamedLocator.new(@session, @dom, @value, *@field_types).locate ||
|
11
|
-
FieldLabeledLocator.new(@session, @dom, @value, *@field_types).locate
|
12
|
-
end
|
13
|
-
|
14
|
-
def error_message
|
15
|
-
"Could not find field: #{@value.inspect}"
|
16
|
-
end
|
17
|
-
|
18
|
-
end
|
19
|
-
|
20
|
-
def field(*args) # :nodoc:
|
21
|
-
FieldLocator.new(@session, dom, *args).locate!
|
22
|
-
end
|
23
|
-
|
24
|
-
end
|
25
|
-
end
|
1
|
+
require "webrat/core/locators/locator"
|
2
|
+
|
3
|
+
module Webrat
|
4
|
+
module Locators
|
5
|
+
|
6
|
+
class FieldLocator < Locator # :nodoc:
|
7
|
+
|
8
|
+
def locate
|
9
|
+
FieldByIdLocator.new(@session, @dom, @value).locate ||
|
10
|
+
FieldNamedLocator.new(@session, @dom, @value, *@field_types).locate ||
|
11
|
+
FieldLabeledLocator.new(@session, @dom, @value, *@field_types).locate
|
12
|
+
end
|
13
|
+
|
14
|
+
def error_message
|
15
|
+
"Could not find field: #{@value.inspect}"
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
|
20
|
+
def field(*args) # :nodoc:
|
21
|
+
FieldLocator.new(@session, dom, *args).locate!
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
@@ -1,41 +1,41 @@
|
|
1
|
-
require "webrat/core/locators/locator"
|
2
|
-
|
3
|
-
module Webrat
|
4
|
-
module Locators
|
5
|
-
|
6
|
-
class FieldNamedLocator < Locator # :nodoc:
|
7
|
-
|
8
|
-
def locate
|
9
|
-
Field.load(@session, field_element)
|
10
|
-
end
|
11
|
-
|
12
|
-
def field_element
|
13
|
-
field_elements.detect do |field_element|
|
14
|
-
field_element["name"] == @value.to_s
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
def field_elements
|
19
|
-
@dom.xpath(*xpath_searches)
|
20
|
-
end
|
21
|
-
|
22
|
-
def xpath_searches
|
23
|
-
if @field_types.any?
|
24
|
-
@field_types.map { |field_type| field_type.xpath_search }.flatten
|
25
|
-
else
|
26
|
-
Field.xpath_search
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
def error_message
|
31
|
-
"Could not find field named #{@value.inspect}"
|
32
|
-
end
|
33
|
-
|
34
|
-
end
|
35
|
-
|
36
|
-
def field_named(name, *field_types)
|
37
|
-
FieldNamedLocator.new(@session, dom, name, *field_types).locate!
|
38
|
-
end
|
39
|
-
|
40
|
-
end
|
41
|
-
end
|
1
|
+
require "webrat/core/locators/locator"
|
2
|
+
|
3
|
+
module Webrat
|
4
|
+
module Locators
|
5
|
+
|
6
|
+
class FieldNamedLocator < Locator # :nodoc:
|
7
|
+
|
8
|
+
def locate
|
9
|
+
Field.load(@session, field_element)
|
10
|
+
end
|
11
|
+
|
12
|
+
def field_element
|
13
|
+
field_elements.detect do |field_element|
|
14
|
+
field_element["name"] == @value.to_s
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def field_elements
|
19
|
+
@dom.xpath(*xpath_searches)
|
20
|
+
end
|
21
|
+
|
22
|
+
def xpath_searches
|
23
|
+
if @field_types.any?
|
24
|
+
@field_types.map { |field_type| field_type.xpath_search }.flatten
|
25
|
+
else
|
26
|
+
Field.xpath_search
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def error_message
|
31
|
+
"Could not find field named #{@value.inspect}"
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
|
36
|
+
def field_named(name, *field_types)
|
37
|
+
FieldNamedLocator.new(@session, dom, name, *field_types).locate!
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
end
|
@@ -1,19 +1,19 @@
|
|
1
|
-
require "webrat/core/locators/locator"
|
2
|
-
|
3
|
-
module Webrat
|
4
|
-
module Locators
|
5
|
-
|
6
|
-
class FormLocator < Locator # :nodoc:
|
7
|
-
|
8
|
-
def locate
|
9
|
-
Form.load(@session, form_element)
|
10
|
-
end
|
11
|
-
|
12
|
-
def form_element
|
13
|
-
@dom.css("#" + @value).first
|
14
|
-
end
|
15
|
-
|
16
|
-
end
|
17
|
-
|
18
|
-
end
|
19
|
-
end
|
1
|
+
require "webrat/core/locators/locator"
|
2
|
+
|
3
|
+
module Webrat
|
4
|
+
module Locators
|
5
|
+
|
6
|
+
class FormLocator < Locator # :nodoc:
|
7
|
+
|
8
|
+
def locate
|
9
|
+
Form.load(@session, form_element)
|
10
|
+
end
|
11
|
+
|
12
|
+
def form_element
|
13
|
+
@dom.css("#" + @value).first
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
@@ -1,34 +1,34 @@
|
|
1
|
-
require "webrat/core_extensions/detect_mapped"
|
2
|
-
require "webrat/core/locators/locator"
|
3
|
-
|
4
|
-
module Webrat
|
5
|
-
module Locators
|
6
|
-
|
7
|
-
class LabelLocator < Locator # :nodoc:
|
8
|
-
|
9
|
-
def locate
|
10
|
-
Label.load(@session, label_element)
|
11
|
-
end
|
12
|
-
|
13
|
-
def label_element
|
14
|
-
label_elements.detect do |label_element|
|
15
|
-
text(label_element) =~ /^\W*#{Regexp.escape(@value.to_s)}(\b|\Z)/i
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
def label_elements
|
20
|
-
@dom.xpath(*Label.xpath_search)
|
21
|
-
end
|
22
|
-
|
23
|
-
def text(label_element)
|
24
|
-
str = label_element.inner_text
|
25
|
-
str.gsub!("\n","")
|
26
|
-
str.strip!
|
27
|
-
str.squeeze!(" ")
|
28
|
-
str
|
29
|
-
end
|
30
|
-
|
31
|
-
end
|
32
|
-
|
33
|
-
end
|
34
|
-
end
|
1
|
+
require "webrat/core_extensions/detect_mapped"
|
2
|
+
require "webrat/core/locators/locator"
|
3
|
+
|
4
|
+
module Webrat
|
5
|
+
module Locators
|
6
|
+
|
7
|
+
class LabelLocator < Locator # :nodoc:
|
8
|
+
|
9
|
+
def locate
|
10
|
+
Label.load(@session, label_element)
|
11
|
+
end
|
12
|
+
|
13
|
+
def label_element
|
14
|
+
label_elements.detect do |label_element|
|
15
|
+
text(label_element) =~ /^\W*#{Regexp.escape(@value.to_s)}(\b|\Z)/i
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def label_elements
|
20
|
+
@dom.xpath(*Label.xpath_search)
|
21
|
+
end
|
22
|
+
|
23
|
+
def text(label_element)
|
24
|
+
str = label_element.inner_text
|
25
|
+
str.gsub!("\n","")
|
26
|
+
str.strip!
|
27
|
+
str.squeeze!(" ")
|
28
|
+
str
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
end
|