class Navigate attr_reader :browser def initialize(browser) @browser = browser end def go(nav_path=[]) raise ArgumentError if nav_path.class != Array || nav_path.nitems < 1 nav_path.each { |item| case item[:type] when 'link' exec = "@browser.link(#{item[:how]}, #{item[:what]}).#{item[:action]}" eval exec when 'text_field' if item.has_key?(:value) # escape ' in item[:value] as it's used for quoted string in the set #item[:value].gsub(/'/, /\'/) exec = "@browser.text_field(#{item[:how]}, #{item[:what]}).#{item[:action]}('#{item[:value]}')" eval exec end when 'check_box' # escape ' in item[:value] as it's used for quoted string in the set #item[:value].gsub(/'/, /\'/) exec = "@browser.checkbox(#{item[:how]}, #{item[:what]}).#{item[:action]}" eval exec when 'submit' exec = "@browser.button(#{item[:how]}, #{item[:what]}).#{item[:action]}" eval exec end } end end