浏览器已完成加载,水豚仍未通过测试
Browser is done loading and capybara still failing test
我是 运行 自动化检查 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
做相等的断言,也不应该使用 driver 特定的方法(任何时候你做 current_session.driver.xxx
你可能做错了什么。要验证页面title 是你所期望的,只需使用 Capybara 提供的一种 title assertion/matcher 方法(它还将包括内置 waiting/retrying)
page.assert_title(expected_title)
另外请注意,将 Timeout::timeout
与与网络客户端通信的代码一起使用是非常危险的,因为它可以随时中断代码并使这些通信处于 non-recoverable 状态。如果你需要对 Capybara 使用某种超时,你最好只是在一个循环中休眠并检查条件直到预期的时间已经过去,而不是使用 Timeout::timeout
- 请参阅 http://www.mikeperham.com/2015/05/08/timeout-rubys-most-dangerous-api/
我是 运行 自动化检查 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
做相等的断言,也不应该使用 driver 特定的方法(任何时候你做 current_session.driver.xxx
你可能做错了什么。要验证页面title 是你所期望的,只需使用 Capybara 提供的一种 title assertion/matcher 方法(它还将包括内置 waiting/retrying)
page.assert_title(expected_title)
另外请注意,将 Timeout::timeout
与与网络客户端通信的代码一起使用是非常危险的,因为它可以随时中断代码并使这些通信处于 non-recoverable 状态。如果你需要对 Capybara 使用某种超时,你最好只是在一个循环中休眠并检查条件直到预期的时间已经过去,而不是使用 Timeout::timeout
- 请参阅 http://www.mikeperham.com/2015/05/08/timeout-rubys-most-dangerous-api/