Capybara等待ajax加载

时间:2017-08-09 13:46:54

标签: javascript ajax selenium phantomjs capybara

您好我的capybara测试环境

中有错误
 unknown error: jQuery is not defined
        (Session info: chrome=43.0.2357.125)

我认为这与ajax等待功能相关

 def wait_for_ajax
    Timeout.timeout(Capybara.default_wait_time) do
      element = false
      until element do
        begin
          sleep(0.05)
          count = 0
          begin
            element = page.evaluate_script('jQuery.active') == 0
          rescue Errno::ECONNRESET => e
            count += 1
            restart_phantomjs
            retry unless count > RETRY_COUNT_ERROR_CONNECT
          rescue Capybara::Poltergeist::DeadClient
            count += 1
            restart_phantomjs
            retry unless count > RETRY_COUNT_ERROR_CONNECT
          rescue Capybara::Poltergeist::JavascriptError
          end
        end
      end
    end
  end

知道如何解决这个问题吗?欢迎任何帮助。也许需要更新chrome驱动程序,不确定是什么。

1 个答案:

答案 0 :(得分:0)

您显示的wait_for_ajax方法专门用于与Poltergeist一起使用,并且需要在页面中加载jQuery(Capybara :: Poltergeist错误抢救,restart_phantomjs等)所以你不应该使用Chrome看起来像selenium-webdriver一样使用它。

还有一个事实是,在使用Capybara 2.1+的情况下99%的时间不需要wait_for_ajax,因为它会自动等待元素/文字出现如此它是来自ajax请求还是页面加载都不重要。结合越来越多的库直接使用XMLHttpRequest,而不是通过jQuery意味着wait_for_ajax实际上是不必要的。几乎唯一的例外是当你的设计设计糟糕时,不向用户提供有关后台请求及其效果的反馈,在这种情况下,我建议修复你的用户界面。