Added options to selenium session methods to better handle ajax operations. For example: clicks_link('Foo', :wait => :ajax). I'd love to figure out

how to infer whether a click results in ajax vs. dom manipulation vs. page load, but we'll start with this.
This commit is contained in:
Luke Melia 2008-06-18 23:57:56 -04:00
parent 7a5fbeef7f
commit 7d94c16ac8

View File

@ -18,16 +18,44 @@ module Webrat
@selenium.get_html_source @selenium.get_html_source
end end
def clicks_button(button_text = nil) def clicks_button(button_text = nil, options = {})
button_text, options = nil, button_text if button_text.is_a?(Hash) && options == {}
button_text ||= '*' button_text ||= '*'
@selenium.click("button=#{button_text}") @selenium.click("button=#{button_text}")
@selenium.wait_for_page_to_load() wait_for_result(options[:wait])
end end
def clicks_link(link_text) def clicks_link(link_text, options = {})
@selenium.click("webratlink=#{Regexp.escape(link_text)}") @selenium.click("webratlink=#{link_text}")
@selenium.wait_for_page_to_load() wait_for_result(options[:wait])
end end
def wait_for_result(wait_type)
if wait_type == :ajax
wait_for_ajax
elsif wait_type == :effects
wait_for_effects
else
wait_for_page_to_load
end
end
def wait_for_page_to_load(timeout = 15000)
@selenium.wait_for_page_to_load(timeout)
end
def wait_for_ajax(timeout = 15000)
@selenium.wait_for_condition "window.Ajax.activeRequestCount == 0", timeout
end
def wait_for_effects(timeout = 15000)
@selenium.wait_for_condition "window.Effect.Queue.size() == 0", timeout
end
def wait_for_ajax_and_effects
wait_for_ajax
wait_for_effects
end
def selects(option_text, options = {}) def selects(option_text, options = {})
id_or_name_or_label = options[:from] id_or_name_or_label = options[:from]