我正在寻找一种可能性,可以轻松访问并列出网页文档开始加载后加载的所有资源:脚本,图像,样式表等,使用无头浏览器。我对文件的网址,状态代码和类型等感兴趣。
想一种以编程方式访问Network
标签(开发人员工具)为您提供的信息的方法:
有没有人知道一个Ruby库来帮助我这个或者 - 甚至更好 - 如果有办法用Capybara(-webkit)实现这个目的?
更新
似乎Poltergeist has a method called network_traffic
完成了我所追求的目标。但是,还没有时间研究它。一旦我这样做,我会报告。
答案 0 :(得分:3)
正如更新中所提到的,似乎有一种方法可以通过Poltergeist(Capybara驱动程序)来做到这一点。这是一个快速且非常“hackish”的实验:
require 'rubygems'
require 'capybara'
require 'capybara/poltergeist'
driver = Capybara::Poltergeist::Driver.new({})
port = Capybara::Poltergeist::Util.find_available_port
server = Capybara::Poltergeist::Server.new(port, 30)
client = Capybara::Poltergeist::Client.start(port,
:path => driver.options[:phantomjs],
:window_size => driver.options[:window_size],
:phantomjs_options => driver.phantomjs_options
)
browser = Capybara::Poltergeist::Browser.new(server, client, nil)
browser.visit('http://www.google.com/')
browser.network_traffic.each do |request|
# sorry, quick and dirty to see what we get:
request.response_parts.uniq(&:url).each do |response|
puts "#{response.url}: #{response.status}"
end
end
=>
http://www.google.com/: 200
http://ssl.gstatic.com/gb/images/b_8d5afc09.png: 200
http://www.google.com/images/srpr/logo1w.png: 200
http://www.google.com/images/srpr/nav_logo80.png: 200
http://www.google.com/xjs/_/js/hp/sb_he,pcc/rt=j/ver=FaiMBboaDLc.en_US./d=1/sv=1/rs=AItRSTMKxoHomLOW7ITf6OnfIEr5jQCEtA: 200
然而,非常慢,当然远非任何可用的东西。我正计划深入挖掘Poltergeist,以便在较低的层次上做同样的事情。
答案 1 :(得分:0)
在Capybara测试中你想要这些信息似乎很奇怪。编写UI测试以反映实际用户行为是一种很好的做法。
考虑一个使用AJAX更新页面上的文本块的按钮。您可以单击该按钮,然后检查请求是否发生并检查返回值。但是你最好像用户那样测试它:点击按钮,等到文本块改变,然后确认它现在显示预期的文本。
如果您真的想要捕获网络流量,我会让您的测试设置一个透明的HTTP代理,通过它连接,并在事后检查请求日志。
我的团队使用类似的方法来模拟在Capybara测试期间断开与Internet的连接。我们使用的Firefox配置文件配置为指向在每个功能的开头启动的透明代理。这样我们就可以编写类似的场景:
Given I am online
When I do something
And I am offline
Then something doesn't break
... am online
和am offline
步骤只需打开和关闭代理。
答案 2 :(得分:0)
以@ polarblau的回应为基础
您可以在测试代码中设置调试断点并运行...
page.driver.network_traffic.each { |request| request.response_parts.uniq(&:url).each { |response| puts "#{response.url}: #{response.status}" }}
不同之处在于您不需要启动新浏览器,并且可以查看您的网页已加载的内容。