Skip to content

Step Definition compendium

aaronsakowski edited this page Dec 1, 2012 · 19 revisions

What's this?

This page is intended to act as a place for useful Frank step definitions which aren't quite standard enough to add to the core frank steps. Please feel free to contribute your own useful codez.

Counting specific items displayed on the App

This works for Waseem:

Then /^I should see (.*) apples$/ do |count|
  apples = frankly_map( "label marked:'red apples'", 'tag' )
  apples.count.should == count.to_i
end

Editing a text field using the keyboard

(see this thread for details)

This works for Pete's team:

    When /^I use the keyboard to fill in the textfield marked "([^\\"]*)" with "([^\\"]*)"$/ do |text_field_mark, text_to_type|
      text_field_selector =  "view marked:'#{text_field_mark}'"
      check_element_exists( text_field_selector )
      touch( text_field_selector )
      frankly_map( text_field_selector, 'setText:', text_to_type )
      frankly_map( text_field_selector, 'endEditing:', true )
    end

This works for Martin:

    When /^I use the keyboard to fill in the textfield marked "([^\\"]*)" with "([^\\"]*)"$/ do |text_field_mark, text_to_type| 
     text_field_selector =  "view marked:'#{text_field_mark}'" 
     check_element_exists( text_field_selector ) 
     frankly_map( text_field_selector, 'becomeFirstResponder' ) 
     frankly_map( text_field_selector, 'setText:', text_to_type ) 
     frankly_map( text_field_selector, 'endEditing:', true ) 
    end 

Simulating sending text and hitting return on the keyboard

This can be a useful workaround when dealing with the iOS keyboard. Thanks to Hezi Cohen and James Moore for this one!

def send_command ( command )
  %x{osascript<<APPLESCRIPT
tell application "System Events"
  tell application "iPhone Simulator" to activate
  keystroke "#{command}"
  delay 1
  key code 36
end tell
APPLESCRIPT}
end

When /^I send the command "([^\\"]*)"$/ do |cmd|
  send_command(cmd)
end

When /^I send the command "([^"]*)" (\d+) times$/ do |cmd, times|
  i = 0
  while i < times.to_i
    send_command(cmd)
    i += 1
  end
end

When /^I send the following commands:$/ do |table|
  table.hashes.each do |row|
    steps "When I send the command \\"#{row['command']}\\" #{row['times']} times"
    send_command(row['command'])
  end
end

Resetting the app to first launch state

Given /^I reset the (iphone|ipad) app$/ do |device|
  steps "When I quit the simulator"
  SDK    = "4.3"
  APPLICATIONS_DIR = "/Users/#{ENV['USER']}/Library/Application Support/iPhone Simulator/#{SDK}/Applications"
  USERDEFAULTS_PLIST = "Library/Preferences/com.yourcompany.#{APPNAME}.dist.plist"
  Dir.foreach(APPLICATIONS_DIR) do |item|
    next if item == '.' or item == '..'
    if File::exists?( "#{APPLICATIONS_DIR}/#{item}/#{USERDEFAULTS_PLIST}")
      FileUtils.rm "#{APPLICATIONS_DIR}/#{item}/#{USERDEFAULTS_PLIST}" 
    end
  end
  steps "Given I launch the #{device} app"
end

Taking a screenshot of the app

Then /^I save a screenshot with prefix (\w+)$/ do |prefix|
 filename = prefix + Time.now.to_i.to_s
 %x[screencapture #{filename}.png]
end

Deleting a table view cell

(see this thread for details)

When /^I delete the table view cell marked "([^"]*)"$/ do |mark|
  raise "no table view cell marked '#{mark}' could be found to delete" unless element_exists("tableViewCell label marked:'#{mark}'")
  frankly_map( "tableViewCell label marked:'#{mark}' parent tableViewCell delete", "tag" ) 
end

Selecting from a UIPickerView

From http://groups.google.com/group/frank-discuss/browse_thread/thread/419a5f08d7ebb422

When /^I select (\d*)(?:st|nd|rd|th)? row in picker "([^\"]*)"$/ do | 
row_ordinal, theview| 
  selector = "view:'UIPickerView' marked:'#{theview}'" 
  row_index = row_ordinal.to_i - 1
  views_switched = frankly_map( selector, 'selectRow:inComponent:animated:', row_index, 0, false ) 
  raise "could not find anything matching [#{row_ordinal}] to switch" if views_switched.empty? 
end 

Checking whether the keyboard is visible

Then /^the keyboard should be hidden$/ do
  begin
    type_into_keyboard("")
  rescue 
  else
    raise "The keyboard is not hidden."
  end
end

Then /^the keyboard should be visible$/ do
  begin
    type_into_keyboard("")
  rescue
     raise "The keyboard is not visible."
  else
  end
end