Module: Webrat

Defined in:
lib/webrat/core/xml.rb,
lib/webrat.rb,
lib/webrat/rack.rb,
lib/webrat/rails.rb,
lib/webrat/sinatra.rb,
lib/webrat/culerity.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/merb_adapter.rb,
lib/webrat/core/locators.rb,
lib/webrat/core/xml/rexml.rb,
lib/webrat/culerity/scope.rb,
lib/webrat/core/xml/hpricot.rb,
lib/webrat/culerity/locator.rb,
lib/webrat/culerity/session.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/merb_multipart_support.rb,
lib/webrat/core/save_and_open_page.rb,
lib/webrat/selenium/silence_stream.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/selenium/matchers/have_tag.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/selenium/selenium_rc_server.rb,
lib/webrat/core/locators/button_locator.rb,
lib/webrat/selenium/matchers/have_xpath.rb,
lib/webrat/selenium/matchers/have_content.rb,
lib/webrat/selenium/matchers/have_selector.rb,
lib/webrat/core/locators/field_by_id_locator.rb,
lib/webrat/core/locators/field_named_locator.rb,
lib/webrat/selenium/application_servers/base.rb,
lib/webrat/selenium/application_servers/merb.rb,
lib/webrat/selenium/application_servers/rails.rb,
lib/webrat/core/locators/field_labeled_locator.rb,
lib/webrat/core/locators/select_option_locator.rb,
lib/webrat/selenium/application_server_factory.rb,
lib/webrat/selenium/application_servers/sinatra.rb,
lib/webrat/selenium/application_servers/external.rb

Overview

:nodoc:

Defined Under Namespace

Modules: Culerity, HaveTagMatcher, Locators, Logging, MIME, Matchers, MerbMultipartSupport, Methods, SaveAndOpenPage, Selenium, XML Classes: Area, ButtonField, CheckboxField, Configuration, CulerityLocator, CulerityResponse, CulerityScope, CuleritySession, DisabledFieldError, Element, Field, FileField, Form, HiddenField, InfiniteRedirectError, Label, Link, MechanizeAdapter, MerbAdapter, NotFoundError, PageLoadError, PasswordField, RackAdapter, RadioField, RailsAdapter, ResetField, Scope, SelectField, SelectOption, SeleniumResponse, SeleniumSession, Session, SinatraAdapter, TextField, TextareaField, TimeoutError, WebratError

Class Method Summary collapse

Class Method Details

.adapter_classObject



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/webrat/core/session.rb', line 26

def self.adapter_class
  case Webrat.configuration.mode
  when :rails
    RailsAdapter
  when :merb
    MerbAdapter
  when :rack
    RackAdapter
  when :rack_test
    warn("The :rack_test mode is deprecated. Please use :rack instead")
    require "webrat/rack"
    RackAdapter
  when :sinatra
    warn("The :sinatra mode is deprecated. Please use :rack instead")
    SinatraAdapter
  when :mechanize
    MechanizeAdapter
  else
    raise WebratError.new(<<-STR)
Unknown Webrat mode: #{Webrat.configuration.mode.inspect}

Please ensure you have a Webrat configuration block that specifies a mode
in your test_helper.rb, spec_helper.rb, or env.rb (for Cucumber).

This configure block supercedes the need to require "webrat/<framework>".

For example:

Webrat.configure do |config|
  config.mode = :rails
end
    STR
  end
end

.configurationObject

:nodoc:



12
13
14
# File 'lib/webrat/core/configuration.rb', line 12

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

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

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

Yields:



7
8
9
10
# File 'lib/webrat/core/configuration.rb', line 7

def self.configure(configuration = Webrat.configuration)
  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::HTML(stringlike.string)
  elsif stringlike.respond_to?(:body)
    Nokogiri::HTML(stringlike.body.to_s)
  else
    Nokogiri::HTML(stringlike.to_s)
  end
end

.prepare_pid_file(file_path, pid_file_name) ⇒ Object



23
24
25
26
# File 'lib/webrat/culerity.rb', line 23

def self.prepare_pid_file(file_path, pid_file_name)
  FileUtils.mkdir_p File.expand_path(file_path)
  File.expand_path("#{file_path}/#{pid_file_name}")
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



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

def self.session_class
  case Webrat.configuration.mode
  when :selenium
    SeleniumSession
  when :culerity
    CuleritySession
  else
    Session
  end
end

.start_app_serverObject

:nodoc:



12
13
14
15
16
# File 'lib/webrat/culerity.rb', line 12

def self.start_app_server #:nodoc:
  pid_file = prepare_pid_file("#{RAILS_ROOT}/tmp/pids", "mongrel_culerity.pid")
  system("mongrel_rails start -d --chdir=#{RAILS_ROOT} --port=#{Webrat.configuration.application_port} --environment=#{Webrat.configuration.application_environment} --pid #{pid_file} &")
  TCPSocket.wait_for_service :host => Webrat.configuration.application_address, :port => Webrat.configuration.application_port.to_i
end

.stop_app_serverObject

:nodoc:



18
19
20
21
# File 'lib/webrat/culerity.rb', line 18

def self.stop_app_server #:nodoc:
  pid_file = File.expand_path(RAILS_ROOT + "/tmp/pids/mongrel_culerity.pid")
  system "mongrel_rails stop -c #{RAILS_ROOT} --pid #{pid_file}"
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