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,49 +1,49 @@
|
|
1
|
-
module Webrat
|
2
|
-
module Selenium
|
3
|
-
module Matchers
|
4
|
-
class HaveSelector
|
5
|
-
def initialize(expected)
|
6
|
-
@expected = expected
|
7
|
-
end
|
8
|
-
|
9
|
-
def matches?(response)
|
10
|
-
response.session.wait_for do
|
11
|
-
response.selenium.is_element_present("css=#{@expected}")
|
12
|
-
end
|
13
|
-
rescue Webrat::TimeoutError
|
14
|
-
false
|
15
|
-
end
|
16
|
-
|
17
|
-
# ==== Returns
|
18
|
-
# String:: The failure message.
|
19
|
-
def failure_message
|
20
|
-
"expected following text to match selector #{@expected}:\n#{@document}"
|
21
|
-
end
|
22
|
-
|
23
|
-
# ==== Returns
|
24
|
-
# String:: The failure message to be displayed in negative matches.
|
25
|
-
def negative_failure_message
|
26
|
-
"expected following text to not match selector #{@expected}:\n#{@document}"
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
def have_selector(content)
|
31
|
-
HaveSelector.new(content)
|
32
|
-
end
|
33
|
-
|
34
|
-
# Asserts that the body of the response contains
|
35
|
-
# the supplied selector
|
36
|
-
def assert_have_selector(expected)
|
37
|
-
hs = HaveSelector.new(expected)
|
38
|
-
assert hs.matches?(response), hs.failure_message
|
39
|
-
end
|
40
|
-
|
41
|
-
# Asserts that the body of the response
|
42
|
-
# does not contain the supplied string or regepx
|
43
|
-
def assert_have_no_selector(expected)
|
44
|
-
hs = HaveSelector.new(expected)
|
45
|
-
assert !hs.matches?(response), hs.negative_failure_message
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
1
|
+
module Webrat
|
2
|
+
module Selenium
|
3
|
+
module Matchers
|
4
|
+
class HaveSelector
|
5
|
+
def initialize(expected)
|
6
|
+
@expected = expected
|
7
|
+
end
|
8
|
+
|
9
|
+
def matches?(response)
|
10
|
+
response.session.wait_for do
|
11
|
+
response.selenium.is_element_present("css=#{@expected}")
|
12
|
+
end
|
13
|
+
rescue Webrat::TimeoutError
|
14
|
+
false
|
15
|
+
end
|
16
|
+
|
17
|
+
# ==== Returns
|
18
|
+
# String:: The failure message.
|
19
|
+
def failure_message
|
20
|
+
"expected following text to match selector #{@expected}:\n#{@document}"
|
21
|
+
end
|
22
|
+
|
23
|
+
# ==== Returns
|
24
|
+
# String:: The failure message to be displayed in negative matches.
|
25
|
+
def negative_failure_message
|
26
|
+
"expected following text to not match selector #{@expected}:\n#{@document}"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def have_selector(content)
|
31
|
+
HaveSelector.new(content)
|
32
|
+
end
|
33
|
+
|
34
|
+
# Asserts that the body of the response contains
|
35
|
+
# the supplied selector
|
36
|
+
def assert_have_selector(expected)
|
37
|
+
hs = HaveSelector.new(expected)
|
38
|
+
assert hs.matches?(response), hs.failure_message
|
39
|
+
end
|
40
|
+
|
41
|
+
# Asserts that the body of the response
|
42
|
+
# does not contain the supplied string or regepx
|
43
|
+
def assert_have_no_selector(expected)
|
44
|
+
hs = HaveSelector.new(expected)
|
45
|
+
assert !hs.matches?(response), hs.negative_failure_message
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -1,72 +1,72 @@
|
|
1
|
-
module Webrat
|
2
|
-
module Selenium
|
3
|
-
module Matchers
|
4
|
-
|
5
|
-
class HaveTag < HaveSelector #:nodoc:
|
6
|
-
# ==== Returns
|
7
|
-
# String:: The failure message.
|
8
|
-
def failure_message
|
9
|
-
"expected following output to contain a #{tag_inspect} tag:\n#{@document}"
|
10
|
-
end
|
11
|
-
|
12
|
-
# ==== Returns
|
13
|
-
# String:: The failure message to be displayed in negative matches.
|
14
|
-
def negative_failure_message
|
15
|
-
"expected following output to omit a #{tag_inspect}:\n#{@document}"
|
16
|
-
end
|
17
|
-
|
18
|
-
def tag_inspect
|
19
|
-
options = @expected.last.dup
|
20
|
-
content = options.delete(:content)
|
21
|
-
|
22
|
-
html = "<#{@expected.first}"
|
23
|
-
options.each do |k,v|
|
24
|
-
html << " #{k}='#{v}'"
|
25
|
-
end
|
26
|
-
|
27
|
-
if content
|
28
|
-
html << ">#{content}</#{@expected.first}>"
|
29
|
-
else
|
30
|
-
html << "/>"
|
31
|
-
end
|
32
|
-
|
33
|
-
html
|
34
|
-
end
|
35
|
-
|
36
|
-
def query
|
37
|
-
options = @expected.last.dup
|
38
|
-
selector = @expected.first.to_s
|
39
|
-
|
40
|
-
selector << ":contains('#{options.delete(:content)}')" if options[:content]
|
41
|
-
|
42
|
-
options.each do |key, value|
|
43
|
-
selector << "[#{key}='#{value}']"
|
44
|
-
end
|
45
|
-
|
46
|
-
Nokogiri::CSS.parse(selector).map { |ast| ast.to_xpath }
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
def have_tag(name, attributes = {}, &block)
|
51
|
-
HaveTag.new([name, attributes], &block)
|
52
|
-
end
|
53
|
-
|
54
|
-
alias_method :match_tag, :have_tag
|
55
|
-
|
56
|
-
# Asserts that the body of the response contains
|
57
|
-
# the supplied tag with the associated selectors
|
58
|
-
def assert_have_tag(name, attributes = {})
|
59
|
-
ht = HaveTag.new([name, attributes])
|
60
|
-
assert ht.matches?(response), ht.failure_message
|
61
|
-
end
|
62
|
-
|
63
|
-
# Asserts that the body of the response
|
64
|
-
# does not contain the supplied string or regepx
|
65
|
-
def assert_have_no_tag(name, attributes = {})
|
66
|
-
ht = HaveTag.new([name, attributes])
|
67
|
-
assert !ht.matches?(response), ht.negative_failure_message
|
68
|
-
end
|
69
|
-
|
70
|
-
end
|
71
|
-
end
|
72
|
-
end
|
1
|
+
module Webrat
|
2
|
+
module Selenium
|
3
|
+
module Matchers
|
4
|
+
|
5
|
+
class HaveTag < HaveSelector #:nodoc:
|
6
|
+
# ==== Returns
|
7
|
+
# String:: The failure message.
|
8
|
+
def failure_message
|
9
|
+
"expected following output to contain a #{tag_inspect} tag:\n#{@document}"
|
10
|
+
end
|
11
|
+
|
12
|
+
# ==== Returns
|
13
|
+
# String:: The failure message to be displayed in negative matches.
|
14
|
+
def negative_failure_message
|
15
|
+
"expected following output to omit a #{tag_inspect}:\n#{@document}"
|
16
|
+
end
|
17
|
+
|
18
|
+
def tag_inspect
|
19
|
+
options = @expected.last.dup
|
20
|
+
content = options.delete(:content)
|
21
|
+
|
22
|
+
html = "<#{@expected.first}"
|
23
|
+
options.each do |k,v|
|
24
|
+
html << " #{k}='#{v}'"
|
25
|
+
end
|
26
|
+
|
27
|
+
if content
|
28
|
+
html << ">#{content}</#{@expected.first}>"
|
29
|
+
else
|
30
|
+
html << "/>"
|
31
|
+
end
|
32
|
+
|
33
|
+
html
|
34
|
+
end
|
35
|
+
|
36
|
+
def query
|
37
|
+
options = @expected.last.dup
|
38
|
+
selector = @expected.first.to_s
|
39
|
+
|
40
|
+
selector << ":contains('#{options.delete(:content)}')" if options[:content]
|
41
|
+
|
42
|
+
options.each do |key, value|
|
43
|
+
selector << "[#{key}='#{value}']"
|
44
|
+
end
|
45
|
+
|
46
|
+
Nokogiri::CSS.parse(selector).map { |ast| ast.to_xpath }
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def have_tag(name, attributes = {}, &block)
|
51
|
+
HaveTag.new([name, attributes], &block)
|
52
|
+
end
|
53
|
+
|
54
|
+
alias_method :match_tag, :have_tag
|
55
|
+
|
56
|
+
# Asserts that the body of the response contains
|
57
|
+
# the supplied tag with the associated selectors
|
58
|
+
def assert_have_tag(name, attributes = {})
|
59
|
+
ht = HaveTag.new([name, attributes])
|
60
|
+
assert ht.matches?(response), ht.failure_message
|
61
|
+
end
|
62
|
+
|
63
|
+
# Asserts that the body of the response
|
64
|
+
# does not contain the supplied string or regepx
|
65
|
+
def assert_have_no_tag(name, attributes = {})
|
66
|
+
ht = HaveTag.new([name, attributes])
|
67
|
+
assert !ht.matches?(response), ht.negative_failure_message
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
@@ -1,45 +1,45 @@
|
|
1
|
-
module Webrat
|
2
|
-
module Selenium
|
3
|
-
module Matchers
|
4
|
-
class HaveXpath
|
5
|
-
def initialize(expected)
|
6
|
-
@expected = expected
|
7
|
-
end
|
8
|
-
|
9
|
-
def matches?(response)
|
10
|
-
response.session.wait_for do
|
11
|
-
response.selenium.is_element_present("xpath=#{@expected}")
|
12
|
-
end
|
13
|
-
rescue Webrat::TimeoutError
|
14
|
-
false
|
15
|
-
end
|
16
|
-
|
17
|
-
# ==== Returns
|
18
|
-
# String:: The failure message.
|
19
|
-
def failure_message
|
20
|
-
"expected following text to match xpath #{@expected}:\n#{@document}"
|
21
|
-
end
|
22
|
-
|
23
|
-
# ==== Returns
|
24
|
-
# String:: The failure message to be displayed in negative matches.
|
25
|
-
def negative_failure_message
|
26
|
-
"expected following text to not match xpath #{@expected}:\n#{@document}"
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
def have_xpath(xpath)
|
31
|
-
HaveXpath.new(xpath)
|
32
|
-
end
|
33
|
-
|
34
|
-
def assert_have_xpath(expected)
|
35
|
-
hs = HaveXpath.new(expected)
|
36
|
-
assert hs.matches?(response), hs.failure_message
|
37
|
-
end
|
38
|
-
|
39
|
-
def assert_have_no_xpath(expected)
|
40
|
-
hs = HaveXpath.new(expected)
|
41
|
-
assert !hs.matches?(response), hs.negative_failure_message
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
1
|
+
module Webrat
|
2
|
+
module Selenium
|
3
|
+
module Matchers
|
4
|
+
class HaveXpath
|
5
|
+
def initialize(expected)
|
6
|
+
@expected = expected
|
7
|
+
end
|
8
|
+
|
9
|
+
def matches?(response)
|
10
|
+
response.session.wait_for do
|
11
|
+
response.selenium.is_element_present("xpath=#{@expected}")
|
12
|
+
end
|
13
|
+
rescue Webrat::TimeoutError
|
14
|
+
false
|
15
|
+
end
|
16
|
+
|
17
|
+
# ==== Returns
|
18
|
+
# String:: The failure message.
|
19
|
+
def failure_message
|
20
|
+
"expected following text to match xpath #{@expected}:\n#{@document}"
|
21
|
+
end
|
22
|
+
|
23
|
+
# ==== Returns
|
24
|
+
# String:: The failure message to be displayed in negative matches.
|
25
|
+
def negative_failure_message
|
26
|
+
"expected following text to not match xpath #{@expected}:\n#{@document}"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def have_xpath(xpath)
|
31
|
+
HaveXpath.new(xpath)
|
32
|
+
end
|
33
|
+
|
34
|
+
def assert_have_xpath(expected)
|
35
|
+
hs = HaveXpath.new(expected)
|
36
|
+
assert hs.matches?(response), hs.failure_message
|
37
|
+
end
|
38
|
+
|
39
|
+
def assert_have_no_xpath(expected)
|
40
|
+
hs = HaveXpath.new(expected)
|
41
|
+
assert !hs.matches?(response), hs.negative_failure_message
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require "webrat/selenium/matchers/have_xpath"
|
2
|
-
require "webrat/selenium/matchers/have_selector"
|
3
|
-
# require "webrat/selenium/matchers/have_tag"
|
4
|
-
require "webrat/selenium/matchers/have_content"
|
1
|
+
require "webrat/selenium/matchers/have_xpath"
|
2
|
+
require "webrat/selenium/matchers/have_selector"
|
3
|
+
# require "webrat/selenium/matchers/have_tag"
|
4
|
+
require "webrat/selenium/matchers/have_content"
|
@@ -1,6 +1,6 @@
|
|
1
|
-
PatternMatcher.strategies['evalregex'] = function(regexpString) {
|
2
|
-
this.regexp = eval(regexpString);
|
3
|
-
this.matches = function(actual) {
|
4
|
-
return this.regexp.test(actual);
|
5
|
-
};
|
1
|
+
PatternMatcher.strategies['evalregex'] = function(regexpString) {
|
2
|
+
this.regexp = eval(regexpString);
|
3
|
+
this.matches = function(actual) {
|
4
|
+
return this.regexp.test(actual);
|
5
|
+
};
|
6
6
|
};
|
@@ -1,86 +1,86 @@
|
|
1
|
-
module Webrat
|
2
|
-
module Selenium
|
3
|
-
|
4
|
-
class SeleniumRCServer
|
5
|
-
|
6
|
-
include Webrat::Selenium::SilenceStream
|
7
|
-
|
8
|
-
def self.boot
|
9
|
-
new.boot
|
10
|
-
end
|
11
|
-
|
12
|
-
def boot
|
13
|
-
return if selenium_grid?
|
14
|
-
|
15
|
-
start
|
16
|
-
wait
|
17
|
-
stop_at_exit
|
18
|
-
end
|
19
|
-
|
20
|
-
def start
|
21
|
-
silence_stream(STDOUT) do
|
22
|
-
remote_control.start :background => true
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
def stop_at_exit
|
27
|
-
at_exit do
|
28
|
-
stop
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
def remote_control
|
33
|
-
return @remote_control if @remote_control
|
34
|
-
|
35
|
-
@remote_control = ::Selenium::RemoteControl::RemoteControl.new("
|
36
|
-
Webrat.configuration.selenium_server_port,
|
37
|
-
:timeout => Webrat.configuration.selenium_browser_startup_timeout)
|
38
|
-
@remote_control.jar_file = jar_path
|
39
|
-
|
40
|
-
return @remote_control
|
41
|
-
end
|
42
|
-
|
43
|
-
def jar_path
|
44
|
-
File.expand_path(__FILE__ + "../../../../../vendor/selenium-server.jar")
|
45
|
-
end
|
46
|
-
|
47
|
-
def selenium_grid?
|
48
|
-
Webrat.configuration.selenium_server_address
|
49
|
-
end
|
50
|
-
|
51
|
-
def wait
|
52
|
-
$stderr.print "==> Waiting for Selenium RC server on port #{Webrat.configuration.selenium_server_port}... "
|
53
|
-
wait_for_socket
|
54
|
-
$stderr.print "Ready!\n"
|
55
|
-
rescue SocketError
|
56
|
-
fail
|
57
|
-
end
|
58
|
-
|
59
|
-
def wait_for_socket
|
60
|
-
silence_stream(STDOUT) do
|
61
|
-
TCPSocket.wait_for_service_with_timeout \
|
62
|
-
:host => (Webrat.configuration.selenium_server_address || "
|
63
|
-
:port => Webrat.configuration.selenium_server_port,
|
64
|
-
:timeout => 15 # seconds
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
def fail
|
69
|
-
$stderr.puts
|
70
|
-
$stderr.puts
|
71
|
-
$stderr.puts "==> Failed to boot the Selenium RC server... exiting!"
|
72
|
-
exit
|
73
|
-
end
|
74
|
-
|
75
|
-
def stop
|
76
|
-
silence_stream(STDOUT) do
|
77
|
-
::Selenium::RemoteControl::RemoteControl.new("
|
78
|
-
Webrat.configuration.selenium_server_port,
|
79
|
-
:timeout => 5).stop
|
80
|
-
end
|
81
|
-
end
|
82
|
-
|
83
|
-
end
|
84
|
-
|
85
|
-
end
|
86
|
-
end
|
1
|
+
module Webrat
|
2
|
+
module Selenium
|
3
|
+
|
4
|
+
class SeleniumRCServer
|
5
|
+
|
6
|
+
include Webrat::Selenium::SilenceStream
|
7
|
+
|
8
|
+
def self.boot
|
9
|
+
new.boot
|
10
|
+
end
|
11
|
+
|
12
|
+
def boot
|
13
|
+
return if selenium_grid?
|
14
|
+
|
15
|
+
start
|
16
|
+
wait
|
17
|
+
stop_at_exit
|
18
|
+
end
|
19
|
+
|
20
|
+
def start
|
21
|
+
silence_stream(STDOUT) do
|
22
|
+
remote_control.start :background => true
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def stop_at_exit
|
27
|
+
at_exit do
|
28
|
+
stop
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def remote_control
|
33
|
+
return @remote_control if @remote_control
|
34
|
+
|
35
|
+
@remote_control = ::Selenium::RemoteControl::RemoteControl.new("0.0.0.0",
|
36
|
+
Webrat.configuration.selenium_server_port,
|
37
|
+
:timeout => Webrat.configuration.selenium_browser_startup_timeout)
|
38
|
+
@remote_control.jar_file = jar_path
|
39
|
+
|
40
|
+
return @remote_control
|
41
|
+
end
|
42
|
+
|
43
|
+
def jar_path
|
44
|
+
File.expand_path(__FILE__ + "../../../../../vendor/selenium-server.jar")
|
45
|
+
end
|
46
|
+
|
47
|
+
def selenium_grid?
|
48
|
+
Webrat.configuration.selenium_server_address
|
49
|
+
end
|
50
|
+
|
51
|
+
def wait
|
52
|
+
$stderr.print "==> Waiting for Selenium RC server on port #{Webrat.configuration.selenium_server_port}... "
|
53
|
+
wait_for_socket
|
54
|
+
$stderr.print "Ready!\n"
|
55
|
+
rescue SocketError
|
56
|
+
fail
|
57
|
+
end
|
58
|
+
|
59
|
+
def wait_for_socket
|
60
|
+
silence_stream(STDOUT) do
|
61
|
+
TCPSocket.wait_for_service_with_timeout \
|
62
|
+
:host => (Webrat.configuration.selenium_server_address || "0.0.0.0"),
|
63
|
+
:port => Webrat.configuration.selenium_server_port,
|
64
|
+
:timeout => 15 # seconds
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
def fail
|
69
|
+
$stderr.puts
|
70
|
+
$stderr.puts
|
71
|
+
$stderr.puts "==> Failed to boot the Selenium RC server... exiting!"
|
72
|
+
exit
|
73
|
+
end
|
74
|
+
|
75
|
+
def stop
|
76
|
+
silence_stream(STDOUT) do
|
77
|
+
::Selenium::RemoteControl::RemoteControl.new("0.0.0.0",
|
78
|
+
Webrat.configuration.selenium_server_port,
|
79
|
+
:timeout => 5).stop
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
end
|
84
|
+
|
85
|
+
end
|
86
|
+
end
|