Created
April 7, 2010 21:05
-
-
Save danmayer/359460 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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