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,26 +1,26 @@
|
|
1
|
-
require "webrat/selenium/application_servers/base"
|
2
|
-
|
3
|
-
module Webrat
|
4
|
-
module Selenium
|
5
|
-
module ApplicationServers
|
6
|
-
class External < Webrat::Selenium::ApplicationServers::Base
|
7
|
-
def start
|
8
|
-
warn "Webrat Ignoring Start Of Application Server Due to External Mode"
|
9
|
-
end
|
10
|
-
|
11
|
-
def stop
|
12
|
-
end
|
13
|
-
|
14
|
-
def fail
|
15
|
-
end
|
16
|
-
|
17
|
-
def pid_file
|
18
|
-
end
|
19
|
-
|
20
|
-
def wait
|
21
|
-
end
|
22
|
-
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
1
|
+
require "webrat/selenium/application_servers/base"
|
2
|
+
|
3
|
+
module Webrat
|
4
|
+
module Selenium
|
5
|
+
module ApplicationServers
|
6
|
+
class External < Webrat::Selenium::ApplicationServers::Base
|
7
|
+
def start
|
8
|
+
warn "Webrat Ignoring Start Of Application Server Due to External Mode"
|
9
|
+
end
|
10
|
+
|
11
|
+
def stop
|
12
|
+
end
|
13
|
+
|
14
|
+
def fail
|
15
|
+
end
|
16
|
+
|
17
|
+
def pid_file
|
18
|
+
end
|
19
|
+
|
20
|
+
def wait
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -1,50 +1,50 @@
|
|
1
|
-
require "webrat/selenium/application_servers/base"
|
2
|
-
|
3
|
-
module Webrat
|
4
|
-
module Selenium
|
5
|
-
module ApplicationServers
|
6
|
-
class Merb < Webrat::Selenium::ApplicationServers::Base
|
7
|
-
|
8
|
-
def start
|
9
|
-
system start_command
|
10
|
-
end
|
11
|
-
|
12
|
-
def stop
|
13
|
-
silence_stream(STDOUT) do
|
14
|
-
pid = File.read(pid_file)
|
15
|
-
system("kill -9 #{pid}")
|
16
|
-
FileUtils.rm_f pid_file
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
def fail
|
21
|
-
$stderr.puts
|
22
|
-
$stderr.puts
|
23
|
-
$stderr.puts "==> Failed to boot the Merb application server... exiting!"
|
24
|
-
$stderr.puts
|
25
|
-
$stderr.puts "Verify you can start a Merb server on port #{Webrat.configuration.application_port} with the following command:"
|
26
|
-
$stderr.puts
|
27
|
-
$stderr.puts " #{start_command}"
|
28
|
-
exit
|
29
|
-
end
|
30
|
-
|
31
|
-
def pid_file
|
32
|
-
"log/merb.#{Webrat.configuration.application_port}.pid"
|
33
|
-
end
|
34
|
-
|
35
|
-
def start_command
|
36
|
-
"#{merb_command} -d -p #{Webrat.configuration.application_port} -e #{Webrat.configuration.application_environment}"
|
37
|
-
end
|
38
|
-
|
39
|
-
def merb_command
|
40
|
-
if File.exist?('bin/merb')
|
41
|
-
merb_cmd = 'bin/merb'
|
42
|
-
else
|
43
|
-
merb_cmd = 'merb'
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
1
|
+
require "webrat/selenium/application_servers/base"
|
2
|
+
|
3
|
+
module Webrat
|
4
|
+
module Selenium
|
5
|
+
module ApplicationServers
|
6
|
+
class Merb < Webrat::Selenium::ApplicationServers::Base
|
7
|
+
|
8
|
+
def start
|
9
|
+
system start_command
|
10
|
+
end
|
11
|
+
|
12
|
+
def stop
|
13
|
+
silence_stream(STDOUT) do
|
14
|
+
pid = File.read(pid_file)
|
15
|
+
system("kill -9 #{pid}")
|
16
|
+
FileUtils.rm_f pid_file
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def fail
|
21
|
+
$stderr.puts
|
22
|
+
$stderr.puts
|
23
|
+
$stderr.puts "==> Failed to boot the Merb application server... exiting!"
|
24
|
+
$stderr.puts
|
25
|
+
$stderr.puts "Verify you can start a Merb server on port #{Webrat.configuration.application_port} with the following command:"
|
26
|
+
$stderr.puts
|
27
|
+
$stderr.puts " #{start_command}"
|
28
|
+
exit
|
29
|
+
end
|
30
|
+
|
31
|
+
def pid_file
|
32
|
+
"log/merb.#{Webrat.configuration.application_port}.pid"
|
33
|
+
end
|
34
|
+
|
35
|
+
def start_command
|
36
|
+
"#{merb_command} -d -p #{Webrat.configuration.application_port} -e #{Webrat.configuration.application_environment}"
|
37
|
+
end
|
38
|
+
|
39
|
+
def merb_command
|
40
|
+
if File.exist?('bin/merb')
|
41
|
+
merb_cmd = 'bin/merb'
|
42
|
+
else
|
43
|
+
merb_cmd = 'merb'
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -6,11 +6,7 @@ module Webrat
|
|
6
6
|
class Rails < Webrat::Selenium::ApplicationServers::Base
|
7
7
|
|
8
8
|
def start
|
9
|
-
|
10
|
-
@shell.run remove_service, {:background => true }
|
11
|
-
@shell.run install_service, {:background => false }
|
12
|
-
end
|
13
|
-
@shell.run start_command, {:background => true}
|
9
|
+
@shell.run start_command, {:background => true}
|
14
10
|
end
|
15
11
|
|
16
12
|
def stop
|
@@ -47,9 +43,10 @@ module Webrat
|
|
47
43
|
|
48
44
|
def start_command
|
49
45
|
if windows?
|
46
|
+
@shell.run install_service, {:background => false }
|
50
47
|
"net start testapp"
|
51
48
|
else
|
52
|
-
"mongrel_rails start -d --chdir='#{RAILS_ROOT}' --port=#{Webrat.configuration.application_port} --environment=#{Webrat.configuration.application_environment} --pid #{pid_file}"
|
49
|
+
"mongrel_rails start -d --chdir='#{RAILS_ROOT}' --port=#{Webrat.configuration.application_port} --environment=#{Webrat.configuration.application_environment} --pid #{pid_file} &"
|
53
50
|
end
|
54
51
|
end
|
55
52
|
|
@@ -1,37 +1,37 @@
|
|
1
|
-
require "webrat/selenium/application_servers/base"
|
2
|
-
|
3
|
-
module Webrat
|
4
|
-
module Selenium
|
5
|
-
module ApplicationServers
|
6
|
-
class Sinatra < Webrat::Selenium::ApplicationServers::Base
|
7
|
-
|
8
|
-
def start
|
9
|
-
fork do
|
10
|
-
File.open('rack.pid', 'w') { |fp| fp.write Process.pid }
|
11
|
-
exec 'rackup', File.expand_path(Dir.pwd + '/config.ru'), '-p', Webrat.configuration.application_port.to_s
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
def stop
|
16
|
-
silence_stream(STDOUT) do
|
17
|
-
pid = File.read(pid_file)
|
18
|
-
system("kill -9 #{pid}")
|
19
|
-
FileUtils.rm_f pid_file
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
def fail
|
24
|
-
$stderr.puts
|
25
|
-
$stderr.puts
|
26
|
-
$stderr.puts "==> Failed to boot the Sinatra application server... exiting!"
|
27
|
-
exit
|
28
|
-
end
|
29
|
-
|
30
|
-
def pid_file
|
31
|
-
prepare_pid_file(Dir.pwd, 'rack.pid')
|
32
|
-
end
|
33
|
-
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
1
|
+
require "webrat/selenium/application_servers/base"
|
2
|
+
|
3
|
+
module Webrat
|
4
|
+
module Selenium
|
5
|
+
module ApplicationServers
|
6
|
+
class Sinatra < Webrat::Selenium::ApplicationServers::Base
|
7
|
+
|
8
|
+
def start
|
9
|
+
fork do
|
10
|
+
File.open('rack.pid', 'w') { |fp| fp.write Process.pid }
|
11
|
+
exec 'rackup', File.expand_path(Dir.pwd + '/config.ru'), '-p', Webrat.configuration.application_port.to_s
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def stop
|
16
|
+
silence_stream(STDOUT) do
|
17
|
+
pid = File.read(pid_file)
|
18
|
+
system("kill -9 #{pid}")
|
19
|
+
FileUtils.rm_f pid_file
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def fail
|
24
|
+
$stderr.puts
|
25
|
+
$stderr.puts
|
26
|
+
$stderr.puts "==> Failed to boot the Sinatra application server... exiting!"
|
27
|
+
exit
|
28
|
+
end
|
29
|
+
|
30
|
+
def pid_file
|
31
|
+
prepare_pid_file(Dir.pwd, 'rack.pid')
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -1,5 +1,5 @@
|
|
1
|
-
require "webrat/selenium/application_servers/base"
|
2
|
-
require "webrat/selenium/application_servers/sinatra"
|
3
|
-
require "webrat/selenium/application_servers/merb"
|
4
|
-
require "webrat/selenium/application_servers/rails"
|
5
|
-
require "webrat/selenium/application_servers/external"
|
1
|
+
require "webrat/selenium/application_servers/base"
|
2
|
+
require "webrat/selenium/application_servers/sinatra"
|
3
|
+
require "webrat/selenium/application_servers/merb"
|
4
|
+
require "webrat/selenium/application_servers/rails"
|
5
|
+
require "webrat/selenium/application_servers/external"
|
@@ -1,19 +1,19 @@
|
|
1
|
-
if (locator == '*') {
|
2
|
-
return selenium.browserbot.locationStrategies['xpath'].call(this, "//input[@type='submit']", inDocument, inWindow)
|
3
|
-
}
|
4
|
-
var buttons = inDocument.getElementsByTagName('button');
|
5
|
-
var inputs = inDocument.getElementsByTagName('input');
|
6
|
-
var result = $A(inputs).concat($A(buttons)).find(function(candidate){
|
7
|
-
var type = candidate.getAttribute('type');
|
8
|
-
if (type == 'submit' || type == 'image' || type == 'button') {
|
9
|
-
var matches_id = PatternMatcher.matches(locator, candidate.id);
|
10
|
-
var matches_value = PatternMatcher.matches(locator, candidate.value);
|
11
|
-
var matches_html = PatternMatcher.matches(locator, candidate.innerHTML);
|
12
|
-
var matches_alt = PatternMatcher.matches(locator, candidate.alt);
|
13
|
-
if (matches_id || matches_value || matches_html || matches_alt) {
|
14
|
-
return true;
|
15
|
-
}
|
16
|
-
}
|
17
|
-
return false;
|
18
|
-
});
|
19
|
-
return result;
|
1
|
+
if (locator == '*') {
|
2
|
+
return selenium.browserbot.locationStrategies['xpath'].call(this, "//input[@type='submit']", inDocument, inWindow)
|
3
|
+
}
|
4
|
+
var buttons = inDocument.getElementsByTagName('button');
|
5
|
+
var inputs = inDocument.getElementsByTagName('input');
|
6
|
+
var result = $A(inputs).concat($A(buttons)).find(function(candidate){
|
7
|
+
var type = candidate.getAttribute('type');
|
8
|
+
if (type == 'submit' || type == 'image' || type == 'button') {
|
9
|
+
var matches_id = PatternMatcher.matches(locator, candidate.id);
|
10
|
+
var matches_value = PatternMatcher.matches(locator, candidate.value);
|
11
|
+
var matches_html = PatternMatcher.matches(locator, candidate.innerHTML);
|
12
|
+
var matches_alt = PatternMatcher.matches(locator, candidate.alt);
|
13
|
+
if (matches_id || matches_value || matches_html || matches_alt) {
|
14
|
+
return true;
|
15
|
+
}
|
16
|
+
}
|
17
|
+
return false;
|
18
|
+
});
|
19
|
+
return result;
|
@@ -1,42 +1,42 @@
|
|
1
|
-
// Credit to: http://simonwillison.net/2006/Jan/20/escape/
|
2
|
-
RegExp.escape = function(text) {
|
3
|
-
if (!arguments.callee.sRE) {
|
4
|
-
var specials = [
|
5
|
-
'/', '.', '*', '+', '?', '|',
|
6
|
-
'(', ')', '[', ']', '{', '}', '\\'
|
7
|
-
];
|
8
|
-
arguments.callee.sRE = new RegExp(
|
9
|
-
'(\\' + specials.join('|\\') + ')', 'g'
|
10
|
-
);
|
11
|
-
}
|
12
|
-
return text.replace(arguments.callee.sRE, '\\$1');
|
13
|
-
}
|
14
|
-
|
15
|
-
var allLabels = inDocument.getElementsByTagName("label");
|
16
|
-
var regExp = new RegExp('^\\W*' + RegExp.escape(locator) + '(\\b|$)', 'i');
|
17
|
-
|
18
|
-
var candidateLabels = $A(allLabels).select(function(candidateLabel){
|
19
|
-
var labelText = getText(candidateLabel).strip();
|
20
|
-
return (labelText.search(regExp) >= 0);
|
21
|
-
});
|
22
|
-
|
23
|
-
if (candidateLabels.length == 0) {
|
24
|
-
return null;
|
25
|
-
}
|
26
|
-
|
27
|
-
//reverse length sort
|
28
|
-
candidateLabels = candidateLabels.sortBy(function(s) {
|
29
|
-
return s.length * -1;
|
30
|
-
});
|
31
|
-
|
32
|
-
var locatedLabel = candidateLabels.first();
|
33
|
-
var labelFor = locatedLabel.getAttribute('for');
|
34
|
-
|
35
|
-
if ((labelFor == null) && (locatedLabel.hasChildNodes())) {
|
36
|
-
return locatedLabel.getElementsByTagName('button')[0]
|
37
|
-
|| locatedLabel.getElementsByTagName('input')[0]
|
38
|
-
|| locatedLabel.getElementsByTagName('textarea')[0]
|
39
|
-
|| locatedLabel.getElementsByTagName('select')[0];
|
40
|
-
}
|
41
|
-
|
42
|
-
return selenium.browserbot.locationStrategies['id'].call(this, labelFor, inDocument, inWindow);
|
1
|
+
// Credit to: http://simonwillison.net/2006/Jan/20/escape/
|
2
|
+
RegExp.escape = function(text) {
|
3
|
+
if (!arguments.callee.sRE) {
|
4
|
+
var specials = [
|
5
|
+
'/', '.', '*', '+', '?', '|',
|
6
|
+
'(', ')', '[', ']', '{', '}', '\\'
|
7
|
+
];
|
8
|
+
arguments.callee.sRE = new RegExp(
|
9
|
+
'(\\' + specials.join('|\\') + ')', 'g'
|
10
|
+
);
|
11
|
+
}
|
12
|
+
return text.replace(arguments.callee.sRE, '\\$1');
|
13
|
+
}
|
14
|
+
|
15
|
+
var allLabels = inDocument.getElementsByTagName("label");
|
16
|
+
var regExp = new RegExp('^\\W*' + RegExp.escape(locator) + '(\\b|$)', 'i');
|
17
|
+
|
18
|
+
var candidateLabels = $A(allLabels).select(function(candidateLabel){
|
19
|
+
var labelText = getText(candidateLabel).strip();
|
20
|
+
return (labelText.search(regExp) >= 0);
|
21
|
+
});
|
22
|
+
|
23
|
+
if (candidateLabels.length == 0) {
|
24
|
+
return null;
|
25
|
+
}
|
26
|
+
|
27
|
+
//reverse length sort
|
28
|
+
candidateLabels = candidateLabels.sortBy(function(s) {
|
29
|
+
return s.length * -1;
|
30
|
+
});
|
31
|
+
|
32
|
+
var locatedLabel = candidateLabels.first();
|
33
|
+
var labelFor = locatedLabel.getAttribute('for');
|
34
|
+
|
35
|
+
if ((labelFor == null) && (locatedLabel.hasChildNodes())) {
|
36
|
+
return locatedLabel.getElementsByTagName('button')[0]
|
37
|
+
|| locatedLabel.getElementsByTagName('input')[0]
|
38
|
+
|| locatedLabel.getElementsByTagName('textarea')[0]
|
39
|
+
|| locatedLabel.getElementsByTagName('select')[0];
|
40
|
+
}
|
41
|
+
|
42
|
+
return selenium.browserbot.locationStrategies['id'].call(this, labelFor, inDocument, inWindow);
|
@@ -1,6 +1,6 @@
|
|
1
|
-
var locationStrategies = selenium.browserbot.locationStrategies;
|
2
|
-
|
3
|
-
return locationStrategies['id'].call(this, locator, inDocument, inWindow)
|
4
|
-
|| locationStrategies['name'].call(this, locator, inDocument, inWindow)
|
5
|
-
|| locationStrategies['label'].call(this, locator, inDocument, inWindow)
|
6
|
-
|| null;
|
1
|
+
var locationStrategies = selenium.browserbot.locationStrategies;
|
2
|
+
|
3
|
+
return locationStrategies['id'].call(this, locator, inDocument, inWindow)
|
4
|
+
|| locationStrategies['name'].call(this, locator, inDocument, inWindow)
|
5
|
+
|| locationStrategies['label'].call(this, locator, inDocument, inWindow)
|
6
|
+
|| null;
|
@@ -1,32 +1,32 @@
|
|
1
|
-
var links = inDocument.getElementsByTagName('a');
|
2
|
-
|
3
|
-
var candidateLinks = $A(links).select(function(candidateLink) {
|
4
|
-
var textMatched = false;
|
5
|
-
var titleMatched = false;
|
6
|
-
var idMatched = false;
|
7
|
-
|
8
|
-
if (getText(candidateLink).toLowerCase().indexOf(locator.toLowerCase()) != -1) {
|
9
|
-
textMatched = true;
|
10
|
-
}
|
11
|
-
|
12
|
-
if (candidateLink.title.toLowerCase().indexOf(locator.toLowerCase()) != -1) {
|
13
|
-
titleMatched = true;
|
14
|
-
}
|
15
|
-
|
16
|
-
if (candidateLink.id.toLowerCase().indexOf(locator.toLowerCase()) != -1) {
|
17
|
-
idMatched = true;
|
18
|
-
}
|
19
|
-
|
20
|
-
return textMatched || idMatched || titleMatched;
|
21
|
-
});
|
22
|
-
|
23
|
-
if (candidateLinks.length == 0) {
|
24
|
-
return null;
|
25
|
-
}
|
26
|
-
|
27
|
-
//reverse length sort
|
28
|
-
candidateLinks = candidateLinks.sortBy(function(s) {
|
29
|
-
return s.length * -1;
|
30
|
-
});
|
31
|
-
|
32
|
-
return candidateLinks.first();
|
1
|
+
var links = inDocument.getElementsByTagName('a');
|
2
|
+
|
3
|
+
var candidateLinks = $A(links).select(function(candidateLink) {
|
4
|
+
var textMatched = false;
|
5
|
+
var titleMatched = false;
|
6
|
+
var idMatched = false;
|
7
|
+
|
8
|
+
if (getText(candidateLink).toLowerCase().indexOf(locator.toLowerCase()) != -1) {
|
9
|
+
textMatched = true;
|
10
|
+
}
|
11
|
+
|
12
|
+
if (candidateLink.title.toLowerCase().indexOf(locator.toLowerCase()) != -1) {
|
13
|
+
titleMatched = true;
|
14
|
+
}
|
15
|
+
|
16
|
+
if (candidateLink.id.toLowerCase().indexOf(locator.toLowerCase()) != -1) {
|
17
|
+
idMatched = true;
|
18
|
+
}
|
19
|
+
|
20
|
+
return textMatched || idMatched || titleMatched;
|
21
|
+
});
|
22
|
+
|
23
|
+
if (candidateLinks.length == 0) {
|
24
|
+
return null;
|
25
|
+
}
|
26
|
+
|
27
|
+
//reverse length sort
|
28
|
+
candidateLinks = candidateLinks.sortBy(function(s) {
|
29
|
+
return s.length * -1;
|
30
|
+
});
|
31
|
+
|
32
|
+
return candidateLinks.first();
|
@@ -1,15 +1,15 @@
|
|
1
|
-
var locatorParts = locator.split('|');
|
2
|
-
var cssAncestor = locatorParts[0];
|
3
|
-
var linkText = locatorParts[1];
|
4
|
-
var matchingElements = cssQuery(cssAncestor, inDocument);
|
5
|
-
var candidateLinks = matchingElements.collect(function(ancestor){
|
6
|
-
var links = ancestor.getElementsByTagName('a');
|
7
|
-
return $A(links).select(function(candidateLink) {
|
8
|
-
return PatternMatcher.matches(linkText, getText(candidateLink));
|
9
|
-
});
|
10
|
-
}).flatten().compact();
|
11
|
-
if (candidateLinks.length == 0) {
|
12
|
-
return null;
|
13
|
-
}
|
14
|
-
candidateLinks = candidateLinks.sortBy(function(s) { return s.length * -1; }); //reverse length sort
|
15
|
-
return candidateLinks.first();
|
1
|
+
var locatorParts = locator.split('|');
|
2
|
+
var cssAncestor = locatorParts[0];
|
3
|
+
var linkText = locatorParts[1];
|
4
|
+
var matchingElements = cssQuery(cssAncestor, inDocument);
|
5
|
+
var candidateLinks = matchingElements.collect(function(ancestor){
|
6
|
+
var links = ancestor.getElementsByTagName('a');
|
7
|
+
return $A(links).select(function(candidateLink) {
|
8
|
+
return PatternMatcher.matches(linkText, getText(candidateLink));
|
9
|
+
});
|
10
|
+
}).flatten().compact();
|
11
|
+
if (candidateLinks.length == 0) {
|
12
|
+
return null;
|
13
|
+
}
|
14
|
+
candidateLinks = candidateLinks.sortBy(function(s) { return s.length * -1; }); //reverse length sort
|
15
|
+
return candidateLinks.first();
|
@@ -1,5 +1,5 @@
|
|
1
|
-
var optionElements = inDocument.getElementsByTagName('option');
|
2
|
-
var locatedOption = $A(optionElements).find(function(candidate){
|
3
|
-
return (PatternMatcher.matches(locator, getText(candidate)));
|
4
|
-
});
|
5
|
-
return locatedOption ? locatedOption.parentNode : null;
|
1
|
+
var optionElements = inDocument.getElementsByTagName('option');
|
2
|
+
var locatedOption = $A(optionElements).find(function(candidate){
|
3
|
+
return (PatternMatcher.matches(locator, getText(candidate)));
|
4
|
+
});
|
5
|
+
return locatedOption ? locatedOption.parentNode : null;
|
@@ -1,66 +1,66 @@
|
|
1
|
-
module Webrat
|
2
|
-
module Selenium
|
3
|
-
module Matchers
|
4
|
-
class HasContent #:nodoc:
|
5
|
-
def initialize(content)
|
6
|
-
@content = content
|
7
|
-
end
|
8
|
-
|
9
|
-
def matches?(response)
|
10
|
-
if @content.is_a?(Regexp)
|
11
|
-
text_finder = "regexp:#{@content.source}"
|
12
|
-
else
|
13
|
-
text_finder = @content
|
14
|
-
end
|
15
|
-
|
16
|
-
response.session.wait_for do
|
17
|
-
response.selenium.is_text_present(text_finder)
|
18
|
-
end
|
19
|
-
rescue Webrat::TimeoutError
|
20
|
-
false
|
21
|
-
end
|
22
|
-
|
23
|
-
# ==== Returns
|
24
|
-
# String:: The failure message.
|
25
|
-
def failure_message
|
26
|
-
"expected the following element's content to #{content_message}:\n#{@element}"
|
27
|
-
end
|
28
|
-
|
29
|
-
# ==== Returns
|
30
|
-
# String:: The failure message to be displayed in negative matches.
|
31
|
-
def negative_failure_message
|
32
|
-
"expected the following element's content to not #{content_message}:\n#{@element}"
|
33
|
-
end
|
34
|
-
|
35
|
-
def content_message
|
36
|
-
case @content
|
37
|
-
when String
|
38
|
-
"include \"#{@content}\""
|
39
|
-
when Regexp
|
40
|
-
"match #{@content.inspect}"
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
# Matches the contents of an HTML document with
|
46
|
-
# whatever string is supplied
|
47
|
-
def contain(content)
|
48
|
-
HasContent.new(content)
|
49
|
-
end
|
50
|
-
|
51
|
-
# Asserts that the body of the response contain
|
52
|
-
# the supplied string or regexp
|
53
|
-
def assert_contain(content)
|
54
|
-
hc = HasContent.new(content)
|
55
|
-
assert hc.matches?(response), hc.failure_message
|
56
|
-
end
|
57
|
-
|
58
|
-
# Asserts that the body of the response
|
59
|
-
# does not contain the supplied string or regepx
|
60
|
-
def assert_not_contain(content)
|
61
|
-
hc = HasContent.new(content)
|
62
|
-
assert !hc.matches?(response), hc.negative_failure_message
|
63
|
-
end
|
64
|
-
end
|
65
|
-
end
|
66
|
-
end
|
1
|
+
module Webrat
|
2
|
+
module Selenium
|
3
|
+
module Matchers
|
4
|
+
class HasContent #:nodoc:
|
5
|
+
def initialize(content)
|
6
|
+
@content = content
|
7
|
+
end
|
8
|
+
|
9
|
+
def matches?(response)
|
10
|
+
if @content.is_a?(Regexp)
|
11
|
+
text_finder = "regexp:#{@content.source}"
|
12
|
+
else
|
13
|
+
text_finder = @content
|
14
|
+
end
|
15
|
+
|
16
|
+
response.session.wait_for do
|
17
|
+
response.selenium.is_text_present(text_finder)
|
18
|
+
end
|
19
|
+
rescue Webrat::TimeoutError
|
20
|
+
false
|
21
|
+
end
|
22
|
+
|
23
|
+
# ==== Returns
|
24
|
+
# String:: The failure message.
|
25
|
+
def failure_message
|
26
|
+
"expected the following element's content to #{content_message}:\n#{@element}"
|
27
|
+
end
|
28
|
+
|
29
|
+
# ==== Returns
|
30
|
+
# String:: The failure message to be displayed in negative matches.
|
31
|
+
def negative_failure_message
|
32
|
+
"expected the following element's content to not #{content_message}:\n#{@element}"
|
33
|
+
end
|
34
|
+
|
35
|
+
def content_message
|
36
|
+
case @content
|
37
|
+
when String
|
38
|
+
"include \"#{@content}\""
|
39
|
+
when Regexp
|
40
|
+
"match #{@content.inspect}"
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
# Matches the contents of an HTML document with
|
46
|
+
# whatever string is supplied
|
47
|
+
def contain(content)
|
48
|
+
HasContent.new(content)
|
49
|
+
end
|
50
|
+
|
51
|
+
# Asserts that the body of the response contain
|
52
|
+
# the supplied string or regexp
|
53
|
+
def assert_contain(content)
|
54
|
+
hc = HasContent.new(content)
|
55
|
+
assert hc.matches?(response), hc.failure_message
|
56
|
+
end
|
57
|
+
|
58
|
+
# Asserts that the body of the response
|
59
|
+
# does not contain the supplied string or regepx
|
60
|
+
def assert_not_contain(content)
|
61
|
+
hc = HasContent.new(content)
|
62
|
+
assert !hc.matches?(response), hc.negative_failure_message
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|