Skip to content

Instantly share code, notes, and snippets.

@danmayer
Created April 7, 2010 21:05
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save danmayer/359460 to your computer and use it in GitHub Desktop.
Save danmayer/359460 to your computer and use it in GitHub Desktop.
require "rubygems"
require "test/unit"
gem "selenium-client", ">=1.2.16"
require "selenium/client"
require 'threadify'
class ExampleTest < Test::Unit::TestCase
#SELENIUM_BROWSERS=all
def browsers
if ENV['SELENIUM_BROWSERS'] == 'all'
browser_json = '{"username": "danmayer",' +
'"access-key": "SAUCE-LABS-ID-KEY-XXX",' +
'VERSION' +
'"job-name": "Caliper, basic walkthrough"}'
#we can run all browsers, but it uses sauce labs minutes
[browser_json.gsub(/VERSION/, '"os": "Windows 2003", "browser": "firefox", "browser-version": "3.0",'),
browser_json.gsub(/VERSION/, '"os": "Windows 2003", "browser": "iexplore", "browser-version": "6.",'),
browser_json.gsub(/VERSION/, '"os": "Windows 2003", "browser": "iexplore", "browser-version": "7.",'),
browser_json.gsub(/VERSION/, '"os": "Windows 2003", "browser": "iexplore", "browser-version": "8.",'),
browser_json.gsub(/VERSION/, '"os": "Windows 2003", "browser": "firefox", "browser-version": "2.",'),
browser_json.gsub(/VERSION/, '"os": "Windows 2003", "browser": "firefox", "browser-version": "3.6.",'),
browser_json.gsub(/VERSION/, '"os": "Windows 2003", "browser": "safari", "browser-version": "3.",'),
browser_json.gsub(/VERSION/, '"os": "Windows 2003", "browser": "safari", "browser-version": "4.",'),
browser_json.gsub(/VERSION/, '"os": "Windows 2003", "browser": "opera", "browser-version": "9.",'),
browser_json.gsub(/VERSION/, '"os": "Windows 2003", "browser": "opera", "browser-version": "10.",'),
browser_json.gsub(/VERSION/, '"os": "Windows 2003", "browser": "googlechrome", "browser-version": "",'),
browser_json.gsub(/VERSION/, '"os": "Linux", "browser": "firefox", "browser-version": "3.0.",')
]
else
["*chrome"]
end
end
#SELENIUM_URL=http://caliper-staging.heroku.com/
def test_url
ENV['SELENIUM_URL'] ? ENV['SELENIUM_URL'] : 'http://localhost:3000'
end
#SELENIUM_RC_URL=saucelabs.com
def selenium_rc_url
ENV['SELENIUM_RC_URL'] ? ENV['SELENIUM_RC_URL'] : 'localhost'
end
def run_in_all_browsers(&block)
if browsers.length > 1
errors = []
browsers.threadify(browsers.length) do |browser_spec|
begin
run_browser(browser_spec, block)
rescue => error
type = browser_spec.match(/browser\": \"(.*)\", /)[1]
version = browser_spec.match(/browser-version\": \"(.*)\",/)[1]
errors << {:browser => type, :version => version, :error => error}
end
end
message = ""
errors.each_with_index do |error, index|
message +="\t[#{index+1}]: #{error[:error].message} occurred in #{error[:browser]}, version #{error[:version]}\n"
end
assert_equal 0, errors.length, "Expected zero failures or errors, but got #{errors.length}\n #{message}"
else
run_browser(browsers[0], block)
end
end
def run_browser(browser_spec, block)
browser = Selenium::Client::Driver.new(
:host => selenium_rc_url,
:port => 4444,
:browser => browser_spec,
:url => test_url,
:timeout_in_second => 120)
browser.start_new_browser_session
begin
block.call(browser)
ensure
browser.close_current_browser_session
end
end
def test_basic_walkthrough
run_in_all_browsers do |browser|
browser.open '/'
assert_equal 'Hosted Ruby/Rails metrics - Caliper', browser.title
assert browser.text?('Recently Generated Metrics')
browser.click "css=#projects a:contains('Projects')", :wait_for => :page
assert browser.text?('Browse Projects')
browser.click "css=#add-project a:contains('Add Project')", :wait_for => :page
assert browser.text?('Add Project')
browser.type 'repo','git://github.com/sinatra/sinatra.git'
browser.click "css=#submit-project", :wait_for => :page
assert browser.text?('sinatra/sinatra')
browser.wait_for_element "css=#hotspots-summary"
assert browser.text?('View full Hot Spots report')
end
end
def test_generate_new_metrics
run_in_all_browsers do |browser|
browser.open '/'
browser.click "css=#add-project a:contains('Add Project')", :wait_for => :page
assert browser.text?('Add Project')
browser.type 'repo','git://github.com/sinatra/sinatra.git'
browser.click "css=#submit-project", :wait_for => :page
assert browser.text?('sinatra/sinatra')
browser.click "css=#fetch"
browser.wait_for_page
assert browser.text?('sinatra/sinatra')
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment