module Butternut module Helpers def browser @browser ||= Celerity::Browser.new end def visit(url) browser.goto(url) @page_changed = true end def current_url browser.page.web_response.request_url.to_string end def current_page_source return nil unless browser.page string_writer = java.io.StringWriter.new print_writer = java.io.PrintWriter.new(string_writer) root = browser.page.document_element node_to_xml(root, print_writer) print_writer.close string_writer.to_string end # Fill in a text field with a value def fill_in(label_or_name, options = {}) elt = find_element_by_label_or_name(:text_field, label_or_name) if elt.exist? elt.value = options[:with] @page_changed = true end end def select(option_text, options = {}) elt = find_element_by_label_or_name(:select_list, options[:from]) if elt.exist? elt.select(option_text) @page_changed = true end end def click_button(button_value) browser.button(button_value).click @page_changed = true end def page_changed? @page_changed end def find_element_by_label_or_name(type, label_or_name) elt = browser.send(type, :label, label_or_name) elt.exist? ? elt : browser.send(type, :name, label_or_name) end private # NOTE: I have to do this because HtmlUnit's asXml likes to put spaces # and newlines in the middle of whitespace-sensitive tags (like # and