Skip to content

Instantly share code, notes, and snippets.

@bigtunacan
Created November 30, 2012 17:33
Show Gist options
  • Save bigtunacan/4177218 to your computer and use it in GitHub Desktop.
Save bigtunacan/4177218 to your computer and use it in GitHub Desktop.
require 'uri'
#require File.expand_path(File.join(File.dirname(__FILE__), "..", "support", "paths"))
module WithinHelpers
def with_scope(locator)
locator ? within(locator) { yield } : yield
end
end
World(WithinHelpers)
Given /^(?:|I )am on the (.+) page$/ do |page_name|
case page_name
when /list/
visit('/surveys/list')
end
end
When /^(?:|I )go to (.+)$/ do |page_name|
visit path_to(page_name)
end
When /^(?:|I )click "([^\"]*)"(?: within "([^\"]*)")?$/ do |button, selector|
with_scope(selector) do
click_button(button)
end
end
When /^(?:|I )follow "([^\"]*)"(?: within "([^\"]*)")?$/ do |link, selector|
with_scope(selector) do
click_link(link)
end
end
When /^(?:|I )fill in "([^\"]*)" with "([^\"]*)"(?: within "([^\"]*)")?$/ do |field, value, selector|
with_scope(selector) do
fill_in(field, :with => value)
end
end
When /^(?:|I )fill in "([^\"]*)" for "([^\"]*)"(?: within "([^\"]*)")?$/ do |value, field, selector|
with_scope(selector) do
fill_in(field, :with => value)
end
end
Then /^the "(.*?)" drop\-down should have "(.*?)" selected(?: within "([^\"]*)")?$/ do |text,value,selector|
page.has_select?(text, :selected => value)
end
# Use this to fill in an entire form with data from a table. Example:
#
# When I fill in the following:
# | Account Number | 5002 |
# | Expiry date | 2009-11-01 |
# | Note | Nice guy |
# | Wants Email? | |
#
# TODO: Add support for checkbox, select og option
# based on naming conventions.
#
When /^(?:|I )fill in the following(?: within "([^\"]*)")?:$/ do |selector, fields|
with_scope(selector) do
fields.rows_hash.each do |name, value|
When %{I fill in "#{name}" with "#{value}"}
end
end
end
When /^(?:|I )select "([^\"]*)" from "([^\"]*)"( index \d*)?(?: within "([^\"]*)")?$/ do |value, field, index, selector|
index = index.nil? ? 0 : index[7..(index.length-1)].to_i
with_scope(selector) do
fld = all(:field, field)[index][:id]
str = "$('#" + fld + "').val('" + value + "')"
page.execute_script(str)
select(value, :from => field)
end
end
When /^(?:|I )check "([^\"]*)"( index \d*)?(?: within "([^\"]*)")?$/ do |field, index, selector|
index = index.nil? ? 0 : index[7..(index.length-1)].to_i
with_scope(selector) do
(all(:checkbox, field)[index]).set(true)
end
end
When /^(?:|I )uncheck "([^\"]*)"( index \d*)?(?: within "([^\"]*)")?$/ do |field, index, selector|
index = index.nil? ? 0 : index[7..(index.length-1)].to_i
with_scope(selector) do
(all(:checkbox, field)[index]).set(false)
end
end
When /^(?:|I )choose "([^\"]*)"(?: within "([^\"]*)")?$/ do |field, selector|
with_scope(selector) do
choose(field)
end
end
When /^(?:|I )attach the file "([^\"]*)" to "([^\"]*)"(?: within "([^\"]*)")?$/ do |path, field, selector|
with_scope(selector) do
attach_file(field, path)
end
end
Then /^(?:|I )should find JSON:$/ do |expected_json|
require 'json'
expected = JSON.pretty_generate(JSON.parse(expected_json))
actual = JSON.pretty_generate(JSON.parse(response.body))
expected.should == actual
end
Then /^(?:|I )should find "([^\"]*)"(?: within "([^\"]*)")?$/ do |text, selector|
with_scope(selector) do
if page.respond_to? :should
page.should have_content(text)
else
assert page.has_content?(text)
end
end
end
Then /^(?:|I )should find \/([^\/]*)\/(?: within "([^\"]*)")?$/ do |regexp, selector|
regexp = Regexp.new(regexp)
with_scope(selector) do
if page.respond_to? :should
page.should have_xpath('//*', :text => regexp)
else
assert page.has_xpath?('//*', :text => regexp)
end
end
end
Then /^(?:|I )should not find "([^\"]*)"(?: within "([^\"]*)")?$/ do |text, selector|
with_scope(selector) do
if page.respond_to? :should
page.should have_no_content(text)
else
assert page.has_no_content?(text)
end
end
end
Then /^(?:|I )should not see field "([^\"]*)"(?: within "([^\"]*)")?$/ do |text, selector|
with_scope(selector) do
assert find_field(text).visible? == false, text + " is visible"
end
end
Then /^(?:|I )should see field "([^\"]*)"(?: with "([^\"]*)")?(?: within "([^\"]*)")?$/ do |text,value, selector|
with_scope(selector) do
assert find_field(text).visible? == true, text + " is not visible"
assert find_field(text).value == value, text + " does not have the value " + value + " is not visible" if value
end
end
Then /^the "([^\"]*)" field(?: within "([^\"]*)")? should contain "([^\"]*)"$/ do |field, selector, value|
with_scope(selector) do
field_value = find_field(field).value
if field_value.respond_to? :should
field_value.should =~ /#{value}/
else
assert_match(/#{value}/, field_value)
end
end
end
Then /^the "([^\"]*)" field(?: within "([^\"]*)")? should not contain "([^\"]*)"$/ do |field, selector, value|
with_scope(selector) do
field_value = find_field(field).value
if field_value.respond_to? :should_not
field_value.should_not =~ /#{value}/
else
assert_no_match(/#{value}/, field_value.value)
end
end
end
Then /^the "([^\"]*)" field(?: within "([^\"]*)")? should be disabled$/ do |field, selector|
with_scope(selector) do
field_class = find_field(field)
assert field_class["disabled"] == "true"
end
end
Then /^the "([^\"]*)" field(?: within "([^\"]*)")? should be enabled$/ do |field, selector|
with_scope(selector) do
field_class = find_field(field)
assert field_class["disabled"].nil?
end
end
Then /^the "([^\"]*)" checkbox(?: within "([^\"]*)")? should be checked$/ do |label, selector|
with_scope(selector) do
field_checked = find(:checkbox, label)['checked']
if field_checked.respond_to? :should
result = "true"
if(field_checked == 'true' || field_checked=="checked")
result = (field_checked == "true") ? "true" : "checked"
end
field_checked.should == result
else
assert_equal 'true', field_checked
end
end
end
Then /^the "([^\"]*)" checkbox(?: within "([^\"]*)")? should not be checked$/ do |label, selector|
with_scope(selector) do
field_checked = find(:checkbox, label)['checked']
if field_checked.respond_to? :should_not
field_checked.should_not == 'checked'
else
assert_not_equal 'true', field_checked
end
end
end
Then /^(?:|I )should be on (.+)$/ do |page_name|
current_path = URI.parse(current_url).path
if current_path.respond_to? :should
current_path.should == path_to(page_name)
else
assert_equal path_to(page_name), current_path
end
end
Then /^(?:|I )should have the following query string:$/ do |expected_pairs|
actual_params = CGI.parse(URI.parse(current_url).query)
expected_params = Hash[expected_pairs.rows_hash.map{|k,v| [k,[v]]}]
if actual_params.respond_to? :should
actual_params.should == expected_params
else
assert_equal expected_params, actual_params
end
end
Then /^show me the page$/ do
save_and_open_page
end
When /^I wait until all Ajax requests are complete$/ do
wait_until do
page.evaluate_script('$.active') == 0
end
end
When /^I wait for (\d+) seconds?$/ do |secs|
sleep secs.to_i
end
# Check for blank field
Then /^the "([^"]*)" field should be blank$/ do |field|
find_field(field).value.blank?
end
# Submit the form
When /^I submit the "([^\"]*)" form$/ do |form_id|
submit_form form_id
end
Then /^the disabled field "(.*?)" should contain "(.*?)"$/ do |label, value|
input = page.find("//label[text()='#{label}']").find("../input")
input.value.should == value
end
Then /^I should see field "(.*?)" (\d+) after "(.*?)"$/ do |target, distance, origin|
page.find("//label[text()='#{origin}']").find("ancestor::fieldset/following-sibling::fieldset[#{distance}]/descendant::label[text()='#{target}']").visible?
end
Then /^I should not see exact field "(.*?)"$/ do |text|
assert_equal false, page.find("//label[text()='#{text}']").visible?
end
Then /^I should see exact field "(.*?)"$/ do |text|
assert_equal true, page.find("//label[text()='#{text}']").visible?
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment