Chúng tôi đã kết thúc viết một lớp trên selenium xử lý trường hợp này bằng cách gói các cuộc gọi trong một vòng lặp tùy chọn. Vì vậy, khi bạn muốn làm:
@browser.click "#my_button_id"
nó sẽ làm điều gì đó tương tự như những gì AutomatedTester gợi ý ở trên:
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
các wrapper cũng đã làm những thứ khác, như cho phép để tìm kiếm theo nhãn nút/input vv (Vì vậy, trình bao bọc không chỉ tồn tại cho các vấn đề về thời gian, đây chỉ là một trong những thứ chúng tôi đặt vào đó.)
Có, điều đó sẽ hiệu quả nhưng bạn phải chỉ định bạn còn chờ gì nữa trong mỗi yêu cầu Ajax . Tôi tin rằng nên có một cách tốt hơn. –