Skip to content

Instantly share code, notes, and snippets.

@jferris
Created April 27, 2010 19:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 5 You must be signed in to fork a gist
  • Save jferris/9875bbfc23ce8abd23d2 to your computer and use it in GitHub Desktop.
Save jferris/9875bbfc23ce8abd23d2 to your computer and use it in GitHub Desktop.
Scenario: Attempt to cash out less than the available balance
Given I am signed in as a complete member
And I have $25.50 in cash
When I follow "Redeem"
And I fill in the Amazon gift card amount field with "25"
And I press "Redeem"
Then I should see error messages
# in features/support
require "webrat/core/locators/locator"
# Lets you find a Webrat::Field via a CSS selector
module Webrat
module Locators
class FieldBySelectorLocator < Locator # :nodoc:
def locate
Field.load(@session, field_element)
end
def field_element
@dom.at(@value)
end
def error_message
"Could not find field with selector #{@value.inspect}"
end
end
def field_by_selector(selector, *field_types)
FieldBySelectorLocator.new(@session, dom, selector, *field_types).locate!
end
end
class Session
def_delegators :current_scope, :field_by_selector
end
module Methods
delegate_to_session :field_by_selector
end
end
# in features/step_definitions
When /^(?:|I )fill in ([^"].*) with "([^\"]*)"$/ do |named_element, value|
field = field_by_selector(selector_for(named_element))
fill_in(field, :with => value)
end
# in features/support
module NamedElements
# Accepts a named element (such as "the user info area") and returns a
# selector to find that element on the page (such as "#user-info").
def selector_for(named_element)
case named_element
when /Amazon gift card amount/i
'input#cash_out_amazon_giftcard_amount'
# Add more named elements here
else
raise %{No selector defined for an element with name "#{named_element}"\n} +
"Check out features/support/named_elements.rb and add one"
end
end
end
World(NamedElements)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment