Cleaning up Selenium support. Mongrel and Selenium servers start/shutdown automatically
This commit is contained in:
parent
e6cb40b66e
commit
da68aa8bce
|
@ -29,7 +29,3 @@ end
|
||||||
Webrat.require_xml
|
Webrat.require_xml
|
||||||
|
|
||||||
require "webrat/core"
|
require "webrat/core"
|
||||||
|
|
||||||
# TODO: This is probably not a good idea.
|
|
||||||
# Probably better for webrat users to require "webrat/rails" etc. directly
|
|
||||||
require "webrat/rails" if defined?(RAILS_ENV)
|
|
||||||
|
|
|
@ -45,7 +45,8 @@ module Webrat
|
||||||
:set_hidden_field, :submit_form,
|
:set_hidden_field, :submit_form,
|
||||||
:request_page, :current_dom,
|
:request_page, :current_dom,
|
||||||
:selects_date, :selects_time, :selects_datetime,
|
:selects_date, :selects_time, :selects_datetime,
|
||||||
:select_date, :select_time, :select_datetime
|
:select_date, :select_time, :select_datetime,
|
||||||
|
:wait_for_page_to_load
|
||||||
|
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
require "webrat/core"
|
require "webrat"
|
||||||
|
|
||||||
require "cgi"
|
require "cgi"
|
||||||
gem "extlib"
|
gem "extlib"
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
require "webrat"
|
||||||
|
|
||||||
module Webrat
|
module Webrat
|
||||||
class RailsSession < Session #:nodoc:
|
class RailsSession < Session #:nodoc:
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
require "webrat"
|
||||||
gem "selenium-client", ">=1.2.9"
|
gem "selenium-client", ">=1.2.9"
|
||||||
require "selenium/client"
|
require "selenium/client"
|
||||||
require "webrat/selenium/selenium_session"
|
require "webrat/selenium/selenium_session"
|
||||||
|
@ -13,19 +14,46 @@ module Webrat
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.start_selenium_server
|
def self.start_selenium_server
|
||||||
remote_control = Selenium::RemoteControl::RemoteControl.new("0.0.0.0", 4444, 5)
|
remote_control = ::Selenium::RemoteControl::RemoteControl.new("0.0.0.0", 4444, 5)
|
||||||
remote_control.jar_file = File.expand_path(__FILE__ + "../../../../vendor/selenium-server.jar")
|
remote_control.jar_file = File.expand_path(__FILE__ + "../../../../vendor/selenium-server.jar")
|
||||||
remote_control.start :background => true
|
remote_control.start :background => true
|
||||||
puts "Waiting for Remote Control to be up and running..."
|
|
||||||
TCPSocket.wait_for_service :host => "0.0.0.0", :port => 4444
|
TCPSocket.wait_for_service :host => "0.0.0.0", :port => 4444
|
||||||
puts "Selenium Remote Control at 0.0.0.0:4444 ready"
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.stop_selenium_server
|
def self.stop_selenium_server
|
||||||
puts "Stopping Selenium Remote Control running at 0.0.0.0:4444..."
|
remote_control = ::Selenium::RemoteControl::RemoteControl.new("0.0.0.0", 4444, 5)
|
||||||
remote_control = Selenium::RemoteControl::RemoteControl.new("0.0.0.0", 4444, 5)
|
|
||||||
remote_control.stop
|
remote_control.stop
|
||||||
puts "Stopped Selenium Remote Control running at 0.0.0.0:4444"
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def self.start_app_server
|
||||||
|
pid_file = File.expand_path(RAILS_ROOT + "/tmp/pids/mongrel_selenium.pid")
|
||||||
|
system("mongrel_rails start -d --chdir=#{RAILS_ROOT} --port=3001 --environment=selenium --pid #{pid_file} &")
|
||||||
|
TCPSocket.wait_for_service :host => "0.0.0.0", :port => 3001
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.stop_app_server
|
||||||
|
pid_file = File.expand_path(RAILS_ROOT + "/tmp/pids/mongrel_selenium.pid")
|
||||||
|
system "mongrel_rails stop -c #{RAILS_ROOT} --pid #{pid_file}"
|
||||||
|
end
|
||||||
|
|
||||||
|
module Selenium
|
||||||
|
module Rails
|
||||||
|
class World < ::ActionController::IntegrationTest
|
||||||
|
|
||||||
|
def initialize #:nodoc:
|
||||||
|
@_result = Test::Unit::TestResult.new
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
module ::ActionController
|
||||||
|
module Integration
|
||||||
|
class Session #:nodoc:
|
||||||
|
include Webrat::Methods
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
|
@ -1,27 +1,26 @@
|
||||||
module Webrat
|
module Webrat
|
||||||
class SeleniumSession
|
class SeleniumSession
|
||||||
|
|
||||||
def initialize(selenium_driver) #:nodoc:
|
def initialize(*args) # :nodoc:
|
||||||
@selenium = selenium_driver
|
|
||||||
extend_selenium
|
extend_selenium
|
||||||
define_location_strategies
|
define_location_strategies
|
||||||
end
|
end
|
||||||
|
|
||||||
def visit(url)
|
def visit(url)
|
||||||
@selenium.open(url)
|
selenium.open(url)
|
||||||
end
|
end
|
||||||
|
|
||||||
alias_method :visits, :visit
|
alias_method :visits, :visit
|
||||||
|
|
||||||
def fill_in(field_identifier, options)
|
def fill_in(field_identifier, options)
|
||||||
locator = "webrat=#{Regexp.escape(field_identifier)}"
|
locator = "webrat=#{Regexp.escape(field_identifier)}"
|
||||||
@selenium.type(locator, "#{options[:with]}")
|
selenium.type(locator, "#{options[:with]}")
|
||||||
end
|
end
|
||||||
|
|
||||||
alias_method :fills_in, :fill_in
|
alias_method :fills_in, :fill_in
|
||||||
|
|
||||||
def response_body #:nodoc:
|
def response_body #:nodoc:
|
||||||
@selenium.get_html_source
|
selenium.get_html_source
|
||||||
end
|
end
|
||||||
|
|
||||||
def click_button(button_text_or_regexp = nil, options = {})
|
def click_button(button_text_or_regexp = nil, options = {})
|
||||||
|
@ -31,7 +30,7 @@ module Webrat
|
||||||
pattern = adjust_if_regexp(button_text_or_regexp)
|
pattern = adjust_if_regexp(button_text_or_regexp)
|
||||||
end
|
end
|
||||||
pattern ||= '*'
|
pattern ||= '*'
|
||||||
@selenium.click("button=#{pattern}")
|
selenium.click("button=#{pattern}")
|
||||||
wait_for_result(options[:wait])
|
wait_for_result(options[:wait])
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -39,14 +38,14 @@ module Webrat
|
||||||
|
|
||||||
def click_link(link_text_or_regexp, options = {})
|
def click_link(link_text_or_regexp, options = {})
|
||||||
pattern = adjust_if_regexp(link_text_or_regexp)
|
pattern = adjust_if_regexp(link_text_or_regexp)
|
||||||
@selenium.click("webratlink=#{pattern}")
|
selenium.click("webratlink=#{pattern}")
|
||||||
wait_for_result(options[:wait])
|
wait_for_result(options[:wait])
|
||||||
end
|
end
|
||||||
|
|
||||||
alias_method :clicks_link, :click_link
|
alias_method :clicks_link, :click_link
|
||||||
|
|
||||||
def click_link_within(selector, link_text, options = {})
|
def click_link_within(selector, link_text, options = {})
|
||||||
@selenium.click("webratlinkwithin=#{selector}|#{link_text}")
|
selenium.click("webratlinkwithin=#{selector}|#{link_text}")
|
||||||
wait_for_result(options[:wait])
|
wait_for_result(options[:wait])
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -63,15 +62,15 @@ module Webrat
|
||||||
end
|
end
|
||||||
|
|
||||||
def wait_for_page_to_load(timeout = 15000)
|
def wait_for_page_to_load(timeout = 15000)
|
||||||
@selenium.wait_for_page_to_load(timeout)
|
selenium.wait_for_page_to_load(timeout)
|
||||||
end
|
end
|
||||||
|
|
||||||
def wait_for_ajax(timeout = 15000)
|
def wait_for_ajax(timeout = 15000)
|
||||||
@selenium.wait_for_condition "Ajax.activeRequestCount == 0", timeout
|
selenium.wait_for_condition "Ajax.activeRequestCount == 0", timeout
|
||||||
end
|
end
|
||||||
|
|
||||||
def wait_for_effects(timeout = 15000)
|
def wait_for_effects(timeout = 15000)
|
||||||
@selenium.wait_for_condition "window.Effect.Queue.size() == 0", timeout
|
selenium.wait_for_condition "window.Effect.Queue.size() == 0", timeout
|
||||||
end
|
end
|
||||||
|
|
||||||
def wait_for_ajax_and_effects
|
def wait_for_ajax_and_effects
|
||||||
|
@ -87,48 +86,81 @@ module Webrat
|
||||||
else
|
else
|
||||||
select_locator = "webratselectwithoption=#{option_text}"
|
select_locator = "webratselectwithoption=#{option_text}"
|
||||||
end
|
end
|
||||||
@selenium.select(select_locator, option_text)
|
selenium.select(select_locator, option_text)
|
||||||
end
|
end
|
||||||
|
|
||||||
alias_method :selects, :select
|
alias_method :selects, :select
|
||||||
|
|
||||||
def choose(label_text)
|
def choose(label_text)
|
||||||
@selenium.click("webrat=#{label_text}")
|
selenium.click("webrat=#{label_text}")
|
||||||
end
|
end
|
||||||
|
|
||||||
alias_method :chooses, :choose
|
alias_method :chooses, :choose
|
||||||
|
|
||||||
def check(label_text)
|
def check(label_text)
|
||||||
@selenium.check("webrat=#{label_text}")
|
selenium.check("webrat=#{label_text}")
|
||||||
end
|
end
|
||||||
|
|
||||||
alias_method :checks, :check
|
alias_method :checks, :check
|
||||||
|
|
||||||
def is_ordered(*args) #:nodoc:
|
def is_ordered(*args) #:nodoc:
|
||||||
@selenium.is_ordered(*args)
|
selenium.is_ordered(*args)
|
||||||
end
|
end
|
||||||
|
|
||||||
def dragdrop(*args) #:nodoc:
|
def dragdrop(*args) #:nodoc:
|
||||||
@selenium.dragdrop(*args)
|
selenium.dragdrop(*args)
|
||||||
end
|
end
|
||||||
|
|
||||||
def fire_event(field_identifier, event)
|
def fire_event(field_identifier, event)
|
||||||
locator = "webrat=#{Regexp.escape(field_identifier)}"
|
locator = "webrat=#{Regexp.escape(field_identifier)}"
|
||||||
@selenium.fire_event(locator, "#{event}")
|
selenium.fire_event(locator, "#{event}")
|
||||||
end
|
end
|
||||||
|
|
||||||
def key_down(field_identifier, key_code)
|
def key_down(field_identifier, key_code)
|
||||||
locator = "webrat=#{Regexp.escape(field_identifier)}"
|
locator = "webrat=#{Regexp.escape(field_identifier)}"
|
||||||
@selenium.key_down(locator, key_code)
|
selenium.key_down(locator, key_code)
|
||||||
end
|
end
|
||||||
|
|
||||||
def key_up(field_identifier, key_code)
|
def key_up(field_identifier, key_code)
|
||||||
locator = "webrat=#{Regexp.escape(field_identifier)}"
|
locator = "webrat=#{Regexp.escape(field_identifier)}"
|
||||||
@selenium.key_up(locator, key_code)
|
selenium.key_up(locator, key_code)
|
||||||
|
end
|
||||||
|
|
||||||
|
def browser
|
||||||
|
return $browser if $browser
|
||||||
|
setup
|
||||||
|
$browser
|
||||||
end
|
end
|
||||||
|
|
||||||
protected
|
protected
|
||||||
|
|
||||||
|
def setup
|
||||||
|
silence_stream(STDOUT) do
|
||||||
|
Webrat.start_selenium_server
|
||||||
|
Webrat.start_app_server
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
$browser = ::Selenium::Client::Driver.new("localhost", 4444, "*firefox", "http://0.0.0.0:3001")
|
||||||
|
$browser.set_speed(0)
|
||||||
|
$browser.start
|
||||||
|
teardown_at_exit
|
||||||
|
end
|
||||||
|
|
||||||
|
def selenium
|
||||||
|
browser
|
||||||
|
end
|
||||||
|
|
||||||
|
def teardown_at_exit
|
||||||
|
at_exit do
|
||||||
|
silence_stream(STDOUT) do
|
||||||
|
$browser.stop
|
||||||
|
Webrat.stop_app_server
|
||||||
|
Webrat.stop_selenium_server
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def adjust_if_regexp(text_or_regexp) #:nodoc:
|
def adjust_if_regexp(text_or_regexp) #:nodoc:
|
||||||
if text_or_regexp.is_a?(Regexp)
|
if text_or_regexp.is_a?(Regexp)
|
||||||
"evalregex:#{text_or_regexp.inspect}"
|
"evalregex:#{text_or_regexp.inspect}"
|
||||||
|
@ -140,14 +172,14 @@ module Webrat
|
||||||
def extend_selenium #:nodoc:
|
def extend_selenium #:nodoc:
|
||||||
extensions_file = File.join(File.dirname(__FILE__), "selenium_extensions.js")
|
extensions_file = File.join(File.dirname(__FILE__), "selenium_extensions.js")
|
||||||
extenions_js = File.read(extensions_file)
|
extenions_js = File.read(extensions_file)
|
||||||
@selenium.get_eval(extenions_js)
|
selenium.get_eval(extenions_js)
|
||||||
end
|
end
|
||||||
|
|
||||||
def define_location_strategies #:nodoc:
|
def define_location_strategies #:nodoc:
|
||||||
Dir[File.join(File.dirname(__FILE__), "location_strategy_javascript", "*.js")].sort.each do |file|
|
Dir[File.join(File.dirname(__FILE__), "location_strategy_javascript", "*.js")].sort.each do |file|
|
||||||
strategy_js = File.read(file)
|
strategy_js = File.read(file)
|
||||||
strategy_name = File.basename(file, '.js')
|
strategy_name = File.basename(file, '.js')
|
||||||
@selenium.add_location_strategy(strategy_name, strategy_js)
|
selenium.add_location_strategy(strategy_name, strategy_js)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue