polonium 0.1.0
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/CHANGES +10 -0
 - data/README +38 -0
 - data/Rakefile +68 -0
 - data/lib/polonium.rb +28 -0
 - data/lib/polonium/configuration.rb +271 -0
 - data/lib/polonium/driver.rb +155 -0
 - data/lib/polonium/dsl/selenium_dsl.rb +33 -0
 - data/lib/polonium/dsl/test_unit_dsl.rb +58 -0
 - data/lib/polonium/element.rb +207 -0
 - data/lib/polonium/extensions/module.rb +8 -0
 - data/lib/polonium/extensions/testrunnermediator.rb +22 -0
 - data/lib/polonium/mongrel_selenium_server_runner.rb +37 -0
 - data/lib/polonium/page.rb +84 -0
 - data/lib/polonium/selenium_helper.rb +5 -0
 - data/lib/polonium/server_runner.rb +33 -0
 - data/lib/polonium/tasks/selenium_test_task.rb +21 -0
 - data/lib/polonium/test_case.rb +93 -0
 - data/lib/polonium/wait_for.rb +40 -0
 - data/lib/polonium/webrick_selenium_server_runner.rb +33 -0
 - data/spec/polonium/extensions/module_spec.rb +29 -0
 - data/spec/polonium/extensions/testrunnermediator_spec.rb +19 -0
 - data/spec/polonium/mongrel_selenium_server_runner_spec.rb +35 -0
 - data/spec/polonium/selenium_configuration_spec.rb +359 -0
 - data/spec/polonium/selenium_driver_spec.rb +104 -0
 - data/spec/polonium/selenium_element_spec.rb +551 -0
 - data/spec/polonium/selenium_page_spec.rb +249 -0
 - data/spec/polonium/selenium_server_runner_spec.rb +42 -0
 - data/spec/polonium/selenium_test_case_class_method_spec.rb +41 -0
 - data/spec/polonium/selenium_test_case_spec.rb +870 -0
 - data/spec/polonium/selenium_test_case_spec_helper.rb +16 -0
 - data/spec/polonium/webrick_selenium_server_runner_spec.rb +117 -0
 - data/spec/spec_helper.rb +63 -0
 - data/spec/spec_suite.rb +6 -0
 - metadata +82 -0
 
    
        data/CHANGES
    ADDED
    
    | 
         @@ -0,0 +1,10 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            * Renamed to Polonium
         
     | 
| 
      
 2 
     | 
    
         
            +
            * Methods renamed to match Test::Unit assertions
         
     | 
| 
      
 3 
     | 
    
         
            +
            * Page and Element delegate to Driver [Paired with Jeff Whitmore]
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            0.0.2
         
     | 
| 
      
 6 
     | 
    
         
            +
            * Supports multiple sessions by instantiating multiple SeleniumDrivers
         
     | 
| 
      
 7 
     | 
    
         
            +
            * Added SeleniumDriver which holds most of the polling methods
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
            0.0.1
         
     | 
| 
      
 10 
     | 
    
         
            +
            * Initial Release. More documentation to come.
         
     | 
    
        data/README
    ADDED
    
    | 
         @@ -0,0 +1,38 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            == Introduction
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            Welcome to Polonium!
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            This plugin is designed to let you use Polonium to write Selenium tests in Ruby, using a simple series of
         
     | 
| 
      
 6 
     | 
    
         
            +
            Rake tasks.
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            == Installation
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
            The current version of this plugin can be found at: http://rubyforge.org/var/svn/pivotalrb/polonium/trunk
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
            You may install the plugin with the following command:
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
              script/plugin install svn://rubyforge.org/var/svn/pivotalrb/polonium/trunk
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
            == Usage
         
     | 
| 
      
 17 
     | 
    
         
            +
            The polonium plugin assumes you have a test/selenium directory with a selenium_suite.rb file in
         
     | 
| 
      
 18 
     | 
    
         
            +
            it.  A sample selenium_suite.rb and selenium_helper.rb can be copied into your test/selenium directory.
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
            You'll get the following tasks:
         
     | 
| 
      
 21 
     | 
    
         
            +
              - selenium:test - starts a Selenium RC server, runs selenium tests, and shuts the server down
         
     | 
| 
      
 22 
     | 
    
         
            +
                 when they're done
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
            and lower level tasks as well:
         
     | 
| 
      
 25 
     | 
    
         
            +
              - selenium:server starts up a Selenium RC server
         
     | 
| 
      
 26 
     | 
    
         
            +
              - selenium:test_with_server_started  runs Selenium tests off of an existing server
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
            == Future Enhancements
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
            There are a few things we'd like to improve, but we wanted to get this out now.  Check the tracker in the pivotal.rb RubyForge project for details.
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
            == License
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
            Polonium is distributed under the MIT license. Copyright © 2007 Pivotal Labs, Inc.
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
            == Contributing
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
            Contributions to this plugin are welcome.  Contributions should be accompanied by tests.  See http://pivotalrb.rubyforge.org for more details.
         
     | 
    
        data/Rakefile
    ADDED
    
    | 
         @@ -0,0 +1,68 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require "rake"
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'rake/gempackagetask'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require 'rake/contrib/rubyforgepublisher'
         
     | 
| 
      
 4 
     | 
    
         
            +
            require 'rake/clean'
         
     | 
| 
      
 5 
     | 
    
         
            +
            require 'rake/testtask'
         
     | 
| 
      
 6 
     | 
    
         
            +
            require 'rake/rdoctask'
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            desc "Runs the Rspec suite"
         
     | 
| 
      
 9 
     | 
    
         
            +
            task(:default) do
         
     | 
| 
      
 10 
     | 
    
         
            +
              run_suite
         
     | 
| 
      
 11 
     | 
    
         
            +
            end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
            desc "Runs the Rspec suite"
         
     | 
| 
      
 14 
     | 
    
         
            +
            task(:spec) do
         
     | 
| 
      
 15 
     | 
    
         
            +
              run_suite
         
     | 
| 
      
 16 
     | 
    
         
            +
            end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
            desc "Copies the trunk to a tag with the name of the current release"
         
     | 
| 
      
 19 
     | 
    
         
            +
            task(:tag_release) do
         
     | 
| 
      
 20 
     | 
    
         
            +
              tag_release
         
     | 
| 
      
 21 
     | 
    
         
            +
            end
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
            def run_suite
         
     | 
| 
      
 24 
     | 
    
         
            +
              dir = File.dirname(__FILE__)
         
     | 
| 
      
 25 
     | 
    
         
            +
              system("ruby #{dir}/spec/spec_suite.rb") || raise("Example Suite failed")
         
     | 
| 
      
 26 
     | 
    
         
            +
            end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
            PKG_NAME = "polonium"
         
     | 
| 
      
 29 
     | 
    
         
            +
            PKG_VERSION = "0.1.0"
         
     | 
| 
      
 30 
     | 
    
         
            +
            PKG_FILES = FileList[
         
     | 
| 
      
 31 
     | 
    
         
            +
              '[A-Z]*',
         
     | 
| 
      
 32 
     | 
    
         
            +
              '*.rb',
         
     | 
| 
      
 33 
     | 
    
         
            +
              'lib/**/*.rb',
         
     | 
| 
      
 34 
     | 
    
         
            +
              'spec/**/*.rb'
         
     | 
| 
      
 35 
     | 
    
         
            +
            ]
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
            spec = Gem::Specification.new do |s|
         
     | 
| 
      
 38 
     | 
    
         
            +
              s.name = PKG_NAME
         
     | 
| 
      
 39 
     | 
    
         
            +
              s.version = PKG_VERSION
         
     | 
| 
      
 40 
     | 
    
         
            +
              s.summary = "Selenium RC with enhanced assertions that also runs your rails app."
         
     | 
| 
      
 41 
     | 
    
         
            +
              s.test_files = "spec/spec_suite.rb"
         
     | 
| 
      
 42 
     | 
    
         
            +
              s.description = s.summary
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
              s.files = PKG_FILES.to_a
         
     | 
| 
      
 45 
     | 
    
         
            +
              s.require_path = 'lib'
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
              s.has_rdoc = true
         
     | 
| 
      
 48 
     | 
    
         
            +
              s.extra_rdoc_files = [ "README", "CHANGES" ]
         
     | 
| 
      
 49 
     | 
    
         
            +
              s.rdoc_options = ["--main", "README", "--inline-source", "--line-numbers"]
         
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
      
 51 
     | 
    
         
            +
              s.test_files = Dir.glob('spec/*_spec.rb')
         
     | 
| 
      
 52 
     | 
    
         
            +
              s.require_path = 'lib'
         
     | 
| 
      
 53 
     | 
    
         
            +
              s.author = "Pivotal Labs"
         
     | 
| 
      
 54 
     | 
    
         
            +
              s.email = "opensource@pivotallabs.com"
         
     | 
| 
      
 55 
     | 
    
         
            +
              s.homepage = "http://pivotallabs.com"
         
     | 
| 
      
 56 
     | 
    
         
            +
              s.rubyforge_project = "pivotalrb"
         
     | 
| 
      
 57 
     | 
    
         
            +
            end
         
     | 
| 
      
 58 
     | 
    
         
            +
             
     | 
| 
      
 59 
     | 
    
         
            +
            Rake::GemPackageTask.new(spec) do |pkg|
         
     | 
| 
      
 60 
     | 
    
         
            +
              pkg.need_zip = true
         
     | 
| 
      
 61 
     | 
    
         
            +
              pkg.need_tar = true
         
     | 
| 
      
 62 
     | 
    
         
            +
            end
         
     | 
| 
      
 63 
     | 
    
         
            +
             
     | 
| 
      
 64 
     | 
    
         
            +
            def tag_release
         
     | 
| 
      
 65 
     | 
    
         
            +
              dashed_version = PKG_VERSION.gsub('.', '-')
         
     | 
| 
      
 66 
     | 
    
         
            +
              svn_user_prefix = "#{ENV['SVN_USER']}@" if ENV['SVN_USER']
         
     | 
| 
      
 67 
     | 
    
         
            +
              `svn cp svn+ssh://#{svn_user_prefix}rubyforge.org/var/svn/pivotalrb/polonium/trunk svn+ssh://#{svn_user_prefix}rubyforge.org/var/svn/pivotalrb/polonium/tags/REL-#{dashed_version} -m 'Version #{PKG_VERSION}'`
         
     | 
| 
      
 68 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/polonium.rb
    ADDED
    
    | 
         @@ -0,0 +1,28 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'socket'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'logger'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require "stringio"
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            require "active_record"
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            require 'net/http'
         
     | 
| 
      
 8 
     | 
    
         
            +
            require 'test/unit'
         
     | 
| 
      
 9 
     | 
    
         
            +
            require 'test/unit/testresult'
         
     | 
| 
      
 10 
     | 
    
         
            +
            require 'test/unit/ui/testrunnermediator'
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
            require "selenium"
         
     | 
| 
      
 13 
     | 
    
         
            +
            require "polonium/extensions/module"
         
     | 
| 
      
 14 
     | 
    
         
            +
            require "polonium/extensions/testrunnermediator"
         
     | 
| 
      
 15 
     | 
    
         
            +
            require "polonium/wait_for"
         
     | 
| 
      
 16 
     | 
    
         
            +
            require "polonium/driver"
         
     | 
| 
      
 17 
     | 
    
         
            +
            require "polonium/server_runner"
         
     | 
| 
      
 18 
     | 
    
         
            +
            require "polonium/mongrel_selenium_server_runner"
         
     | 
| 
      
 19 
     | 
    
         
            +
            require "polonium/webrick_selenium_server_runner"
         
     | 
| 
      
 20 
     | 
    
         
            +
            require "polonium/dsl/selenium_dsl"
         
     | 
| 
      
 21 
     | 
    
         
            +
            require "polonium/dsl/test_unit_dsl"
         
     | 
| 
      
 22 
     | 
    
         
            +
            require "polonium/configuration"
         
     | 
| 
      
 23 
     | 
    
         
            +
            require "polonium/page"
         
     | 
| 
      
 24 
     | 
    
         
            +
            require "polonium/element"
         
     | 
| 
      
 25 
     | 
    
         
            +
            require "polonium/test_case"
         
     | 
| 
      
 26 
     | 
    
         
            +
            require "polonium/tasks/selenium_test_task"
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
            require 'webrick_server' if self.class.const_defined? :RAILS_ROOT
         
     | 
| 
         @@ -0,0 +1,271 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Polonium
         
     | 
| 
      
 2 
     | 
    
         
            +
              # The configuration interface. This Configuration acts as a singleton to a SeleniumContext.
         
     | 
| 
      
 3 
     | 
    
         
            +
              # You can access the Configuration object by calling
         
     | 
| 
      
 4 
     | 
    
         
            +
              #   Polonium::Configuration.instance
         
     | 
| 
      
 5 
     | 
    
         
            +
              class Configuration
         
     | 
| 
      
 6 
     | 
    
         
            +
                module BrowserMode
         
     | 
| 
      
 7 
     | 
    
         
            +
                  Suite = "suite" unless const_defined? :Suite
         
     | 
| 
      
 8 
     | 
    
         
            +
                  Test = "test" unless const_defined? :Test
         
     | 
| 
      
 9 
     | 
    
         
            +
                end
         
     | 
| 
      
 10 
     | 
    
         
            +
                FIREFOX = "firefox" unless const_defined? :FIREFOX
         
     | 
| 
      
 11 
     | 
    
         
            +
                IEXPLORE = "iexplore" unless const_defined? :IEXPLORE
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                class << self
         
     | 
| 
      
 14 
     | 
    
         
            +
                  # The instance of the Singleton Configuration. On its initial call, the initial configuration is set.
         
     | 
| 
      
 15 
     | 
    
         
            +
                  # The initial configuration is based on Environment variables and defaults.
         
     | 
| 
      
 16 
     | 
    
         
            +
                  # The environment variables are:
         
     | 
| 
      
 17 
     | 
    
         
            +
                  # * RAILS_ENV - The Rails environment (defaults: test)
         
     | 
| 
      
 18 
     | 
    
         
            +
                  # * selenium_server_host - The host name for the Selenium RC server (default: localhost)
         
     | 
| 
      
 19 
     | 
    
         
            +
                  # * selenium_server_port - The port for the Selenium RC server (default: 4444)
         
     | 
| 
      
 20 
     | 
    
         
            +
                  # * webrick_host - The host name that the application server will start under (default: localhost)
         
     | 
| 
      
 21 
     | 
    
         
            +
                  # * webrick_port - The port that the application server will start under (default: 4000)
         
     | 
| 
      
 22 
     | 
    
         
            +
                  # * app_server_engine - The type of server the application will be run with (webrick or mongrel)
         
     | 
| 
      
 23 
     | 
    
         
            +
                  # * internal_app_server_host - The host name for the Application server that the Browser will access (default: localhost)
         
     | 
| 
      
 24 
     | 
    
         
            +
                  # * internal_app_server_host - The port for the Application server that the Browser will access (default: 4000)
         
     | 
| 
      
 25 
     | 
    
         
            +
                  # * keep_browser_open_on_failure - If there is a failure in the test suite, keep the browser window open (default: false)
         
     | 
| 
      
 26 
     | 
    
         
            +
                  # * verify_remote_app_server_is_running - Raise an exception if the Application Server is not running (default: true)
         
     | 
| 
      
 27 
     | 
    
         
            +
                  def instance
         
     | 
| 
      
 28 
     | 
    
         
            +
                    return @instance if @instance
         
     | 
| 
      
 29 
     | 
    
         
            +
                    @instance = new
         
     | 
| 
      
 30 
     | 
    
         
            +
                    @instance.env = ENV
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
                    @instance.browser = FIREFOX
         
     | 
| 
      
 33 
     | 
    
         
            +
                    @instance.selenium_server_host = "localhost"     # address of selenium RC server (java)
         
     | 
| 
      
 34 
     | 
    
         
            +
                    @instance.selenium_server_port = 4444
         
     | 
| 
      
 35 
     | 
    
         
            +
                    @instance.app_server_engine = :webrick
         
     | 
| 
      
 36 
     | 
    
         
            +
                    @instance.internal_app_server_host = "0.0.0.0"    # internal address of app server (webrick or mongrel)
         
     | 
| 
      
 37 
     | 
    
         
            +
                    @instance.internal_app_server_port = 4000
         
     | 
| 
      
 38 
     | 
    
         
            +
                    @instance.external_app_server_host = "localhost"             # external address of app server (webrick or mongrel)
         
     | 
| 
      
 39 
     | 
    
         
            +
                    @instance.external_app_server_port = 4000
         
     | 
| 
      
 40 
     | 
    
         
            +
                    @instance.server_engine = :webrick
         
     | 
| 
      
 41 
     | 
    
         
            +
                    @instance.keep_browser_open_on_failure = false
         
     | 
| 
      
 42 
     | 
    
         
            +
                    @instance.browser_mode = BrowserMode::Suite
         
     | 
| 
      
 43 
     | 
    
         
            +
                    @instance.verify_remote_app_server_is_running = true
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
                    establish_environment
         
     | 
| 
      
 46 
     | 
    
         
            +
                    @instance
         
     | 
| 
      
 47 
     | 
    
         
            +
                  end
         
     | 
| 
      
 48 
     | 
    
         
            +
                  attr_writer :instance
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
                  private
         
     | 
| 
      
 51 
     | 
    
         
            +
                  def establish_environment
         
     | 
| 
      
 52 
     | 
    
         
            +
                    @instance.rails_env = env['RAILS_ENV'] if env.include?('RAILS_ENV')
         
     | 
| 
      
 53 
     | 
    
         
            +
                    @instance.rails_root = Object.const_get(:RAILS_ROOT) if Object.const_defined?(:RAILS_ROOT)
         
     | 
| 
      
 54 
     | 
    
         
            +
                    [
         
     | 
| 
      
 55 
     | 
    
         
            +
                      'selenium_server_host',
         
     | 
| 
      
 56 
     | 
    
         
            +
                      'selenium_server_port',
         
     | 
| 
      
 57 
     | 
    
         
            +
                      'internal_app_server_port',
         
     | 
| 
      
 58 
     | 
    
         
            +
                      'internal_app_server_host',
         
     | 
| 
      
 59 
     | 
    
         
            +
                      'app_server_engine',
         
     | 
| 
      
 60 
     | 
    
         
            +
                      'external_app_server_host',
         
     | 
| 
      
 61 
     | 
    
         
            +
                      'external_app_server_port'
         
     | 
| 
      
 62 
     | 
    
         
            +
                    ].each do |env_key|
         
     | 
| 
      
 63 
     | 
    
         
            +
                      if env.include?(env_key)
         
     | 
| 
      
 64 
     | 
    
         
            +
                        @instance.send("#{env_key}=", env[env_key])
         
     | 
| 
      
 65 
     | 
    
         
            +
                      end
         
     | 
| 
      
 66 
     | 
    
         
            +
                    end
         
     | 
| 
      
 67 
     | 
    
         
            +
                    [
         
     | 
| 
      
 68 
     | 
    
         
            +
                      'keep_browser_open_on_failure',
         
     | 
| 
      
 69 
     | 
    
         
            +
                      'verify_remote_app_server_is_running'
         
     | 
| 
      
 70 
     | 
    
         
            +
                    ].each do |env_key|
         
     | 
| 
      
 71 
     | 
    
         
            +
                      if env.include?(env_key)
         
     | 
| 
      
 72 
     | 
    
         
            +
                        @instance.send("#{env_key}=", env[env_key].to_s != false.to_s)
         
     | 
| 
      
 73 
     | 
    
         
            +
                      end
         
     | 
| 
      
 74 
     | 
    
         
            +
                    end
         
     | 
| 
      
 75 
     | 
    
         
            +
                    @instance.browser = env['browser'] if env.include?('browser')
         
     | 
| 
      
 76 
     | 
    
         
            +
                  end
         
     | 
| 
      
 77 
     | 
    
         
            +
             
     | 
| 
      
 78 
     | 
    
         
            +
                  def env
         
     | 
| 
      
 79 
     | 
    
         
            +
                    @instance.env
         
     | 
| 
      
 80 
     | 
    
         
            +
                  end
         
     | 
| 
      
 81 
     | 
    
         
            +
                end
         
     | 
| 
      
 82 
     | 
    
         
            +
             
     | 
| 
      
 83 
     | 
    
         
            +
                    attr_accessor :configuration,
         
     | 
| 
      
 84 
     | 
    
         
            +
                              :env,
         
     | 
| 
      
 85 
     | 
    
         
            +
                              :rails_env,
         
     | 
| 
      
 86 
     | 
    
         
            +
                              :rails_root,
         
     | 
| 
      
 87 
     | 
    
         
            +
                              :browser,
         
     | 
| 
      
 88 
     | 
    
         
            +
                              :driver,
         
     | 
| 
      
 89 
     | 
    
         
            +
                              :browser_mode,
         
     | 
| 
      
 90 
     | 
    
         
            +
                              :selenium_server_host,
         
     | 
| 
      
 91 
     | 
    
         
            +
                              :selenium_server_port,
         
     | 
| 
      
 92 
     | 
    
         
            +
                              :app_server_engine,
         
     | 
| 
      
 93 
     | 
    
         
            +
                              :internal_app_server_host,
         
     | 
| 
      
 94 
     | 
    
         
            +
                              :internal_app_server_port,
         
     | 
| 
      
 95 
     | 
    
         
            +
                              :external_app_server_host,
         
     | 
| 
      
 96 
     | 
    
         
            +
                              :external_app_server_port,
         
     | 
| 
      
 97 
     | 
    
         
            +
                              :server_engine,
         
     | 
| 
      
 98 
     | 
    
         
            +
                              :keep_browser_open_on_failure,
         
     | 
| 
      
 99 
     | 
    
         
            +
                              :verify_remote_app_server_is_running,
         
     | 
| 
      
 100 
     | 
    
         
            +
                              :app_server_initialization
         
     | 
| 
      
 101 
     | 
    
         
            +
             
     | 
| 
      
 102 
     | 
    
         
            +
                def initialize
         
     | 
| 
      
 103 
     | 
    
         
            +
                  self.verify_remote_app_server_is_running = true
         
     | 
| 
      
 104 
     | 
    
         
            +
                  @after_driver_started_listeners = []
         
     | 
| 
      
 105 
     | 
    
         
            +
                  @app_server_initialization = proc {}
         
     | 
| 
      
 106 
     | 
    
         
            +
                  @failure_has_occurred = false
         
     | 
| 
      
 107 
     | 
    
         
            +
                end
         
     | 
| 
      
 108 
     | 
    
         
            +
             
     | 
| 
      
 109 
     | 
    
         
            +
                # A callback hook that gets run after the Selenese Interpreter is started.
         
     | 
| 
      
 110 
     | 
    
         
            +
                def after_driver_started(&block)
         
     | 
| 
      
 111 
     | 
    
         
            +
                  @after_driver_started_listeners << block
         
     | 
| 
      
 112 
     | 
    
         
            +
                end
         
     | 
| 
      
 113 
     | 
    
         
            +
             
     | 
| 
      
 114 
     | 
    
         
            +
                # Notify all after_driver_started callbacks.
         
     | 
| 
      
 115 
     | 
    
         
            +
                def notify_after_driver_started(driver)
         
     | 
| 
      
 116 
     | 
    
         
            +
                  for listener in @after_driver_started_listeners
         
     | 
| 
      
 117 
     | 
    
         
            +
                    listener.call(driver)
         
     | 
| 
      
 118 
     | 
    
         
            +
                  end
         
     | 
| 
      
 119 
     | 
    
         
            +
                end
         
     | 
| 
      
 120 
     | 
    
         
            +
             
     | 
| 
      
 121 
     | 
    
         
            +
                # The browser formatted for the Selenese driver.
         
     | 
| 
      
 122 
     | 
    
         
            +
                def formatted_browser
         
     | 
| 
      
 123 
     | 
    
         
            +
                  return "*#{@browser}"
         
     | 
| 
      
 124 
     | 
    
         
            +
                end
         
     | 
| 
      
 125 
     | 
    
         
            +
             
     | 
| 
      
 126 
     | 
    
         
            +
                # Has a failure occurred in the tests?
         
     | 
| 
      
 127 
     | 
    
         
            +
                def failure_has_occurred?
         
     | 
| 
      
 128 
     | 
    
         
            +
                  @failure_has_occurred = true
         
     | 
| 
      
 129 
     | 
    
         
            +
                end
         
     | 
| 
      
 130 
     | 
    
         
            +
             
     | 
| 
      
 131 
     | 
    
         
            +
                # The http host name and port to be entered into the browser address bar
         
     | 
| 
      
 132 
     | 
    
         
            +
                def browser_url
         
     | 
| 
      
 133 
     | 
    
         
            +
                  "http://#{external_app_server_host}:#{external_app_server_port}"
         
     | 
| 
      
 134 
     | 
    
         
            +
                end
         
     | 
| 
      
 135 
     | 
    
         
            +
             
     | 
| 
      
 136 
     | 
    
         
            +
                # The root directory (public) of the Rails application
         
     | 
| 
      
 137 
     | 
    
         
            +
                def server_root
         
     | 
| 
      
 138 
     | 
    
         
            +
                  File.expand_path("#{rails_root}/public/")
         
     | 
| 
      
 139 
     | 
    
         
            +
                end
         
     | 
| 
      
 140 
     | 
    
         
            +
             
     | 
| 
      
 141 
     | 
    
         
            +
                # Sets the Test Suite to open a new browser instance for each TestCase
         
     | 
| 
      
 142 
     | 
    
         
            +
                def test_browser_mode
         
     | 
| 
      
 143 
     | 
    
         
            +
                  @browser_mode = Configuration::BrowserMode::Test
         
     | 
| 
      
 144 
     | 
    
         
            +
                end
         
     | 
| 
      
 145 
     | 
    
         
            +
             
     | 
| 
      
 146 
     | 
    
         
            +
                # Are we going to open a new browser instance for each TestCase?
         
     | 
| 
      
 147 
     | 
    
         
            +
                def test_browser_mode?
         
     | 
| 
      
 148 
     | 
    
         
            +
                  @browser_mode == Configuration::BrowserMode::Test
         
     | 
| 
      
 149 
     | 
    
         
            +
                end
         
     | 
| 
      
 150 
     | 
    
         
            +
             
     | 
| 
      
 151 
     | 
    
         
            +
                # Sets the Test Suite to use one browser instance
         
     | 
| 
      
 152 
     | 
    
         
            +
                def suite_browser_mode
         
     | 
| 
      
 153 
     | 
    
         
            +
                  @browser_mode = Configuration::BrowserMode::Suite
         
     | 
| 
      
 154 
     | 
    
         
            +
                end
         
     | 
| 
      
 155 
     | 
    
         
            +
             
     | 
| 
      
 156 
     | 
    
         
            +
                # Does the Test Suite to use one browser instance?
         
     | 
| 
      
 157 
     | 
    
         
            +
                def suite_browser_mode?
         
     | 
| 
      
 158 
     | 
    
         
            +
                  @browser_mode == Configuration::BrowserMode::Suite
         
     | 
| 
      
 159 
     | 
    
         
            +
                end
         
     | 
| 
      
 160 
     | 
    
         
            +
             
     | 
| 
      
 161 
     | 
    
         
            +
                # The Driver object, which sublcasses the Driver provided by the Selenium RC (http://openqa.org/selenium-rc/) project.
         
     | 
| 
      
 162 
     | 
    
         
            +
                def driver
         
     | 
| 
      
 163 
     | 
    
         
            +
                  return nil unless suite_browser_mode?
         
     | 
| 
      
 164 
     | 
    
         
            +
                  @driver ||= create_and_initialize_driver
         
     | 
| 
      
 165 
     | 
    
         
            +
                end
         
     | 
| 
      
 166 
     | 
    
         
            +
             
     | 
| 
      
 167 
     | 
    
         
            +
                def stop_driver_if_necessary(suite_passed) # nodoc
         
     | 
| 
      
 168 
     | 
    
         
            +
                  failure_has_occurred unless suite_passed
         
     | 
| 
      
 169 
     | 
    
         
            +
                  if @driver && stop_driver?(suite_passed)
         
     | 
| 
      
 170 
     | 
    
         
            +
                    @driver.stop
         
     | 
| 
      
 171 
     | 
    
         
            +
                    @driver = nil
         
     | 
| 
      
 172 
     | 
    
         
            +
                  end
         
     | 
| 
      
 173 
     | 
    
         
            +
                end
         
     | 
| 
      
 174 
     | 
    
         
            +
             
     | 
| 
      
 175 
     | 
    
         
            +
                def stop_driver?(passed) # nodoc
         
     | 
| 
      
 176 
     | 
    
         
            +
                  return true if passed
         
     | 
| 
      
 177 
     | 
    
         
            +
                  return !keep_browser_open_on_failure
         
     | 
| 
      
 178 
     | 
    
         
            +
                end
         
     | 
| 
      
 179 
     | 
    
         
            +
             
     | 
| 
      
 180 
     | 
    
         
            +
                def create_and_initialize_driver # nodoc
         
     | 
| 
      
 181 
     | 
    
         
            +
                  driver = create_driver
         
     | 
| 
      
 182 
     | 
    
         
            +
                  driver.start
         
     | 
| 
      
 183 
     | 
    
         
            +
                  notify_after_driver_started(driver)
         
     | 
| 
      
 184 
     | 
    
         
            +
                  driver
         
     | 
| 
      
 185 
     | 
    
         
            +
                end
         
     | 
| 
      
 186 
     | 
    
         
            +
             
     | 
| 
      
 187 
     | 
    
         
            +
                def create_driver # nodoc
         
     | 
| 
      
 188 
     | 
    
         
            +
                  return ::Polonium::Driver.new(
         
     | 
| 
      
 189 
     | 
    
         
            +
                    selenium_server_host,
         
     | 
| 
      
 190 
     | 
    
         
            +
                    selenium_server_port,
         
     | 
| 
      
 191 
     | 
    
         
            +
                    formatted_browser,
         
     | 
| 
      
 192 
     | 
    
         
            +
                    browser_url,
         
     | 
| 
      
 193 
     | 
    
         
            +
                    15000
         
     | 
| 
      
 194 
     | 
    
         
            +
                  )
         
     | 
| 
      
 195 
     | 
    
         
            +
                end
         
     | 
| 
      
 196 
     | 
    
         
            +
             
     | 
| 
      
 197 
     | 
    
         
            +
                def create_server_runner # nodoc
         
     | 
| 
      
 198 
     | 
    
         
            +
                  case @app_server_engine.to_sym
         
     | 
| 
      
 199 
     | 
    
         
            +
                  when :mongrel
         
     | 
| 
      
 200 
     | 
    
         
            +
                    create_mongrel_runner
         
     | 
| 
      
 201 
     | 
    
         
            +
                  when :webrick
         
     | 
| 
      
 202 
     | 
    
         
            +
                    create_webrick_runner
         
     | 
| 
      
 203 
     | 
    
         
            +
                  else
         
     | 
| 
      
 204 
     | 
    
         
            +
                    raise "Invalid server type: #{selenium_configuration.app_server_type}"
         
     | 
| 
      
 205 
     | 
    
         
            +
                  end
         
     | 
| 
      
 206 
     | 
    
         
            +
                end
         
     | 
| 
      
 207 
     | 
    
         
            +
             
     | 
| 
      
 208 
     | 
    
         
            +
                def create_webrick_runner # nodoc
         
     | 
| 
      
 209 
     | 
    
         
            +
                  require 'webrick_server'
         
     | 
| 
      
 210 
     | 
    
         
            +
                  runner = WebrickSeleniumServerRunner.new
         
     | 
| 
      
 211 
     | 
    
         
            +
                  runner.configuration = self
         
     | 
| 
      
 212 
     | 
    
         
            +
                  runner.thread_class = Thread
         
     | 
| 
      
 213 
     | 
    
         
            +
                  runner.socket = Socket
         
     | 
| 
      
 214 
     | 
    
         
            +
                  runner.dispatch_servlet = DispatchServlet
         
     | 
| 
      
 215 
     | 
    
         
            +
                  runner.environment_path = File.expand_path("#{@rails_root}/config/environment")
         
     | 
| 
      
 216 
     | 
    
         
            +
                  runner
         
     | 
| 
      
 217 
     | 
    
         
            +
                end
         
     | 
| 
      
 218 
     | 
    
         
            +
             
     | 
| 
      
 219 
     | 
    
         
            +
                def create_webrick_server # nodoc
         
     | 
| 
      
 220 
     | 
    
         
            +
                  WEBrick::HTTPServer.new({
         
     | 
| 
      
 221 
     | 
    
         
            +
                    :Port => @internal_app_server_port,
         
     | 
| 
      
 222 
     | 
    
         
            +
                    :BindAddress => @internal_app_server_host,
         
     | 
| 
      
 223 
     | 
    
         
            +
                    :ServerType  => WEBrick::SimpleServer,
         
     | 
| 
      
 224 
     | 
    
         
            +
                    :MimeTypes => WEBrick::HTTPUtils::DefaultMimeTypes,
         
     | 
| 
      
 225 
     | 
    
         
            +
                    :Logger => new_logger,
         
     | 
| 
      
 226 
     | 
    
         
            +
                    :AccessLog => []
         
     | 
| 
      
 227 
     | 
    
         
            +
                  })
         
     | 
| 
      
 228 
     | 
    
         
            +
                end
         
     | 
| 
      
 229 
     | 
    
         
            +
             
     | 
| 
      
 230 
     | 
    
         
            +
                def new_logger
         
     | 
| 
      
 231 
     | 
    
         
            +
                  Logger.new(StringIO.new)
         
     | 
| 
      
 232 
     | 
    
         
            +
                end
         
     | 
| 
      
 233 
     | 
    
         
            +
             
     | 
| 
      
 234 
     | 
    
         
            +
                def create_mongrel_runner # nodoc
         
     | 
| 
      
 235 
     | 
    
         
            +
                  runner = MongrelSeleniumServerRunner.new
         
     | 
| 
      
 236 
     | 
    
         
            +
                  runner.configuration = self
         
     | 
| 
      
 237 
     | 
    
         
            +
                  runner.thread_class = Thread
         
     | 
| 
      
 238 
     | 
    
         
            +
                  runner
         
     | 
| 
      
 239 
     | 
    
         
            +
                end
         
     | 
| 
      
 240 
     | 
    
         
            +
             
     | 
| 
      
 241 
     | 
    
         
            +
                def create_mongrel_configurator # nodoc
         
     | 
| 
      
 242 
     | 
    
         
            +
                  dir = File.dirname(__FILE__)
         
     | 
| 
      
 243 
     | 
    
         
            +
                  require 'mongrel/rails'
         
     | 
| 
      
 244 
     | 
    
         
            +
                  settings = {
         
     | 
| 
      
 245 
     | 
    
         
            +
                    :host => internal_app_server_host,
         
     | 
| 
      
 246 
     | 
    
         
            +
                    :port => internal_app_server_port,
         
     | 
| 
      
 247 
     | 
    
         
            +
                    :cwd => @rails_root,
         
     | 
| 
      
 248 
     | 
    
         
            +
                    :log_file => "#{@rails_root}/log/mongrel.log",
         
     | 
| 
      
 249 
     | 
    
         
            +
                    :pid_file => "#{@rails_root}/log/mongrel.pid",
         
     | 
| 
      
 250 
     | 
    
         
            +
                    :environment => @rails_env,
         
     | 
| 
      
 251 
     | 
    
         
            +
                    :docroot => "#{@rails_root}/public",
         
     | 
| 
      
 252 
     | 
    
         
            +
                    :mime_map => nil,
         
     | 
| 
      
 253 
     | 
    
         
            +
                    :daemon => false,
         
     | 
| 
      
 254 
     | 
    
         
            +
                    :debug => false,
         
     | 
| 
      
 255 
     | 
    
         
            +
                    :includes => ["mongrel"],
         
     | 
| 
      
 256 
     | 
    
         
            +
                    :config_script => nil
         
     | 
| 
      
 257 
     | 
    
         
            +
                  }
         
     | 
| 
      
 258 
     | 
    
         
            +
             
     | 
| 
      
 259 
     | 
    
         
            +
                  configurator = Mongrel::Rails::RailsConfigurator.new(settings) do
         
     | 
| 
      
 260 
     | 
    
         
            +
                    log "Starting Mongrel in #{defaults[:environment]} mode at #{defaults[:host]}:#{defaults[:port]}"
         
     | 
| 
      
 261 
     | 
    
         
            +
                  end
         
     | 
| 
      
 262 
     | 
    
         
            +
                  configurator
         
     | 
| 
      
 263 
     | 
    
         
            +
                end
         
     | 
| 
      
 264 
     | 
    
         
            +
             
     | 
| 
      
 265 
     | 
    
         
            +
                protected
         
     | 
| 
      
 266 
     | 
    
         
            +
                # Sets the failure state to true
         
     | 
| 
      
 267 
     | 
    
         
            +
                def failure_has_occurred
         
     | 
| 
      
 268 
     | 
    
         
            +
                  @failure_has_occurred = true
         
     | 
| 
      
 269 
     | 
    
         
            +
                end
         
     | 
| 
      
 270 
     | 
    
         
            +
              end
         
     | 
| 
      
 271 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,155 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Polonium
         
     | 
| 
      
 2 
     | 
    
         
            +
              class Driver < ::Selenium::SeleniumDriver
         
     | 
| 
      
 3 
     | 
    
         
            +
                include WaitFor
         
     | 
| 
      
 4 
     | 
    
         
            +
                attr_reader :server_host, :server_port
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
                def browser_start_command
         
     | 
| 
      
 7 
     | 
    
         
            +
                  @browserStartCommand
         
     | 
| 
      
 8 
     | 
    
         
            +
                end
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
                def browser_url
         
     | 
| 
      
 11 
     | 
    
         
            +
                  @browserURL
         
     | 
| 
      
 12 
     | 
    
         
            +
                end
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
                def timeout_in_milliseconds
         
     | 
| 
      
 15 
     | 
    
         
            +
                  @timeout
         
     | 
| 
      
 16 
     | 
    
         
            +
                end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                def insert_javascript_file(uri)
         
     | 
| 
      
 19 
     | 
    
         
            +
                  js = <<-USEREXTENSIONS
         
     | 
| 
      
 20 
     | 
    
         
            +
                  var headTag = document.getElementsByTagName("head").item(0);
         
     | 
| 
      
 21 
     | 
    
         
            +
                  var scriptTag = document.createElement("script");
         
     | 
| 
      
 22 
     | 
    
         
            +
                  scriptTag.src = "#{uri}";
         
     | 
| 
      
 23 
     | 
    
         
            +
                  headTag.appendChild( scriptTag );
         
     | 
| 
      
 24 
     | 
    
         
            +
                  USEREXTENSIONS
         
     | 
| 
      
 25 
     | 
    
         
            +
                  get_eval(js)
         
     | 
| 
      
 26 
     | 
    
         
            +
                end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                def insert_user_extensions
         
     | 
| 
      
 29 
     | 
    
         
            +
                  insert_javascript_file("/selenium/user-extensions.js")
         
     | 
| 
      
 30 
     | 
    
         
            +
                end
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
                def element(locator)
         
     | 
| 
      
 33 
     | 
    
         
            +
                  Element.new(self, locator)
         
     | 
| 
      
 34 
     | 
    
         
            +
                end
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
                def page
         
     | 
| 
      
 37 
     | 
    
         
            +
                  Page.new(self)
         
     | 
| 
      
 38 
     | 
    
         
            +
                end
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
                #--------- Commands
         
     | 
| 
      
 41 
     | 
    
         
            +
                alias_method :confirm, :get_confirmation
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
                # Type text into a page element
         
     | 
| 
      
 44 
     | 
    
         
            +
                def type(locator, value)
         
     | 
| 
      
 45 
     | 
    
         
            +
                  wait_for_is_element_present(locator)
         
     | 
| 
      
 46 
     | 
    
         
            +
                  super
         
     | 
| 
      
 47 
     | 
    
         
            +
                end
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
                # Reload the current page that the browser is on.
         
     | 
| 
      
 50 
     | 
    
         
            +
                def reload
         
     | 
| 
      
 51 
     | 
    
         
            +
                  get_eval("selenium.browserbot.getCurrentWindow().location.reload()")
         
     | 
| 
      
 52 
     | 
    
         
            +
                end
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
      
 54 
     | 
    
         
            +
                def click(locator)
         
     | 
| 
      
 55 
     | 
    
         
            +
                  wait_for_is_element_present(locator)
         
     | 
| 
      
 56 
     | 
    
         
            +
                  super
         
     | 
| 
      
 57 
     | 
    
         
            +
                end
         
     | 
| 
      
 58 
     | 
    
         
            +
                alias_method :wait_for_and_click, :click
         
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
      
 60 
     | 
    
         
            +
                def select(select_locator, option_locator)
         
     | 
| 
      
 61 
     | 
    
         
            +
                  wait_for_is_element_present(select_locator)
         
     | 
| 
      
 62 
     | 
    
         
            +
                  super
         
     | 
| 
      
 63 
     | 
    
         
            +
                end
         
     | 
| 
      
 64 
     | 
    
         
            +
                
         
     | 
| 
      
 65 
     | 
    
         
            +
                # Click a link and wait for the page to load.
         
     | 
| 
      
 66 
     | 
    
         
            +
                def click_and_wait(locator, wait_for = default_timeout)
         
     | 
| 
      
 67 
     | 
    
         
            +
                  click locator
         
     | 
| 
      
 68 
     | 
    
         
            +
                  wait_for_page_to_load(wait_for)
         
     | 
| 
      
 69 
     | 
    
         
            +
                end
         
     | 
| 
      
 70 
     | 
    
         
            +
                alias_method :click_and_wait_for_page_to_load, :click_and_wait
         
     | 
| 
      
 71 
     | 
    
         
            +
             
     | 
| 
      
 72 
     | 
    
         
            +
                # Click the back button and wait for the page to load.
         
     | 
| 
      
 73 
     | 
    
         
            +
                def go_back_and_wait
         
     | 
| 
      
 74 
     | 
    
         
            +
                  go_back
         
     | 
| 
      
 75 
     | 
    
         
            +
                  wait_for_page_to_load
         
     | 
| 
      
 76 
     | 
    
         
            +
                end
         
     | 
| 
      
 77 
     | 
    
         
            +
             
     | 
| 
      
 78 
     | 
    
         
            +
                # Open the home page of the Application and wait for the page to load.
         
     | 
| 
      
 79 
     | 
    
         
            +
                def open(url)
         
     | 
| 
      
 80 
     | 
    
         
            +
                  super
         
     | 
| 
      
 81 
     | 
    
         
            +
                  wait_for_page_to_load
         
     | 
| 
      
 82 
     | 
    
         
            +
                end
         
     | 
| 
      
 83 
     | 
    
         
            +
                alias_method :open_and_wait, :open
         
     | 
| 
      
 84 
     | 
    
         
            +
             
     | 
| 
      
 85 
     | 
    
         
            +
                # Get the inner html of the located element.
         
     | 
| 
      
 86 
     | 
    
         
            +
                def get_inner_html(locator)
         
     | 
| 
      
 87 
     | 
    
         
            +
                  get_eval(inner_html_js(locator))
         
     | 
| 
      
 88 
     | 
    
         
            +
                end
         
     | 
| 
      
 89 
     | 
    
         
            +
             
     | 
| 
      
 90 
     | 
    
         
            +
                # Does the element at locator contain the text?
         
     | 
| 
      
 91 
     | 
    
         
            +
                def element_contains_text(locator, text)
         
     | 
| 
      
 92 
     | 
    
         
            +
                  is_element_present(locator) && element(locator).contains?(text)
         
     | 
| 
      
 93 
     | 
    
         
            +
                end
         
     | 
| 
      
 94 
     | 
    
         
            +
             
     | 
| 
      
 95 
     | 
    
         
            +
                # Does the element at locator not contain the text?
         
     | 
| 
      
 96 
     | 
    
         
            +
                def element_does_not_contain_text(locator, text)
         
     | 
| 
      
 97 
     | 
    
         
            +
                  return true unless is_element_present(locator)
         
     | 
| 
      
 98 
     | 
    
         
            +
                  return !element(locator).contains?(text)
         
     | 
| 
      
 99 
     | 
    
         
            +
                end
         
     | 
| 
      
 100 
     | 
    
         
            +
             
     | 
| 
      
 101 
     | 
    
         
            +
                #----- Waiting for conditions
         
     | 
| 
      
 102 
     | 
    
         
            +
                def wait_for_is_element_present(locator, params={})
         
     | 
| 
      
 103 
     | 
    
         
            +
                  params = {
         
     | 
| 
      
 104 
     | 
    
         
            +
                    :message => "Expected element '#{locator}' to be present, but it was not"
         
     | 
| 
      
 105 
     | 
    
         
            +
                  }.merge(params)
         
     | 
| 
      
 106 
     | 
    
         
            +
                  wait_for(params) do
         
     | 
| 
      
 107 
     | 
    
         
            +
                    is_element_present(locator)
         
     | 
| 
      
 108 
     | 
    
         
            +
                  end
         
     | 
| 
      
 109 
     | 
    
         
            +
                end
         
     | 
| 
      
 110 
     | 
    
         
            +
             
     | 
| 
      
 111 
     | 
    
         
            +
                def wait_for_is_element_not_present(locator, params={})
         
     | 
| 
      
 112 
     | 
    
         
            +
                  params = {
         
     | 
| 
      
 113 
     | 
    
         
            +
                    :message => "Expected element '#{locator}' to be absent, but it was not"
         
     | 
| 
      
 114 
     | 
    
         
            +
                  }.merge(params)
         
     | 
| 
      
 115 
     | 
    
         
            +
                  wait_for(:message => params[:message]) do
         
     | 
| 
      
 116 
     | 
    
         
            +
                    !is_element_present(locator)
         
     | 
| 
      
 117 
     | 
    
         
            +
                  end
         
     | 
| 
      
 118 
     | 
    
         
            +
                end
         
     | 
| 
      
 119 
     | 
    
         
            +
             
     | 
| 
      
 120 
     | 
    
         
            +
                def wait_for_page_to_load(timeout=default_timeout)
         
     | 
| 
      
 121 
     | 
    
         
            +
                  super
         
     | 
| 
      
 122 
     | 
    
         
            +
                  if get_title.include?("Exception caught")
         
     | 
| 
      
 123 
     | 
    
         
            +
                    flunk "We got a new page, but it was an application exception page.\n\n#{get_html_source}"
         
     | 
| 
      
 124 
     | 
    
         
            +
                  end
         
     | 
| 
      
 125 
     | 
    
         
            +
                end
         
     | 
| 
      
 126 
     | 
    
         
            +
             
     | 
| 
      
 127 
     | 
    
         
            +
                def wait_for_element_to_contain(locator, text, message=nil, timeout=default_wait_for_time)
         
     | 
| 
      
 128 
     | 
    
         
            +
                  wait_for(:message => message, :timeout => timeout) do
         
     | 
| 
      
 129 
     | 
    
         
            +
                    element_contains_text(locator, text)
         
     | 
| 
      
 130 
     | 
    
         
            +
                  end
         
     | 
| 
      
 131 
     | 
    
         
            +
                end
         
     | 
| 
      
 132 
     | 
    
         
            +
                alias_method :wait_for_element_to_contain_text, :wait_for_element_to_contain
         
     | 
| 
      
 133 
     | 
    
         
            +
             
     | 
| 
      
 134 
     | 
    
         
            +
                # Open the log window on the browser. This is useful to diagnose issues with Selenium Core.
         
     | 
| 
      
 135 
     | 
    
         
            +
                def show_log(log_level = "debug")
         
     | 
| 
      
 136 
     | 
    
         
            +
                  get_eval "LOG.setLogLevelThreshold('#{log_level}')"
         
     | 
| 
      
 137 
     | 
    
         
            +
                end
         
     | 
| 
      
 138 
     | 
    
         
            +
             
     | 
| 
      
 139 
     | 
    
         
            +
                # Slow down each Selenese step after this method is called.
         
     | 
| 
      
 140 
     | 
    
         
            +
                def slow_mode
         
     | 
| 
      
 141 
     | 
    
         
            +
                  get_eval "slowMode = true"
         
     | 
| 
      
 142 
     | 
    
         
            +
                  get_eval 'window.document.getElementsByName("FASTMODE")[0].checked = true'
         
     | 
| 
      
 143 
     | 
    
         
            +
                end
         
     | 
| 
      
 144 
     | 
    
         
            +
             
     | 
| 
      
 145 
     | 
    
         
            +
                # Speeds up each Selenese step to normal speed after this method is called.
         
     | 
| 
      
 146 
     | 
    
         
            +
                def fast_mode
         
     | 
| 
      
 147 
     | 
    
         
            +
                  get_eval "slowMode = false"
         
     | 
| 
      
 148 
     | 
    
         
            +
                  get_eval 'window.document.getElementsByName("FASTMODE")[0].checked = false'
         
     | 
| 
      
 149 
     | 
    
         
            +
                end
         
     | 
| 
      
 150 
     | 
    
         
            +
             
     | 
| 
      
 151 
     | 
    
         
            +
                def inner_html_js(locator)
         
     | 
| 
      
 152 
     | 
    
         
            +
                  %Q|this.page().findElement("#{locator}").innerHTML|
         
     | 
| 
      
 153 
     | 
    
         
            +
                end
         
     | 
| 
      
 154 
     | 
    
         
            +
              end
         
     | 
| 
      
 155 
     | 
    
         
            +
            end
         
     |