【问题标题】:Browser is done loading and capybara still failing test浏览器已完成加载,水豚仍未通过测试
【发布时间】:2018-04-04 11:10:55
【问题描述】:

我正在运行自动化检查 document.readyState === 'complete' 以及一个名为 window.renderComplete 的局部变量(用于当服务器完成呈现页面时)。

但不知何故,Capybara.current_session.driver.browser.title 在该检查的几个循环中未能通过title == Capybara.current_session.driver.browser.title。在检查通过之前它可能会循环 10 次,然后它会中断循环。

在浏览器获取将数据设置为某些变量所需的所有数据之后是否有一段时间?或者这是水豚的缺陷?如果 readyState 和 renderComplete 都为真,我无法确定为什么浏览器仍然会有延迟。

renderComplete = page.evaluate_script("(window.renderComplete == true) && (document.readyState === 'complete');")

      if renderComplete
        puts "pass 1"
      else
        loop do
          renderComplete = page.evaluate_script("window.renderComplete == true;")
          break if renderComplete == true
        end
        puts "pass 2"
      end

browser = Capybara.current_session.driver.browser
Timeout::timeout(Capybara.default_max_wait_time) do
    i=1
    loop do
      puts "loop! #{i}"
      i+=1
      break if title == browser.title
    end
  end
assert_equal title, browser.title

【问题讨论】:

  • 从你的问题中并不完全清楚你到底在做什么(也许在你的问题中显示实际的代码),但是你不应该真正调用驱动程序特定的方法,或者直接进行 == 比较在title - 你应该只使用have_title/assert_title/has_title? 方法,具体取决于你想要做什么。
  • @thomaswalpole 感谢您的评论。我添加了一些代码来简化我正在做的事情。所以基本上第一个循环通过了,它实际上输出了“pass 1”,但是它在底部的 assert_equal 失败了,所以我在它之前添加了另一个循环。在中断之前循环大约 10-20 次,然后通过 assert_equal。这告诉我第一个循环没有检查某些内容,浏览器实际上仍在“加载”
  • 其中的变量title是什么?
  • 好的 - 那么你应该做类似page.assert_title(title)的事情。同样将Timeout::timeout 用于涉及网络通信的任务是危险的,因为连接可能会处于未知/断开状态(基本上Timeout::timeout 本身已经很断开 - 请参阅mikeperham.com/2015/05/08/timeout-rubys-most-dangerous-api
  • 作为答案添加

标签: javascript ruby selenium automation capybara


【解决方案1】:

你不应该对title 做同样的断言,也不应该使用驱动程序特定的方法(无论何时你做current_session.driver.xxx,你可能做错了什么。要验证页面标题是你所期望的,只需使用其中一个Capybara 提供的标题断言/匹配器方法(还将包括内置的等待/重试)

page.assert_title(expected_title)

另外,请注意,将Timeout::timeout 与正在与网络客户端通信的代码一起使用是非常危险的,因为它可以在任何时候中断代码并使这些通信处于不可恢复的状态。如果你需要对 Capybara 使用某种超时,你最好只是在循环中睡觉并检查条件直到预期时间过去,而不是使用 Timeout::timeout - 请参阅 http://www.mikeperham.com/2015/05/08/timeout-rubys-most-dangerous-api/

【讨论】:

    猜你喜欢
    • 2021-04-10
    • 1970-01-01
    • 2012-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多