【问题标题】:How to refresh Capybara URL in Ruby如何在 Ruby 中刷新 Capybara URL
【发布时间】:2017-12-21 09:58:32
【问题描述】:

我一直在使用 Capybara 和 selenium 网络驱动程序来了解网络自动化。我一直在尝试使用 Capybara 刷新特定页面。我见过一些方法,但它们都有一些问题,在某些情况下不可行。

session.visit 链接什么也不做,因为会话已经在该链接上。 我可以做 session.reset!但后来我失去了登录。

我见过的其他几种方法 - 不要使用 Capybara 的内置等待功能。 这意味着如果服务器负载很重 - 或者在我的 DL/UL 速率受限的测试中,会发生“刷新”,但随后它会迅速尝试在下一页中查找一个尚不存在的字段,因为它还没有已加载。

所以我的问题是具体的 - 如何使用 Capybara 的内置等待功能在不丢失登录会话的情况下刷新 Capybara 中的页面?

【问题讨论】:

    标签: ruby selenium capybara webautomation


    【解决方案1】:

    你可以这样做:

    visit current_path 
    

    或定义一个 RSpec 助手:

    def reload_page
      visit current_path
    end
    

    【讨论】:

      【解决方案2】:

      由于您使用的是 selenium,您可以使用 Capybara 的 master 分支并调用

      session.refresh
      

      或者你可以坚持使用当前的发布版本并调用

      session.driver.browser.navigate.refresh
      

      如果您尝试刷新的页面是 POST,它可能会弹出“您确定要重新加载”模式,在这种情况下,您需要类似

      session.accept_confirm do
        session.driver.browser.navigate.refresh
      end
      

      【讨论】:

      • session.refresh 是否等待页面重新加载?想象一下这个页面现在运行得很慢,我有 session.refresh 然后 session.click_button("Button_play")。如果 Button_play 尚未生效 - 但可能在刷新之后 - session.refresh 会等待吗?
      • @Leon92 页面加载永远不会保证等待。您需要为页面刷新后发生的任何变化设定预期。如果刷新之前 Button_play 不存在,则click_button('Button_play') 将等待按钮出现(最多 Capybara.default_wait_time 秒)。如果您需要它可能等待更长时间,您可以在 click_button 调用中指定 - click_button('Button_play', wait: 60) - 最多等待一分钟以显示“Button_play”,然后单击它。
      【解决方案3】:

      Capybara 现在实现了 refresh 方法,因此您可以直接在规范中调用它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-08
        • 2021-09-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-03
        • 1970-01-01
        相关资源
        最近更新 更多