Module: Webrat

Defined in:
lib/webrat/core/xml.rb,
lib/webrat.rb,
lib/webrat/merb.rb,
lib/webrat/rack.rb,
lib/webrat/rails.rb,
lib/webrat/sinatra.rb,
lib/webrat/selenium.rb,
lib/webrat/core/mime.rb,
lib/webrat/mechanize.rb,
lib/webrat/core/scope.rb,
lib/webrat/core/logging.rb,
lib/webrat/core/methods.rb,
lib/webrat/core/session.rb,
lib/webrat/core/locators.rb,
lib/webrat/core/xml/rexml.rb,
lib/webrat/core/xml/hpricot.rb,
lib/webrat/core/xml/nokogiri.rb,
lib/webrat/core/configuration.rb,
lib/webrat/core/elements/area.rb,
lib/webrat/core/elements/form.rb,
lib/webrat/core/elements/link.rb,
lib/webrat/core/elements/field.rb,
lib/webrat/core/elements/label.rb,
lib/webrat/core/elements/element.rb,
lib/webrat/core/locators/locator.rb,
lib/webrat/core/matchers/have_tag.rb,
lib/webrat/rails/redirect_actions.rb,
lib/webrat/core/matchers/have_xpath.rb,
lib/webrat/selenium/selenium_session.rb,
lib/webrat/core/locators/area_locator.rb,
lib/webrat/core/locators/form_locator.rb,
lib/webrat/core/locators/link_locator.rb,
lib/webrat/core/matchers/have_content.rb,
lib/webrat/core/elements/select_option.rb,
lib/webrat/core/locators/field_locator.rb,
lib/webrat/core/locators/label_locator.rb,
lib/webrat/core/matchers/have_selector.rb,
lib/webrat/core/locators/button_locator.rb,
lib/webrat/core/locators/field_by_id_locator.rb,
lib/webrat/core/locators/field_named_locator.rb,
lib/webrat/core/locators/field_labeled_locator.rb,
lib/webrat/core/locators/select_option_locator.rb

Overview

For Rails before dev.rubyonrails.org/ticket/10497 was committed

Defined Under Namespace

Modules: HaveTagMatcher, Locators, Logging, MIME, Matchers, Methods, RedirectActions, Selenium, XML Classes: Area, ButtonField, CheckboxField, Configuration, DisabledFieldError, Element, Field, FileField, Form, HiddenField, Label, Link, MechanizeSession, MerbSession, NotFoundError, PageLoadError, PasswordField, RackSession, RadioField, RailsSession, ResetField, Scope, SelectField, SelectOption, SeleniumResponse, SeleniumSession, Session, SinatraSession, TextField, TextareaField, TimeoutError, WebratError

Constant Summary collapse

VERSION =
'0.3.2.1'

Class Method Summary collapse

Class Method Details

.configurationObject

:nodoc:



10
11
12
# File 'lib/webrat/core/configuration.rb', line 10

def self.configuration # :nodoc:
  @@configuration ||= Webrat::Configuration.new
end

.configure(configuration = Webrat::Configuration.new) {|configuration| ... } ⇒ Object

Configures Webrat. If this is not done, Webrat will be created with all of the default settings.

Yields:



5
6
7
8
# File 'lib/webrat/core/configuration.rb', line 5

def self.configure(configuration = Webrat::Configuration.new)
  yield configuration if block_given?
  @@configuration = configuration
end

.define_dom_method(object, dom) ⇒ Object

:nodoc:



53
54
55
56
57
# File 'lib/webrat/core/xml/nokogiri.rb', line 53

def self.define_dom_method(object, dom) #:nodoc:
  object.meta_class.send(:define_method, :dom) do
    dom
  end
end

.hpricot_document(stringlike) ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# File 'lib/webrat/core/xml/hpricot.rb', line 3

def self.hpricot_document(stringlike)
  return stringlike.dom if stringlike.respond_to?(:dom)

  if Hpricot::Doc === stringlike
    stringlike
  elsif Hpricot::Elements === stringlike
    stringlike
  elsif StringIO === stringlike
    Hpricot(stringlike.string)
  elsif stringlike.respond_to?(:body)
    Hpricot(stringlike.body.to_s)
  else
    Hpricot(stringlike.to_s)
  end
end

.html_nokogiri_document(stringlike) ⇒ Object

:nodoc:



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/webrat/core/xml/nokogiri.rb', line 21

def self.html_nokogiri_document(stringlike) #:nodoc:
  return stringlike.dom if stringlike.respond_to?(:dom)
  
  if Nokogiri::HTML::Document === stringlike
    stringlike
  elsif Nokogiri::XML::NodeSet === stringlike
    stringlike
  elsif StringIO === stringlike
    Nokogiri::HTML(stringlike.string)
  elsif stringlike.respond_to?(:body)
    Nokogiri::HTML(stringlike.body.to_s)
  else
    Nokogiri::HTML(stringlike.to_s)
  end
end

.nokogiri_document(stringlike) ⇒ Object

:nodoc:



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# File 'lib/webrat/core/xml/nokogiri.rb', line 5

def self.nokogiri_document(stringlike) #:nodoc:
  return stringlike.dom if stringlike.respond_to?(:dom)
  
  if Nokogiri::HTML::Document === stringlike
    stringlike
  elsif Nokogiri::XML::NodeSet === stringlike
    stringlike
  elsif StringIO === stringlike
    Nokogiri.parse(stringlike.string)
  elsif stringlike.respond_to?(:body)
    Nokogiri.parse(stringlike.body.to_s)
  else
    Nokogiri.parse(stringlike.to_s)
  end
end

.on_java?Boolean

Returns:

  • (Boolean)


26
27
28
# File 'lib/webrat.rb', line 26

def self.on_java?
  RUBY_PLATFORM =~ /java/
end

.require_xmlObject



12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/webrat.rb', line 12

def self.require_xml
  gem "nokogiri", ">= 1.0.6"
  
  if on_java?
    # We need Nokogiri's CSS to XPath support, even if using REXML and Hpricot for parsing and searching
    require "nokogiri/css"
    require "hpricot"
    require "rexml/document"
  else
    require "nokogiri"
    require "webrat/core/xml/nokogiri"
  end
end

.rexml_document(stringlike) ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/webrat/core/xml/rexml.rb', line 3

def self.rexml_document(stringlike)
  stringlike = stringlike.body.to_s if stringlike.respond_to?(:body)

  case stringlike
  when REXML::Document
    stringlike.root
  when REXML::Node, Array
    stringlike
  else
    begin
      REXML::Document.new(stringlike.to_s).root
    rescue REXML::ParseException => e
      if e.message.include?("second root element")
        REXML::Document.new("<fake-root-element>#{stringlike}</fake-root-element>").root
      else
        raise e
      end
    end
  end
end

.session_classObject



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/webrat/core/session.rb', line 11

def self.session_class
  case Webrat.configuration.mode
  when :rails
    RailsSession
  when :merb
    MerbSession
  when :selenium
    SeleniumSession
  when :rack
    RackSession
  when :sinatra
    SinatraSession
  when :mechanize
    MechanizeSession
  else
    raise WebratError.new("Unknown Webrat mode: #{Webrat.configuration.mode.inspect}")
  end
end

.start_app_serverObject

:nodoc:



29
30
31
32
33
# File 'lib/webrat/selenium.rb', line 29

def self.start_app_server #:nodoc:
  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

.start_selenium_serverObject

:nodoc:



17
18
19
20
21
22
# File 'lib/webrat/selenium.rb', line 17

def self.start_selenium_server #:nodoc:
  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.start :background => true
  TCPSocket.wait_for_service :host => "0.0.0.0", :port => 4444
end

.stop_app_serverObject

:nodoc:



35
36
37
38
# File 'lib/webrat/selenium.rb', line 35

def self.stop_app_server #:nodoc:
  pid_file = File.expand_path(RAILS_ROOT + "/tmp/pids/mongrel_selenium.pid")
  system "mongrel_rails stop -c #{RAILS_ROOT} --pid #{pid_file}"
end

.stop_selenium_serverObject

:nodoc:



24
25
26
27
# File 'lib/webrat/selenium.rb', line 24

def self.stop_selenium_server #:nodoc:
  remote_control = ::Selenium::RemoteControl::RemoteControl.new("0.0.0.0", 4444, 5)
  remote_control.stop
end

.with_selenium_serverObject

:nodoc:



11
12
13
14
15
# File 'lib/webrat/selenium.rb', line 11

def self.with_selenium_server #:nodoc:
  start_selenium_server
  yield
  stop_selenium_server
end

.xml_nokogiri_document(stringlike) ⇒ Object

:nodoc:



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/webrat/core/xml/nokogiri.rb', line 37

def self.xml_nokogiri_document(stringlike) #:nodoc:
  return stringlike.dom if stringlike.respond_to?(:dom)
  
  if Nokogiri::HTML::Document === stringlike
    stringlike
  elsif Nokogiri::XML::NodeSet === stringlike
    stringlike
  elsif StringIO === stringlike
    Nokogiri::XML(stringlike.string)
  elsif stringlike.respond_to?(:body)
    Nokogiri::XML(stringlike.body.to_s)
  else
    Nokogiri::XML(stringlike.to_s)
  end
end