WebRat Selenium WebDriver:等待ajax完成

前端之家收集整理的这篇文章主要介绍了WebRat Selenium WebDriver:等待ajax完成前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我们在我们的应用程序中使用Selenium2.0 aka WebDriver运行Webrat.

WebDriver非常好地处理页面重新加载,如果浏览器正在重新加载整个页面,则不会启动后续步骤.问题是这种机制不适用于Ajax请求.当有一些click()或change()后,WebDriver不会执行任何空闲操作.

任何人都可以建议如何使webdriver闲置,直到页面上的所有ajax请求结束?

解决方法

我们最终在selenium上编写了一个层,通过在可选循环中包装调用来处理这种情况.所以,当你这样做时:
@browser.click "#my_button_id"

它会做类似于AutomatedTester建议的内容

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

包装器也做了其他的事情,比如允许通过按钮/输入标签等进行搜索(因此包装器不仅存在时间问题,这只是我们放在那里的东西之一.)

原文链接:https://www.f2er.com/ajax/453719.html

猜你在找的Ajax相关文章