1 即可。特别是在Capybara返回后会发生什么{“status”=> “成功”}?是否等到所有元素都被加载(例如JS等)?或者它只是处理HTTP 200响应并将其发回而不给予关注?
2 即可。有没有其他方法可以使Capybara等待页面完全加载所有元素和功能,除了设置超时?
例如,是否有任何方法可以告诉Capybara:“在访问特定页面时是否执行了JS?”或者“页面加载完全完成了吗?”。
我会感激任何想法,谢谢!
答案 0 :(得分:1)
有时候,我真的不相信capybara
中的等待包装器/方法。但是,我的以下实现每次都能使我对元素的可见性做出准确的响应。
module Helper
def wait_for_element(page, elem, count=6)
init = 0
until init == count
begin
break if page.send("#{elem}").visible? == true
rescue
raise ArgumentError.new("Unable to find the element #{elem} in #{count*10} secs") if init == count - 1
end
init += 1
end
end
def click(page, elem)
wait_for_element(page, elem)
page.send("#{elem}").click
end
end
spec_helper.rb
require File.dirname(__FILE__) + "/../support/utilities"
include Helper
element :login_button, '#login'
click(@app.login_page,'login_button')
注意:以上逻辑可同时用于Web和移动平台。
对于Web,它是您需要应用的附加包装器。
def wait_for_pageload(count=15)
init = 0
until (page.execute_script("return document.readyState").eql?('complete') || init == count)
sleep 0.3
init += 1
raise ArgumentError.new("Page not loaded fully") if init == count
end
end
答案 1 :(得分:0)
visit
行为取决于驱动程序,并且无法保证页面在返回时已完全加载(但是您完全定义)。 Capybara的等待方法是那些等待特定元素的方法。所以
find(:css, '#blah')
对于ID为' blah'的元素,将等待(最多为Capybara.default_max_wait_time秒)出现在页面上。如果您不了解您正在访问的页面的结构以及您希望它在哪个元素上,那么唯一的方法就是通过超时。