gpt4 book ai didi

ruby-on-rails-4 - 使用 Capybara + Poltergeist 等待 AJAX

转载 作者:行者123 更新时间:2023-12-04 07:00:17 25 4
gpt4 key购买 nike

我见过 wait_for_ajax 的各种实现使 Capybara 等待所有 AJAX 请求完成后再继续前进的方法。

我刚刚改用 Poltergeist 作为我的 JavaScript 驱动程序,但我无法让它等待 AJAX 在测试中完成(见下文)

下面是之前使用 Selenium 的实现——我唯一修改的是评估脚本——

  • 上一个: page.evaluate_script("jQuery.active")
  • 更新:page.evaluate_script("$.active").to_i

  • 如果我插入一个 sleep它通过的语句是因为它有足够的时间来完成 AJAX 调用,所以我绝对知道这就是问题所在。

    这种方法有什么错误吗?

    谢谢!
    it "user can log in", js: true do
    visit root_path
    click_tab("log-in")

    # Fill in form
    fill_in "user[email]", with: "al-horford@hawks.com"
    fill_in "user[password]", with: "sl4mdunkz"

    # Click submit and wait for AJAX
    within("#log-in") { click_button("Log In")) }
    wait_for_ajax

    # Expectations
    expect(current_path).to eq(home_index_path)
    end

    def wait_for_ajax
    Timeout.timeout(Capybara.default_max_wait_time) do
    loop until finished_all_ajax_requests?
    end
    end

    def finished_all_ajax_requests?
    request_count = page.evaluate_script("$.active").to_i
    request_count && request_count.zero?
    rescue Timeout::Error
    end

    最佳答案

    根据我的经验,有一些情况 wait_for_ajax 不会等待。

    在我们的应用程序中,我们有一个触发 Ajax 的“购物车”按钮。然后在加载下一页之前等待回调事件。这不是由 wait_for_ajax 选择的。

    修复它的方法,以及通常比使用 sleep() 等待给定时间更好的方法是使用 Capybara 的等待查找器之一验证您是否在下一页。

    只需更换 expect(current_path).to eq(home_index_path)
    类似 expect(page).to have_content("content_home_page_should_have")
    那应该有效。

    关于ruby-on-rails-4 - 使用 Capybara + Poltergeist 等待 AJAX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36536111/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com