raldred-webrat 0.4.4.2

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.
Files changed (160) hide show
  1. data/History.txt +346 -0
  2. data/MIT-LICENSE.txt +19 -0
  3. data/README.rdoc +85 -0
  4. data/Rakefile +168 -0
  5. data/install.rb +1 -0
  6. data/lib/webrat.rb +31 -0
  7. data/lib/webrat/core.rb +14 -0
  8. data/lib/webrat/core/configuration.rb +102 -0
  9. data/lib/webrat/core/elements/area.rb +31 -0
  10. data/lib/webrat/core/elements/element.rb +33 -0
  11. data/lib/webrat/core/elements/field.rb +405 -0
  12. data/lib/webrat/core/elements/form.rb +103 -0
  13. data/lib/webrat/core/elements/label.rb +31 -0
  14. data/lib/webrat/core/elements/link.rb +92 -0
  15. data/lib/webrat/core/elements/select_option.rb +35 -0
  16. data/lib/webrat/core/locators.rb +20 -0
  17. data/lib/webrat/core/locators/area_locator.rb +38 -0
  18. data/lib/webrat/core/locators/button_locator.rb +54 -0
  19. data/lib/webrat/core/locators/field_by_id_locator.rb +37 -0
  20. data/lib/webrat/core/locators/field_labeled_locator.rb +56 -0
  21. data/lib/webrat/core/locators/field_locator.rb +25 -0
  22. data/lib/webrat/core/locators/field_named_locator.rb +41 -0
  23. data/lib/webrat/core/locators/form_locator.rb +19 -0
  24. data/lib/webrat/core/locators/label_locator.rb +34 -0
  25. data/lib/webrat/core/locators/link_locator.rb +75 -0
  26. data/lib/webrat/core/locators/locator.rb +20 -0
  27. data/lib/webrat/core/locators/select_option_locator.rb +59 -0
  28. data/lib/webrat/core/logging.rb +24 -0
  29. data/lib/webrat/core/matchers.rb +4 -0
  30. data/lib/webrat/core/matchers/have_content.rb +73 -0
  31. data/lib/webrat/core/matchers/have_selector.rb +74 -0
  32. data/lib/webrat/core/matchers/have_tag.rb +21 -0
  33. data/lib/webrat/core/matchers/have_xpath.rb +147 -0
  34. data/lib/webrat/core/methods.rb +63 -0
  35. data/lib/webrat/core/mime.rb +29 -0
  36. data/lib/webrat/core/save_and_open_page.rb +50 -0
  37. data/lib/webrat/core/scope.rb +350 -0
  38. data/lib/webrat/core/session.rb +289 -0
  39. data/lib/webrat/core/xml.rb +115 -0
  40. data/lib/webrat/core/xml/hpricot.rb +19 -0
  41. data/lib/webrat/core/xml/nokogiri.rb +76 -0
  42. data/lib/webrat/core/xml/rexml.rb +24 -0
  43. data/lib/webrat/core_extensions/blank.rb +58 -0
  44. data/lib/webrat/core_extensions/deprecate.rb +8 -0
  45. data/lib/webrat/core_extensions/detect_mapped.rb +12 -0
  46. data/lib/webrat/core_extensions/meta_class.rb +6 -0
  47. data/lib/webrat/core_extensions/nil_to_param.rb +5 -0
  48. data/lib/webrat/core_extensions/tcp_socket.rb +27 -0
  49. data/lib/webrat/mechanize.rb +74 -0
  50. data/lib/webrat/merb.rb +9 -0
  51. data/lib/webrat/merb_session.rb +65 -0
  52. data/lib/webrat/rack.rb +24 -0
  53. data/lib/webrat/rack_test.rb +32 -0
  54. data/lib/webrat/rails.rb +105 -0
  55. data/lib/webrat/rspec-rails.rb +13 -0
  56. data/lib/webrat/selenium.rb +81 -0
  57. data/lib/webrat/selenium/application_server.rb +73 -0
  58. data/lib/webrat/selenium/location_strategy_javascript/button.js +19 -0
  59. data/lib/webrat/selenium/location_strategy_javascript/label.js +15 -0
  60. data/lib/webrat/selenium/location_strategy_javascript/webrat.js +5 -0
  61. data/lib/webrat/selenium/location_strategy_javascript/webratlink.js +12 -0
  62. data/lib/webrat/selenium/location_strategy_javascript/webratlinkwithin.js +15 -0
  63. data/lib/webrat/selenium/location_strategy_javascript/webratselectwithoption.js +5 -0
  64. data/lib/webrat/selenium/matchers.rb +4 -0
  65. data/lib/webrat/selenium/matchers/have_content.rb +66 -0
  66. data/lib/webrat/selenium/matchers/have_selector.rb +49 -0
  67. data/lib/webrat/selenium/matchers/have_tag.rb +72 -0
  68. data/lib/webrat/selenium/matchers/have_xpath.rb +45 -0
  69. data/lib/webrat/selenium/merb_application_server.rb +48 -0
  70. data/lib/webrat/selenium/rails_application_server.rb +42 -0
  71. data/lib/webrat/selenium/selenium_extensions.js +6 -0
  72. data/lib/webrat/selenium/selenium_rc_server.rb +84 -0
  73. data/lib/webrat/selenium/selenium_session.rb +242 -0
  74. data/lib/webrat/selenium/silence_stream.rb +18 -0
  75. data/lib/webrat/selenium/sinatra_application_server.rb +35 -0
  76. data/lib/webrat/sinatra.rb +44 -0
  77. data/spec/fakes/test_session.rb +34 -0
  78. data/spec/integration/merb/app/controllers/application.rb +2 -0
  79. data/spec/integration/merb/app/controllers/exceptions.rb +13 -0
  80. data/spec/integration/merb/app/controllers/testing.rb +18 -0
  81. data/spec/integration/merb/config/environments/development.rb +15 -0
  82. data/spec/integration/merb/config/environments/rake.rb +11 -0
  83. data/spec/integration/merb/config/environments/test.rb +14 -0
  84. data/spec/integration/merb/config/init.rb +25 -0
  85. data/spec/integration/merb/config/rack.rb +11 -0
  86. data/spec/integration/merb/config/router.rb +33 -0
  87. data/spec/integration/merb/spec/spec_helper.rb +24 -0
  88. data/spec/integration/merb/spec/webrat_spec.rb +32 -0
  89. data/spec/integration/merb/tasks/merb.thor/app_script.rb +31 -0
  90. data/spec/integration/merb/tasks/merb.thor/common.rb +64 -0
  91. data/spec/integration/merb/tasks/merb.thor/gem_ext.rb +124 -0
  92. data/spec/integration/merb/tasks/merb.thor/ops.rb +93 -0
  93. data/spec/integration/merb/tasks/merb.thor/utils.rb +40 -0
  94. data/spec/integration/rack/rack_app.rb +16 -0
  95. data/spec/integration/rack/test/test_helper.rb +20 -0
  96. data/spec/integration/rack/test/webrat_rack_test.rb +67 -0
  97. data/spec/integration/rails/app/controllers/application.rb +15 -0
  98. data/spec/integration/rails/app/controllers/buttons_controller.rb +7 -0
  99. data/spec/integration/rails/app/controllers/fields_controller.rb +4 -0
  100. data/spec/integration/rails/app/controllers/links_controller.rb +7 -0
  101. data/spec/integration/rails/app/controllers/webrat_controller.rb +39 -0
  102. data/spec/integration/rails/app/helpers/buttons_helper.rb +2 -0
  103. data/spec/integration/rails/app/helpers/fields_helper.rb +2 -0
  104. data/spec/integration/rails/app/helpers/links_helper.rb +2 -0
  105. data/spec/integration/rails/config/boot.rb +109 -0
  106. data/spec/integration/rails/config/environment.rb +12 -0
  107. data/spec/integration/rails/config/environments/development.rb +17 -0
  108. data/spec/integration/rails/config/environments/selenium.rb +22 -0
  109. data/spec/integration/rails/config/environments/test.rb +22 -0
  110. data/spec/integration/rails/config/initializers/inflections.rb +10 -0
  111. data/spec/integration/rails/config/initializers/mime_types.rb +5 -0
  112. data/spec/integration/rails/config/initializers/new_rails_defaults.rb +17 -0
  113. data/spec/integration/rails/config/routes.rb +17 -0
  114. data/spec/integration/rails/test/integration/button_click_test.rb +80 -0
  115. data/spec/integration/rails/test/integration/fill_in_test.rb +24 -0
  116. data/spec/integration/rails/test/integration/link_click_test.rb +21 -0
  117. data/spec/integration/rails/test/integration/webrat_test.rb +75 -0
  118. data/spec/integration/rails/test/test_helper.rb +25 -0
  119. data/spec/integration/sinatra/classic_app.rb +64 -0
  120. data/spec/integration/sinatra/modular_app.rb +16 -0
  121. data/spec/integration/sinatra/test/classic_app_test.rb +37 -0
  122. data/spec/integration/sinatra/test/modular_app_test.rb +18 -0
  123. data/spec/integration/sinatra/test/test_helper.rb +16 -0
  124. data/spec/private/core/configuration_spec.rb +106 -0
  125. data/spec/private/core/field_spec.rb +85 -0
  126. data/spec/private/core/link_spec.rb +24 -0
  127. data/spec/private/core/logging_spec.rb +10 -0
  128. data/spec/private/core/session_spec.rb +198 -0
  129. data/spec/private/mechanize/mechanize_session_spec.rb +81 -0
  130. data/spec/private/merb/merb_session_spec.rb +42 -0
  131. data/spec/private/nokogiri_spec.rb +77 -0
  132. data/spec/private/rails/attaches_file_spec.rb +81 -0
  133. data/spec/private/rails/rails_session_spec.rb +110 -0
  134. data/spec/public/basic_auth_spec.rb +24 -0
  135. data/spec/public/check_spec.rb +191 -0
  136. data/spec/public/choose_spec.rb +118 -0
  137. data/spec/public/click_area_spec.rb +106 -0
  138. data/spec/public/click_button_spec.rb +496 -0
  139. data/spec/public/click_link_spec.rb +541 -0
  140. data/spec/public/fill_in_spec.rb +209 -0
  141. data/spec/public/locators/field_by_xpath_spec.rb +19 -0
  142. data/spec/public/locators/field_labeled_spec.rb +172 -0
  143. data/spec/public/locators/field_with_id_spec.rb +16 -0
  144. data/spec/public/matchers/contain_spec.rb +114 -0
  145. data/spec/public/matchers/have_selector_spec.rb +142 -0
  146. data/spec/public/matchers/have_tag_spec.rb +39 -0
  147. data/spec/public/matchers/have_xpath_spec.rb +136 -0
  148. data/spec/public/reload_spec.rb +10 -0
  149. data/spec/public/save_and_open_spec.rb +51 -0
  150. data/spec/public/select_date_spec.rb +112 -0
  151. data/spec/public/select_datetime_spec.rb +137 -0
  152. data/spec/public/select_spec.rb +249 -0
  153. data/spec/public/select_time_spec.rb +100 -0
  154. data/spec/public/set_hidden_field_spec.rb +5 -0
  155. data/spec/public/submit_form_spec.rb +5 -0
  156. data/spec/public/visit_spec.rb +58 -0
  157. data/spec/public/within_spec.rb +177 -0
  158. data/spec/spec_helper.rb +50 -0
  159. data/vendor/selenium-server.jar +0 -0
  160. metadata +220 -0
@@ -0,0 +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
@@ -0,0 +1,48 @@
1
+ module Webrat
2
+ module Selenium
3
+
4
+ class MerbApplicationServer < ApplicationServer
5
+
6
+ def start
7
+ system start_command
8
+ end
9
+
10
+ def stop
11
+ silence_stream(STDOUT) do
12
+ pid = File.read(pid_file)
13
+ system("kill -9 #{pid}")
14
+ FileUtils.rm_f pid_file
15
+ end
16
+ end
17
+
18
+ def fail
19
+ $stderr.puts
20
+ $stderr.puts
21
+ $stderr.puts "==> Failed to boot the Merb application server... exiting!"
22
+ $stderr.puts
23
+ $stderr.puts "Verify you can start a Merb server on port #{Webrat.configuration.application_port} with the following command:"
24
+ $stderr.puts
25
+ $stderr.puts " #{start_command}"
26
+ exit
27
+ end
28
+
29
+ def pid_file
30
+ "log/merb.#{Webrat.configuration.application_port}.pid"
31
+ end
32
+
33
+ def start_command
34
+ "#{merb_command} -d -p #{Webrat.configuration.application_port} -e #{Webrat.configuration.application_environment}"
35
+ end
36
+
37
+ def merb_command
38
+ if File.exist?('bin/merb')
39
+ merb_cmd = 'bin/merb'
40
+ else
41
+ merb_cmd = 'merb'
42
+ end
43
+ end
44
+
45
+ end
46
+
47
+ end
48
+ end
@@ -0,0 +1,42 @@
1
+ module Webrat
2
+ module Selenium
3
+
4
+ class RailsApplicationServer < ApplicationServer
5
+
6
+ def start
7
+ system start_command
8
+ end
9
+
10
+ def stop
11
+ silence_stream(STDOUT) do
12
+ system stop_command
13
+ end
14
+ end
15
+
16
+ def fail
17
+ $stderr.puts
18
+ $stderr.puts
19
+ $stderr.puts "==> Failed to boot the Rails application server... exiting!"
20
+ $stderr.puts
21
+ $stderr.puts "Verify you can start a Rails server on port #{Webrat.configuration.application_port} with the following command:"
22
+ $stderr.puts
23
+ $stderr.puts " #{start_command}"
24
+ exit
25
+ end
26
+
27
+ def pid_file
28
+ prepare_pid_file("#{RAILS_ROOT}/tmp/pids", "mongrel_selenium.pid")
29
+ end
30
+
31
+ def start_command
32
+ "mongrel_rails start -d --chdir='#{RAILS_ROOT}' --port=#{Webrat.configuration.application_port} --environment=#{Webrat.configuration.application_environment} --pid #{pid_file} &"
33
+ end
34
+
35
+ def stop_command
36
+ "mongrel_rails stop -c #{RAILS_ROOT} --pid #{pid_file}"
37
+ end
38
+
39
+ end
40
+
41
+ end
42
+ end
@@ -0,0 +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
+ };
6
+ };
@@ -0,0 +1,84 @@
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
+ 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", Webrat.configuration.selenium_server_port, 5).stop
78
+ end
79
+ end
80
+
81
+ end
82
+
83
+ end
84
+ end
@@ -0,0 +1,242 @@
1
+ require "webrat/core/save_and_open_page"
2
+ require "webrat/selenium/selenium_rc_server"
3
+ require "webrat/selenium/application_server"
4
+
5
+ module Webrat
6
+ class TimeoutError < WebratError
7
+ end
8
+
9
+ class SeleniumResponse
10
+ attr_reader :body
11
+ attr_reader :session
12
+
13
+ def initialize(session, body)
14
+ @session = session
15
+ @body = body
16
+ end
17
+
18
+ def selenium
19
+ session.selenium
20
+ end
21
+ end
22
+
23
+ class SeleniumSession
24
+ include Webrat::SaveAndOpenPage
25
+ include Webrat::Selenium::SilenceStream
26
+
27
+ def initialize(*args) # :nodoc:
28
+ end
29
+
30
+ def simulate
31
+ end
32
+
33
+ def automate
34
+ yield
35
+ end
36
+
37
+ def visit(url)
38
+ selenium.open(url)
39
+ end
40
+
41
+ webrat_deprecate :visits, :visit
42
+
43
+ def fill_in(field_identifier, options)
44
+ locator = "webrat=#{field_identifier}"
45
+ selenium.wait_for_element locator, :timeout_in_seconds => 5
46
+ selenium.type(locator, "#{options[:with]}")
47
+ end
48
+
49
+ webrat_deprecate :fills_in, :fill_in
50
+
51
+ def submit_form(id)
52
+ selenium.wait_for_element id, :timeout_in_seconds => 5
53
+ selenium.submit(id)
54
+ end
55
+
56
+ def response
57
+ SeleniumResponse.new(self, response_body)
58
+ end
59
+
60
+ def response_body #:nodoc:
61
+ selenium.get_html_source
62
+ end
63
+
64
+ def current_url
65
+ selenium.location
66
+ end
67
+
68
+ def click_button(button_text_or_regexp = nil, options = {})
69
+ if button_text_or_regexp.is_a?(Hash) && options == {}
70
+ pattern, options = nil, button_text_or_regexp
71
+ elsif button_text_or_regexp
72
+ pattern = adjust_if_regexp(button_text_or_regexp)
73
+ end
74
+ pattern ||= '*'
75
+ locator = "button=#{pattern}"
76
+
77
+ selenium.wait_for_element locator, :timeout_in_seconds => 5
78
+ selenium.click locator
79
+ end
80
+
81
+ webrat_deprecate :clicks_button, :click_button
82
+
83
+ def click_link(link_text_or_regexp, options = {})
84
+ pattern = adjust_if_regexp(link_text_or_regexp)
85
+ locator = "webratlink=#{pattern}"
86
+ selenium.wait_for_element locator, :timeout_in_seconds => 5
87
+ selenium.click locator
88
+ end
89
+
90
+ webrat_deprecate :clicks_link, :click_link
91
+
92
+ def click_link_within(selector, link_text, options = {})
93
+ locator = "webratlinkwithin=#{selector}|#{link_text}"
94
+ selenium.wait_for_element locator, :timeout_in_seconds => 5
95
+ selenium.click locator
96
+ end
97
+
98
+ webrat_deprecate :clicks_link_within, :click_link_within
99
+
100
+ def select(option_text, options = {})
101
+ id_or_name_or_label = options[:from]
102
+
103
+ if id_or_name_or_label
104
+ select_locator = "webrat=#{id_or_name_or_label}"
105
+ else
106
+ select_locator = "webratselectwithoption=#{option_text}"
107
+ end
108
+
109
+ selenium.wait_for_element select_locator, :timeout_in_seconds => 5
110
+ selenium.select(select_locator, option_text)
111
+ end
112
+
113
+ webrat_deprecate :selects, :select
114
+
115
+ def choose(label_text)
116
+ locator = "webrat=#{label_text}"
117
+ selenium.wait_for_element locator, :timeout_in_seconds => 5
118
+ selenium.click locator
119
+ end
120
+
121
+ webrat_deprecate :chooses, :choose
122
+
123
+ def check(label_text)
124
+ locator = "webrat=#{label_text}"
125
+ selenium.wait_for_element locator, :timeout_in_seconds => 5
126
+ selenium.click locator
127
+ end
128
+ alias_method :uncheck, :check
129
+
130
+ webrat_deprecate :checks, :check
131
+
132
+ def fire_event(field_identifier, event)
133
+ locator = "webrat=#{Regexp.escape(field_identifier)}"
134
+ selenium.fire_event(locator, "#{event}")
135
+ end
136
+
137
+ def key_down(field_identifier, key_code)
138
+ locator = "webrat=#{Regexp.escape(field_identifier)}"
139
+ selenium.key_down(locator, key_code)
140
+ end
141
+
142
+ def key_up(field_identifier, key_code)
143
+ locator = "webrat=#{Regexp.escape(field_identifier)}"
144
+ selenium.key_up(locator, key_code)
145
+ end
146
+
147
+ def wait_for(params={})
148
+ timeout = params[:timeout] || 5
149
+ message = params[:message] || "Timeout exceeded"
150
+
151
+ begin_time = Time.now
152
+
153
+ while (Time.now - begin_time) < timeout
154
+ value = nil
155
+
156
+ begin
157
+ value = yield
158
+ rescue ::Spec::Expectations::ExpectationNotMetError, ::Selenium::CommandError, Webrat::WebratError
159
+ value = nil
160
+ end
161
+
162
+ return value if value
163
+
164
+ sleep 0.25
165
+ end
166
+
167
+ raise Webrat::TimeoutError.new(message + " (after #{timeout} sec)")
168
+ true
169
+ end
170
+
171
+ def selenium
172
+ return $browser if $browser
173
+ setup
174
+ $browser
175
+ end
176
+
177
+ webrat_deprecate :browser, :selenium
178
+
179
+
180
+ def save_and_open_screengrab
181
+ return unless File.exist?(saved_page_dir)
182
+
183
+ filename = "#{saved_page_dir}/webrat-#{Time.now.to_i}.png"
184
+
185
+ if $browser.chrome_backend?
186
+ $browser.capture_entire_page_screenshot(filename, '')
187
+ else
188
+ $browser.capture_screenshot(filename)
189
+ end
190
+ open_in_browser(filename)
191
+ end
192
+
193
+ protected
194
+
195
+ def setup #:nodoc:
196
+ Webrat::Selenium::SeleniumRCServer.boot
197
+ Webrat::Selenium::ApplicationServer.boot
198
+
199
+ create_browser
200
+ $browser.start
201
+
202
+ extend_selenium
203
+ define_location_strategies
204
+ $browser.window_maximize
205
+ end
206
+
207
+
208
+ def create_browser
209
+ $browser = ::Selenium::Client::Driver.new(Webrat.configuration.selenium_server_address || "localhost",
210
+ Webrat.configuration.selenium_server_port, Webrat.configuration.selenium_browser_key, "http://#{Webrat.configuration.application_address}:#{Webrat.configuration.application_port}")
211
+ $browser.set_speed(0) unless Webrat.configuration.selenium_server_address
212
+
213
+ at_exit do
214
+ silence_stream(STDOUT) do
215
+ $browser.stop
216
+ end
217
+ end
218
+ end
219
+
220
+ def adjust_if_regexp(text_or_regexp) #:nodoc:
221
+ if text_or_regexp.is_a?(Regexp)
222
+ "evalregex:#{text_or_regexp.inspect}"
223
+ else
224
+ "evalregex:/#{text_or_regexp}/"
225
+ end
226
+ end
227
+
228
+ def extend_selenium #:nodoc:
229
+ extensions_file = File.join(File.dirname(__FILE__), "selenium_extensions.js")
230
+ extenions_js = File.read(extensions_file)
231
+ selenium.get_eval(extenions_js)
232
+ end
233
+
234
+ def define_location_strategies #:nodoc:
235
+ Dir[File.join(File.dirname(__FILE__), "location_strategy_javascript", "*.js")].sort.each do |file|
236
+ strategy_js = File.read(file)
237
+ strategy_name = File.basename(file, '.js')
238
+ selenium.add_location_strategy(strategy_name, strategy_js)
239
+ end
240
+ end
241
+ end
242
+ end