updated from master

This commit is contained in:
Mike Gaffney 2008-12-27 17:22:51 -06:00
parent fbcd509097
commit 449edf4a10
25 changed files with 353 additions and 124 deletions

1
.gitignore vendored
View File

@ -10,3 +10,4 @@ log
.loadpath
*.swp
results
test_apps

View File

@ -6,9 +6,13 @@
* Removed auto-require of webrat/rails when requiring webrat when RAILS_ENV is
defined
In your env.rb file, ensure you have:
In your env.rb or test_helper.rb file, ensure you have something like:
require "webrat/rails"
require "webrat"
Webrat.configure do |config|
config.mode = :rails
end
* Major enhancements
@ -16,7 +20,10 @@
* Use Hpricot and REXML when not parsing with Nokogiri (on JRuby, for example)
* Minor enhancements
* Now sets the mode with configuration.mode in the block (Mike Gaffney, Ticket #85)
* Added assert_contain, assert_not_contain [#86] (Mike Gaffney)
* Maximize the browser window after initializing Selenium (Luke Melia)
* Better inspect output for Webrat elements
* Sets the Webrat mode with Configuration#mode= in the config block [#85] (Mike Gaffney)
* Detect if the document is XML or HTML using the Content-Type when in Rails mode
* Expose #selenium method for direct access to Selenium client
* Check nokogiri gem version before requiring nokogiri
@ -50,6 +57,8 @@
* Raise Webrat::PageLoadError when a failure occurs so that application exceptions
can be more accurately tested (Ryan Briones)
* Helpful error message for missing option in select box. [#40] (Ben Mabey)
* Extracted save_and_open page to make it usable in Selenium mode (Luke Melia)
* Added save_and_open_screengrab for Selenium mode (Luke Melia)
* Bug fixes
@ -66,6 +75,13 @@
* Extend Rails' ActionController::IntegrationTest instead of
ActionController::Integration::Session (Fixes using Webrat's #select method and
avoids usage of method_missing)
* Ensure that Webrat::MechanizeSession.request_page always uses an absolute
URL. (Graham Ashton)
* Strip anchor tags from URIs before passing to Rails integration session
(Noah Davis)
* Treat text and regexp when matching Selenium buttons (Ross Kaffenberger)
* Allow SeleniumSession's click_button to be called without an argument without
blowing up (Luke Melia)
== 0.3.2 / 2008-11-08

View File

@ -59,11 +59,12 @@ To install the latest code as a plugin: (_Note:_ This may be less stable than us
script/plugin install git://github.com/brynary/webrat.git
In your test_helper.rb, spec_helper.rb, or env.rb (for Cucumber) add:
In your test_helper.rb or env.rb (for Cucumber) add:
require "webrat"
Webrat.configure do |config|
config.mode = Webrat::Configuration::RAILS_MODE
config.mode = :rails
end
== Install with Merb

View File

@ -7,7 +7,7 @@ module Webrat
class WebratError < StandardError
end
VERSION = '0.3.2.1'
VERSION = '0.3.2.2'
def self.require_xml
gem "nokogiri", ">= 1.0.6"

View File

@ -11,3 +11,4 @@ require "webrat/core/elements/select_option"
require "webrat/core/session"
require "webrat/core/methods"
require "webrat/core/matchers"
require "webrat/core/save_and_open_page"

View File

@ -24,6 +24,10 @@ module Webrat
Webrat::XML.xpath_to(@element)
end
def inspect
"#<#{self.class} @element=#{element.inspect}>"
end
end
end

View File

@ -0,0 +1,50 @@
module Webrat
module SaveAndOpenPage
# Saves the page out to RAILS_ROOT/tmp/ and opens it in the default
# web browser if on OS X. Useful for debugging.
#
# Example:
# save_and_open_page
def save_and_open_page
return unless File.exist?(saved_page_dir)
filename = "#{saved_page_dir}/webrat-#{Time.now.to_i}.html"
File.open(filename, "w") do |f|
f.write rewrite_css_and_image_references(response_body)
end
open_in_browser(filename)
end
def open_in_browser(path) # :nodoc
platform = ruby_platform
if platform =~ /cygwin/ || platform =~ /win32/
`rundll32 url.dll,FileProtocolHandler #{path.gsub("/", "\\\\")}`
elsif platform =~ /darwin/
`open #{path}`
end
end
def rewrite_css_and_image_references(response_html) # :nodoc:
return response_html unless doc_root
response_html.gsub(/"\/(stylesheets|images)/, doc_root + '/\1')
end
def saved_page_dir #:nodoc:
File.expand_path(".")
end
def doc_root #:nodoc:
nil
end
private
# accessor for testing
def ruby_platform
RUBY_PLATFORM
end
end
end

View File

@ -2,6 +2,7 @@ require "forwardable"
require "ostruct"
require "webrat/core/mime"
require "webrat/core/save_and_open_page"
module Webrat
# A page load or form submission returned an unsuccessful response code (500-599)
@ -30,6 +31,7 @@ module Webrat
class Session
extend Forwardable
include Logging
include SaveAndOpenPage
attr_reader :current_url
attr_reader :elements
@ -44,23 +46,6 @@ module Webrat
reset
end
# Saves the page out to RAILS_ROOT/tmp/ and opens it in the default
# web browser if on OS X. Useful for debugging.
#
# Example:
# save_and_open_page
def save_and_open_page
return unless File.exist?(saved_page_dir)
filename = "#{saved_page_dir}/webrat-#{Time.now.to_i}.html"
File.open(filename, "w") do |f|
f.write rewrite_css_and_image_references(response_body)
end
open_in_browser(filename)
end
def current_dom #:nodoc:
current_scope.dom
end
@ -78,10 +63,6 @@ module Webrat
nil
end
def saved_page_dir #:nodoc:
File.expand_path(".")
end
def header(key, value)
@custom_headers[key] = value
end
@ -173,20 +154,6 @@ module Webrat
webrat_deprecate :visits, :visit
def open_in_browser(path) # :nodoc
platform = ruby_platform
if platform =~ /cygwin/ || platform =~ /win32/
`rundll32 url.dll,FileProtocolHandler #{path.gsub("/", "\\\\")}`
elsif platform =~ /darwin/
`open #{path}`
end
end
def rewrite_css_and_image_references(response_html) # :nodoc:
return response_html unless doc_root
response_html.gsub(/"\/(stylesheets|images)/, doc_root + '/\1')
end
# Subclasses can override this to show error messages without html
def formatted_error #:nodoc:
response_body
@ -247,9 +214,5 @@ module Webrat
@_page_scope = nil
end
# accessor for testing
def ruby_platform
RUBY_PLATFORM
end
end
end

View File

@ -6,6 +6,10 @@ module Webrat #:nodoc:
attr_accessor :response
alias :page :response
def request_page(url, http_method, data) #:nodoc:
super(absolute_url(url), http_method, data)
end
def get(url, data, headers_argument_not_used = nil)
@response = mechanize.get(url, data)
end
@ -37,5 +41,34 @@ module Webrat #:nodoc:
def_delegators :mechanize, :basic_auth
def absolute_url(url) #:nodoc:
current_host, current_path = split_current_url
if url =~ Regexp.new('^https?://')
url
elsif url =~ Regexp.new('^/')
current_host + url
elsif url =~ Regexp.new('^\.')
current_host + absolute_path(current_path, url)
else
url
end
end
private
def split_current_url
current_url =~ Regexp.new('^(https?://[^/]+)(/.*)?')
[Regexp.last_match(1), Regexp.last_match(2)]
end
def absolute_path(current_path, url)
levels_up = url.split('/').find_all { |x| x == '..' }.size
ancestor = if current_path.nil?
""
else
current_path.split("/")[0..(-1 - levels_up)].join("/")
end
descendent = url.split("/")[levels_up..-1]
"#{ancestor}/#{descendent}"
end
end
end

View File

@ -1,4 +1,6 @@
require "webrat"
require "action_controller"
require "action_controller/integration"
module Webrat
@ -48,15 +50,18 @@ module Webrat
def do_request(http_method, url, data, headers) #:nodoc:
update_protocol(url)
integration_session.request_via_redirect(http_method, remove_protocol(url), data, headers)
url = normalize_url(url)
integration_session.request_via_redirect(http_method, url, data, headers)
end
def remove_protocol(href) #:nodoc:
if href =~ %r{^https?://www.example.com(/.*)}
$LAST_MATCH_INFO.captures.first
else
href
# remove protocol, host and anchor
def normalize_url(href) #:nodoc:
uri = URI.parse(href)
normalized_url = uri.path
if uri.query
normalized_url += "?" + uri.query
end
normalized_url
end
def update_protocol(href) #:nodoc:

View File

@ -38,14 +38,10 @@ module Webrat
# To use Webrat's Selenium support, you'll need the selenium-client gem installed.
# Activate it with (for example, in your <tt>env.rb</tt>):
#
# require "webrat/selenium"
# require "webrat"
#
# Then, if you're using Cucumber, configure it to use a
# <tt>Webrat::Selenium::Rails::World</tt> as the scenario context by adding
# the following to <tt>env.rb</tt>:
#
# World do
# Webrat::Selenium::Rails::World.new
# Webrat.configure do |config|
# config.mode = :selenium
# end
#
# == Dropping down to the selenium-client API
@ -72,15 +68,7 @@ module Webrat
# your Webrat::Selenium tests ignoring the concurrency issues that can plague in-browser
# testing, so long as you're using the Webrat API.
module Selenium
module Rails #:nodoc:
class World < ::ActionController::IntegrationTest
include Webrat::Selenium::Matchers
def initialize #:nodoc:
@_result = Test::Unit::TestResult.new
end
module Methods
def response
webrat_session.response
end
@ -89,14 +77,17 @@ module Webrat
webrat_session.wait_for(*args, &block)
end
def save_and_open_screengrab
webrat_session.save_and_open_screengrab
end
end
end
end
module ActionController #:nodoc:
IntegrationTest.class_eval do
include Webrat::Methods
include Webrat::Selenium::Methods
include Webrat::Selenium::Matchers
end
end

View File

@ -1,3 +1,5 @@
require "webrat/core/save_and_open_page"
module Webrat
class TimeoutError < WebratError
end
@ -17,6 +19,7 @@ module Webrat
end
class SeleniumSession
include Webrat::SaveAndOpenPage
def initialize(*args) # :nodoc:
end
@ -53,7 +56,7 @@ module Webrat
def click_button(button_text_or_regexp = nil, options = {})
if button_text_or_regexp.is_a?(Hash) && options == {}
pattern, options = nil, button_text_or_regexp
else
elsif button_text_or_regexp
pattern = adjust_if_regexp(button_text_or_regexp)
end
pattern ||= '*'
@ -160,6 +163,20 @@ module Webrat
webrat_deprecate :browser, :selenium
def save_and_open_screengrab
return unless File.exist?(saved_page_dir)
filename = "#{saved_page_dir}/webrat-#{Time.now.to_i}.png"
if $browser.chrome_backend?
$browser.capture_entire_page_screenshot(filename, '')
else
$browser.capture_screenshot(filename)
end
open_in_browser(filename)
end
protected
def setup #:nodoc:
@ -175,6 +192,7 @@ module Webrat
extend_selenium
define_location_strategies
$browser.window_maximize
end
def teardown_at_exit #:nodoc:
@ -191,7 +209,7 @@ module Webrat
if text_or_regexp.is_a?(Regexp)
"evalregex:#{text_or_regexp.inspect}"
else
text_or_regexp
"evalregex:/#{text_or_regexp}/"
end
end

View File

@ -330,7 +330,7 @@ describe "click_button" do
end
it "should properly handle HTML entities in textarea default values" do
pending "needs bug fix" do
spec = lambda do
with_html <<-HTML
<html>
<form method="post" action="/posts">
@ -342,6 +342,12 @@ describe "click_button" do
webrat_session.should_receive(:post).with("/posts", "post" => {"body" => "Peanut butter & jelly"})
click_button
end
if Webrat.on_java?
spec.call
else
pending("needs bug fix", &spec)
end
end
it "should send default selected option value from select" do

View File

@ -201,7 +201,7 @@ describe "select" do
end
it "should properly handle submitting HTML entities in select values" do
pending "needs bug fix" do
spec = lambda do
with_html <<-HTML
<html>
<form method="post" action="/login">
@ -213,10 +213,16 @@ describe "select" do
webrat_session.should_receive(:post).with("/login", "month" => "Peanut butter & jelly")
click_button
end
if Webrat.on_java?
spec.call
else
pending("needs bug fix", &spec)
end
end
it "should properly handle locating with HTML entities in select values" do
pending "needs bug fix" do
spec = lambda do
with_html <<-HTML
<html>
<form method="post" action="/login">
@ -230,5 +236,11 @@ describe "select" do
select "Peanut butter & jelly"
}.should_not raise_error(Webrat::NotFoundError)
end
if Webrat.on_java?
spec.call
else
pending("needs bug fix", &spec)
end
end
end

View File

@ -58,6 +58,28 @@ describe "within" do
end
end
it "should work when the scope is inside the form" do
pending "needs bug fix" do
with_html <<-HTML
<html>
<form id="form2" action="/form2">
<div class="important">
<label>Email: <input type="text" class="email2" name="email" /></label>
</div>
<input type="submit" value="Add" />
</form>
</html>
HTML
webrat_session.should_receive(:get).with("/form2", "email" => "test@example.com")
within ".important" do
fill_in "Email", :with => "test@example.com"
end
submit_form "form2"
end
end
it "should not find buttons outside of the scope" do
with_html <<-HTML
<html>

View File

@ -7,12 +7,21 @@ begin require "redgreen" unless ENV['TM_CURRENT_LINE']; rescue LoadError; end
webrat_path = File.expand_path(File.dirname(__FILE__) + "/../lib/")
$LOAD_PATH.unshift(webrat_path) unless $LOAD_PATH.include?(webrat_path)
require "merb-core"
require "webrat/merb"
require "webrat"
require File.expand_path(File.dirname(__FILE__) + "/fakes/test_session")
module Webrat
@@previous_config = nil
def self.cache_config_for_test
@@previous_config = Webrat.configuration.clone
end
def self.reset_for_test
@@configuration = @@previous_config if @@previous_config
end
end
Spec::Runner.configure do |config|
include Webrat::Methods
@ -26,22 +35,15 @@ Spec::Runner.configure do |config|
webrat_session.response_body = xml
end
end
module Webrat
@@previous_config = nil
def self.cache_config_for_test
@@previous_config = Webrat.configuration.clone
config.before :each do
Webrat.cache_config_for_test
end
def self.reset_for_test
@@configuration = @@previous_config if @@previous_config
end
class Configuration
def mode_for_test= (mode)
@mode = mode
end
config.after :each do
Webrat.reset_for_test
end
end
Webrat.configure do |config|
config.mode = :merb
end

View File

@ -4,14 +4,6 @@ describe Webrat::Configuration do
predicate_matchers[:parse_with_nokogiri] = :parse_with_nokogiri?
predicate_matchers[:open_error_files] = :open_error_files?
before do
Webrat.cache_config_for_test
end
after do
Webrat.reset_for_test
end
it "should have a mode" do
Webrat.configuration.should respond_to(:mode)
end

View File

@ -1,6 +1,20 @@
require File.expand_path(File.dirname(__FILE__) + "/../../spec_helper")
module Webrat
describe Field do
it "should have nice inspect output" do
html = <<-HTML
<html>
<input type='checkbox' checked='checked' />
</html>
HTML
element = Webrat::XML.css_search(Webrat::XML.document(html), "input").first
checkbox = CheckboxField.new(nil, element)
checkbox.inspect.should =~ /#<Webrat::CheckboxField @element=<input type=['"]checkbox['"] checked(=['"]checked['"])?\/?>>/
end
end
describe CheckboxField do
it "should say it is checked if it is" do
html = <<-HTML

View File

@ -87,12 +87,8 @@ describe Webrat::Session do
describe "#request_page" do
before(:each) do
Webrat.cache_config_for_test
webrat_session = Webrat::Session.new
end
after(:each) do
Webrat.reset_for_test
end
it "should raise an error if the request is not a success" do
webrat_session.stub!(:get)

View File

@ -1,9 +1,13 @@
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require "mechanize"
require "webrat/mechanize"
describe Webrat::MechanizeSession do
before :each do
Webrat.configuration.mode = :mechanize
end
before(:each) do
@mech = Webrat::MechanizeSession.new
end
@ -34,4 +38,45 @@ describe Webrat::MechanizeSession do
Webrat::MechanizeSession.new.post(url, data)
end
end
describe "#absolute_url" do
before(:each) do
@session = Webrat::MechanizeSession.new
@session.stub!(:current_url).and_return(absolute_url)
end
def absolute_url
'http://test.host/users/fred/cabbages'
end
def rooted_url
'/users/fred/cabbages'
end
def relative_url
'../../wilma'
end
it "should return unmodified url if prefixed with scheme" do
@session.absolute_url(absolute_url).should == absolute_url
end
it "should prefix scheme and hostname if url begins with /" do
@session.absolute_url(rooted_url).should == absolute_url
end
it "should resolve sibling URLs relative to current path" do
@session.absolute_url(relative_url).should == 'http://test.host/users/wilma'
end
it "should cope with sibling URLs from root of site" do
@session.stub!(:current_url).and_return('http://test.host')
@session.absolute_url(relative_url).should == 'http://test.host/wilma'
end
it "should cope with https" do
@session.stub!(:current_url).and_return('https://test.host')
@session.absolute_url(relative_url).should == 'https://test.host/wilma'
end
end
end

View File

@ -1,5 +1,4 @@
require File.expand_path(File.dirname(__FILE__) + "/../../spec_helper")
require File.expand_path(File.dirname(__FILE__) + "/helper")
describe HashWithIndifferentAccess do
it "should not update constructor when not a hash" do

View File

@ -0,0 +1,42 @@
require File.expand_path(File.dirname(__FILE__) + "/../../spec_helper")
require "webrat/merb"
describe Webrat::MerbSession do
it "should not pass empty params if data is and empty hash" do
session = Webrat::MerbSession.new
response = OpenStruct.new
response.status = 200
session.should_receive(:request).with('url', {:params=> nil, :method=>"GET", :headers=>nil}).and_return(response)
session.get('url', {}, nil)
end
%w{post put delete}.each do |request_method|
it "should call do request with method #{request_method.upcase} for a #{request_method} call" do
session = Webrat::MerbSession.new
response = OpenStruct.new
response.status = 200
session.should_receive(:request).with('url', {:params=>nil, :method=>request_method.upcase, :headers=>nil}).and_return(response)
session.send(request_method, 'url', {}, nil)
end
end
context "a session with a response" do
setup do
@session = Webrat::MerbSession.new
@response = OpenStruct.new
@response.status = 200
@response.body = 'test response'
@session.instance_variable_set(:@response, @response)
end
it "should return body of a request as a response_body" do
@session.response_body.should == @response.body
end
it "should return status of a request as a response_code" do
@session.response_code.should == @response.status
end
end
end

View File

@ -1,7 +1,8 @@
require File.expand_path(File.dirname(__FILE__) + '/helper')
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
describe "attach_file" do
before do
Webrat.configuration.mode = :rails
@filename = __FILE__
@uploaded_file = mock("uploaded file")
ActionController::TestUploadedFile.stub!(:new => @uploaded_file)

View File

@ -1,6 +1,12 @@
require File.expand_path(File.dirname(__FILE__) + '/helper')
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require "webrat/rails"
describe Webrat::RailsSession do
before do
Webrat.configuration.mode = :rails
end
it "should delegate response_body to the session response body" do
response = mock("response", :body => "<html>")
integration_session = mock("integration session", :response => response)
@ -69,6 +75,15 @@ describe Webrat::RailsSession do
end
end
context "the URL include an anchor" do
it "should strip out the anchor" do
integration_session = mock("integration session", :https! => false)
rails_session = Webrat::RailsSession.new(integration_session)
integration_session.should_receive(:request_via_redirect).with(:get, "/url", "data", "headers")
rails_session.get("http://www.example.com/url#foo", "data", "headers")
end
end
it "should provide a saved_page_dir" do
Webrat::RailsSession.new(mock("integration session")).should respond_to(:saved_page_dir)
end

View File

@ -1,14 +1,14 @@
Gem::Specification.new do |s|
s.name = %q{webrat}
s.version = "0.3.2.1"
s.version = "0.3.2.2"
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
s.authors = ["Bryan Helmkamp"]
s.date = %q{2008-11-30}
s.date = %q{2008-12-25}
s.description = %q{Webrat. Ruby Acceptance Testing for Web applications}
s.email = %q{bryan@brynary.com}
s.extra_rdoc_files = ["README.rdoc", "MIT-LICENSE.txt"]
s.files = ["History.txt", "install.rb", "MIT-LICENSE.txt", "README.rdoc", "Rakefile", "lib/webrat", "lib/webrat/core", "lib/webrat/core/configuration.rb", "lib/webrat/core/elements", "lib/webrat/core/elements/area.rb", "lib/webrat/core/elements/element.rb", "lib/webrat/core/elements/field.rb", "lib/webrat/core/elements/form.rb", "lib/webrat/core/elements/label.rb", "lib/webrat/core/elements/link.rb", "lib/webrat/core/elements/select_option.rb", "lib/webrat/core/locators", "lib/webrat/core/locators/area_locator.rb", "lib/webrat/core/locators/button_locator.rb", "lib/webrat/core/locators/field_by_id_locator.rb", "lib/webrat/core/locators/field_labeled_locator.rb", "lib/webrat/core/locators/field_locator.rb", "lib/webrat/core/locators/field_named_locator.rb", "lib/webrat/core/locators/form_locator.rb", "lib/webrat/core/locators/label_locator.rb", "lib/webrat/core/locators/link_locator.rb", "lib/webrat/core/locators/locator.rb", "lib/webrat/core/locators/select_option_locator.rb", "lib/webrat/core/locators.rb", "lib/webrat/core/logging.rb", "lib/webrat/core/matchers", "lib/webrat/core/matchers/have_content.rb", "lib/webrat/core/matchers/have_selector.rb", "lib/webrat/core/matchers/have_tag.rb", "lib/webrat/core/matchers/have_xpath.rb", "lib/webrat/core/matchers.rb", "lib/webrat/core/methods.rb", "lib/webrat/core/mime.rb", "lib/webrat/core/scope.rb", "lib/webrat/core/session.rb", "lib/webrat/core/xml", "lib/webrat/core/xml/hpricot.rb", "lib/webrat/core/xml/nokogiri.rb", "lib/webrat/core/xml/rexml.rb", "lib/webrat/core/xml.rb", "lib/webrat/core.rb", "lib/webrat/core_extensions", "lib/webrat/core_extensions/blank.rb", "lib/webrat/core_extensions/deprecate.rb", "lib/webrat/core_extensions/detect_mapped.rb", "lib/webrat/core_extensions/hash_with_indifferent_access.rb", "lib/webrat/core_extensions/meta_class.rb", "lib/webrat/core_extensions/nil_to_param.rb", "lib/webrat/mechanize.rb", "lib/webrat/merb.rb", "lib/webrat/rack.rb", "lib/webrat/rails", "lib/webrat/rails/redirect_actions.rb", "lib/webrat/rails.rb", "lib/webrat/rspec-rails.rb", "lib/webrat/selenium", "lib/webrat/selenium/location_strategy_javascript", "lib/webrat/selenium/location_strategy_javascript/button.js", "lib/webrat/selenium/location_strategy_javascript/label.js", "lib/webrat/selenium/location_strategy_javascript/webrat.js", "lib/webrat/selenium/location_strategy_javascript/webratlink.js", "lib/webrat/selenium/location_strategy_javascript/webratlinkwithin.js", "lib/webrat/selenium/location_strategy_javascript/webratselectwithoption.js", "lib/webrat/selenium/selenium_extensions.js", "lib/webrat/selenium/selenium_session.rb", "lib/webrat/selenium.rb", "lib/webrat/sinatra.rb", "lib/webrat.rb", "vendor/selenium-server.jar"]
s.files = ["History.txt", "install.rb", "MIT-LICENSE.txt", "README.rdoc", "Rakefile", "lib/webrat", "lib/webrat/core", "lib/webrat/core/configuration.rb", "lib/webrat/core/elements", "lib/webrat/core/elements/area.rb", "lib/webrat/core/elements/element.rb", "lib/webrat/core/elements/field.rb", "lib/webrat/core/elements/form.rb", "lib/webrat/core/elements/label.rb", "lib/webrat/core/elements/link.rb", "lib/webrat/core/elements/select_option.rb", "lib/webrat/core/locators", "lib/webrat/core/locators/area_locator.rb", "lib/webrat/core/locators/button_locator.rb", "lib/webrat/core/locators/field_by_id_locator.rb", "lib/webrat/core/locators/field_labeled_locator.rb", "lib/webrat/core/locators/field_locator.rb", "lib/webrat/core/locators/field_named_locator.rb", "lib/webrat/core/locators/form_locator.rb", "lib/webrat/core/locators/label_locator.rb", "lib/webrat/core/locators/link_locator.rb", "lib/webrat/core/locators/locator.rb", "lib/webrat/core/locators/select_option_locator.rb", "lib/webrat/core/locators.rb", "lib/webrat/core/logging.rb", "lib/webrat/core/matchers", "lib/webrat/core/matchers/have_content.rb", "lib/webrat/core/matchers/have_selector.rb", "lib/webrat/core/matchers/have_tag.rb", "lib/webrat/core/matchers/have_xpath.rb", "lib/webrat/core/matchers.rb", "lib/webrat/core/methods.rb", "lib/webrat/core/mime.rb", "lib/webrat/core/save_and_open_page.rb", "lib/webrat/core/scope.rb", "lib/webrat/core/session.rb", "lib/webrat/core/xml", "lib/webrat/core/xml/hpricot.rb", "lib/webrat/core/xml/nokogiri.rb", "lib/webrat/core/xml/rexml.rb", "lib/webrat/core/xml.rb", "lib/webrat/core.rb", "lib/webrat/core_extensions", "lib/webrat/core_extensions/blank.rb", "lib/webrat/core_extensions/deprecate.rb", "lib/webrat/core_extensions/detect_mapped.rb", "lib/webrat/core_extensions/hash_with_indifferent_access.rb", "lib/webrat/core_extensions/meta_class.rb", "lib/webrat/core_extensions/nil_to_param.rb", "lib/webrat/mechanize.rb", "lib/webrat/merb.rb", "lib/webrat/rack.rb", "lib/webrat/rails", "lib/webrat/rails/redirect_actions.rb", "lib/webrat/rails.rb", "lib/webrat/rspec-rails.rb", "lib/webrat/selenium", "lib/webrat/selenium/location_strategy_javascript", "lib/webrat/selenium/location_strategy_javascript/button.js", "lib/webrat/selenium/location_strategy_javascript/label.js", "lib/webrat/selenium/location_strategy_javascript/webrat.js", "lib/webrat/selenium/location_strategy_javascript/webratlink.js", "lib/webrat/selenium/location_strategy_javascript/webratlinkwithin.js", "lib/webrat/selenium/location_strategy_javascript/webratselectwithoption.js", "lib/webrat/selenium/matchers.rb", "lib/webrat/selenium/selenium_extensions.js", "lib/webrat/selenium/selenium_session.rb", "lib/webrat/selenium.rb", "lib/webrat/sinatra.rb", "lib/webrat.rb", "vendor/selenium-server.jar"]
s.has_rdoc = true
s.homepage = %q{http://github.com/brynary/webrat}
s.require_paths = ["lib"]