Page Models move complex and copy-pasted code out of your acceptance tests and into easily managed Ruby classes with (optional) integration for Rails, Cucumber, and RSpec.


~~~~~~~~
# env.rb
require 'pagemodels'

PageModels.configure do |config|
config.driver = :capybara # Or :celerity, :firefox, :chrome, :ie (browsers will use watir-webdriver)
config.base_url = "https://www.github.com"
config.integrate :rspec
config.integrate :cucumber
config.integrate :rails
end


~~~~~~~~~~~~~~~~~~~~~~~~~~
# my_cucumber_test.feature
Given I open the GitHub project page for the user "rickgrundy" and the repo "page-models"
When I look at the commit history
Then I should see at least 3 commits


~~~~~~~~~~~~~~~~~~~~~~
# my_cucumber_steps.rb
When /I look at the commit history/ do
navigate_to_commits
end

Then /I should see at least (\d+) commits/ do |count|
verify_commit_count(count)
end


~~~~~~~~~~~~~~~~~~~~~~
# GitHubProjectPage.rb
class GitHubProjectPage < PageModels::Base
def initialize(user, repo)
@user, @repo = user, repo
end

def url
"/#@user/#@repo/"
end

def verify!
should have_content "#@user / #@repo"
should have_content "Source"
should have_content "Commits"
end

def navigate_to_commits
click_link "Commits"
end

def verify_commit_count(count)
all(".commit").should have_at_least(count).things
end
end