2012-09-27 27 views
4

我正在尋找一種可能性,以方便地訪問和列出所有資源加載後,網頁文件已開始加載:使用無頭瀏覽器的腳本,圖像,樣式表等。我感興趣的文件的URL,狀態代碼和類型等。訪問所有加載的資源與水豚或類似的

,想出一招以編程方式訪問信息的Network標籤(開發人員工具)爲您提供:

enter image description here

不任何人都知道Ruby庫可以幫助我解決這個問題,甚至更好 - 如果有一種方法可以使用Capybara(-webkit)來實現這個功能嗎?


更新

似乎Poltergeist has a method called network_traffic它做什麼我之後。儘管如此,還沒有時間研究它。我會一旦報告就回報。

回答

3

正如更新中提到的,似乎有一種方法可以與Poltergeist(水豚驅動程序)做到這一點。這裏有一個快速和非常「的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,可能會在較低層次上做同樣的事情。

+0

輕微調整爲poltergeist 1.6.0: 'driver =水豚:: Poltergeist :: Driver.new({}) server =水豚:: Poltergeist :: Server.new(零,30) client =水豚:: Poltergeist :: Client.start(服務器, :path => driver.options [:phantomjs], :window_size => driver.options [:window_size], :phantomjs_options => driver.phantomjs_options ) –

0

在水豚測試過程中你想要這些信息似乎很奇怪。編寫用戶界面測試以反映實際用戶行爲是一種很好的做法。

考慮一個使用AJAX更新頁面上文本塊的按鈕。您可以單擊該按鈕,然後檢查是否發生請求並檢查返回值。但是,如果用戶執行以下操作,則最好進行測試:單擊按鈕,等待文本塊更改,然後確認它現在顯示預期文本。

如果你真的想捕捉網絡流量,我會讓你的測試設置一個透明的HTTP代理,通過它連接,並在事後檢查請求日誌。

我的團隊在水豚測試中使用類似的方法來模擬與互聯網的斷開連接。我們使用的Firefox配置文件被配置爲指向在每個功能開始時啓動的透明代理。這樣,我們可以寫場景,如:

Given I am online 
When I do something 
    And I am offline 
Then something doesn't break 

...其中am onlineam offline步驟剛接通代理和關閉。

+0

感謝您的回答。不過,我沒有說任何關於測試的內容,但是;)。我正在研究開發工具中使用的一種特殊類型的抓取工具,並希望Capybara可能包含可重複使用的位,因爲它運行的是無頭瀏覽器(使用webkit)並且具有很好的DSL。 – polarblau

0

大廈@ polarblau的響應

您可以在您的測試代碼中設置一個斷點調試和運行...

page.driver.network_traffic.each { |request| request.response_parts.uniq(&:url).each { |response| puts "#{response.url}: #{response.status}" }} 

不同的是,你並不需要啓動一個新的瀏覽器,並可以看到你的頁面已經加載。