加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

WebRat Selenium WebDriver:等待ajax完成

发布时间:2020-12-15 22:51:27 所属栏目:百科 来源:网络整理
导读:我们在我们的应用程序中使用Selenium2.0 aka WebDriver运行Webrat. WebDriver非常好地处理页面重新加载,如果浏览器正在重新加载整个页面,则不会启动后续步骤.问题是这种机制不适用于Ajax请求.当有一些click()或change()后,WebDriver不会执行任何空闲操作. 任
我们在我们的应用程序中使用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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读