水豚等待阿贾克斯加载



嗨,我在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驱动程序,不确定发生了什么。

您展示的wait_for_ajax方法专门编写用于Poltergeist,并且需要在页面中加载jQuery(Capybara::P oltergeist错误救援,restart_phantomjs等(,因此您不应该将其与使用Chrome的Selenium网络驱动程序一起使用。

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

最新更新