Wir haben am Ende eine Schicht über Selen geschrieben, die dieses Szenario behandelte, indem die Aufrufe in eine optionale Schleife eingeschlossen wurden. Also, wenn Sie tun würde:
@browser.click "#my_button_id"
es etwas tun würde, ähnlich dem, was AutomatedTester oben vorgeschlagen:
class Browser
def click(locator)
wait_for_element(locator, :timeout => PAGE_EVENT_TIMEOUT)
@selenium.click(locator)
end
def wait_for_element(locator, options)
timeout = options[:timeout] || PAGE_LOAD_TIMEOUT
selenium_locator = locator.clone
expression = <<EOF
var element;
try {
element = selenium.browserbot.findElement('#{selenium_locator}');
} catch(e) {
element = null;
};
element != null;
EOF
begin
selenium.wait_for_condition(expression, timeout)
rescue ::Selenium::SeleniumException
raise "Couldn't find element with locator '#{locator}' on the page: #{$!}.\nThe locator passed to selenium was '#{selenium_locator}'"
end
end
end
der Wrapper auch dazu noch andere Dinge, wie so dass durch die Taste/Eingabe-Label suchen usw. (also gab es den Wrapper nicht nur für die Timing-Probleme, das war nur eines der Dinge, die wir dort hineingesteckt haben.)
Ja, das würde funktionieren, aber Sie müssen angeben, worauf Sie bei jeder Ajax-Anfrage warten . Ich glaube, es sollte einen besseren Weg geben. –