【问题标题】:[Rspec/Capybara]How can I detect page's content while it's loading by Visit method[Rspec/Capybara]如何在通过访问方法加载页面时检测页面内容
【发布时间】:2014-06-02 09:57:50
【问题描述】:

我对 Rspec/Capybara 很陌生。

我想测试在访问方法完全加载页面之前,我可以多快在页面中加载我的主要内容。

如果我这样做

starts = Time.now
visit "/"
pp Time.now - starts ******(this will start after visit "/" fully loaded)
test_time = Time.now - starts
test_time.should < 10

控制台中的输出将是 10.xxxx(10 秒),因为它在完成加载我的主页(完全加载页面中的所有内容)后执行 pp 方法。

有没有我可以做这样的事情?

starts = Time.now
visit "/" do (visit and do something while it is loading)
  break if page.has_content("Main content appeared now !!") (Detect if the page has content "Main content appeared now !!" then break and stop loading page
end
pp Time.now - starts
test_time = Time.now - starts
test_time.should < 10

结果将类似于 2.12342(因为我们停止访问以在检测到内容时停止加载

或者我可以在页面加载时检测内容的任何其他方式。

【问题讨论】:

  • 如果你能弄清楚你正在尝试测试的是什么,这可能会有所帮助。你正在执行什么行动,你想要断言什么?此外,显示一些代码会有所帮助。
  • 我确实编辑了我的问题,对我最初的问题感到抱歉。谢谢你的建议。
  • 你的问题现在用代码更清楚了,所以我投票决定重新打开它。请记住,如果您包含您已经尝试或正在尝试的代码,StackOverflow 问题通常会收到肯定的响应。
  • 也就是说,我对这个问题的回答是,您可能无法使用 Capybara 完成您所寻求的。 Capybara 内置了许多功能,可确保在执行任何操作之前加载所有脚本和内容。我不会反对。
  • “主要内容”和所有内容有什么区别?你说的是Javascript之前和之后吗?

标签: ruby-on-rails ruby rspec capybara automated-tests


【解决方案1】:

我不认为你可以用水豚做到这一点。尝试使用 Selenium-Webdriver,尽管 Selenium 不会等到页面完全加载。

driver = Selenium::WebDriver.for :chrome
driver.navigate.to url
while driver.find_elements(:id, 'element_id').size > 0
    sleep 0.1
end
test_time = Time.now - starts
p "#{test_time} seconds"
driver.quit
expect(test_time).to be < 10

【讨论】:

    【解决方案2】:

    你也可以用水豚做

    #spec_helpers.rb

    Capybara.default_driver = :selenium Capybara.register_driver :selenium do |app| Capybara::Selenium::Driver.new(app, :browser => :chrome) end

    【讨论】:

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