2012-02-11 72 views
4

我很驚訝,似乎有不被在此的討論。的Watir-webdriver的餅乾罐保存和加載

Mechanize我可以輕鬆地從瀏覽器中讀取整個cookie jar,將其存儲到文件中,然後將其加載到稍後的會話/運行中,然後再次加載該網站的頁面。

怎樣才能做同樣的的Watir-的webdriver

UPDATE

0.5.2

現在,我也看到了新的方法browser.cookies.to_hash 它會變成這個問題變成「如何使用如實施.from_hash或類似的裝載機。.clear.add?」

不過我會在裝載和使用它我的服務器很可能會與被卡住了,而以前的版本(0.4.1)保存所有Cookie特別敏銳。通過Selenium驅動程序也許?

回答

7
browser = Watir::Browser.new :firefox 
browser.goto 'http://google.com' 
# save cookies 
saved_cookies = browser.cookies.to_a 
# clear and get new cookies 
browser.cookies.clear 
browser.goto 'http://google.com' 
# set new cookies 
browser.cookies.clear 
saved_cookies.each do |saved_cookie| 
    browser.cookies.add(saved_cookie[:name], saved_cookie[:value]) 
end 
+0

差不多。謝謝!從純文本文件保存和重新加載數組變得有些問題,所以我使用YAML。在下面發佈完整的解決方案 – Marcos 2012-02-12 23:50:38

4

應用pOdeje的循環重新填充餅乾罐,這裏是包括餅乾保存到一個文件中,讀取在以後的Ruby運行的解決方案。直File.open寫入和陣列的讀出了一些問題,我不希望解決(解析?),但在Ruby中已經捆綁YAML對象序列化是非常適合的任務。

require 'yaml' 

# Save/serialize cookies 
# File.open("ST.cookies.txt", 'w').write $browser.cookies.to_a.to_s 
File.open("ST.cookies.yaml", 'w').write YAML::dump($browser.cookies.to_a) 


# Load/deserialize cookies 
# $cookies = File.open("ST.cookies.txt", 'r').to_a # returns 1-elem array of single long line, not indiv elements 
$cookies = YAML::load(File.open("ST.cookies.yaml", 'r')) 
$browser.cookies.clear 
$cookies.each do |saved_cookie| 
    $browser.cookies.add saved_cookie[:name], 
     saved_cookie[:value], 
     :domain => saved_cookie[:domain], 
     :expires => saved_cookie[:expires], 
     :path => saved_cookie[:path], 
     :secure => saved_cookie[:secure] 
    end 

仍然在尋找預watir-webdriver 0.5.x方法,雖然。

CAVEAT

沒有徹底尚未測試,但它似乎我不得不第一負載到餅乾應用的URL,在使用上述方法我的餅乾罐然後負荷,最後加載該URL到$browser對象第二次。這對我的情況來說只是一個小小的不便和時間成本,我在整個網絡會話期間都呆在同一個域中,但我可以看到這變成了一個影響幾個不相關站點的cookie瓶子的真正刺(如果確實是期望我的老程序使用其他語言&庫像機械化)。 Curl和Wget以及我用於SOAP接口的其他工具通常讓我在加載站點之前控制我的POST/session/cookie環境。只是一個想法。

+0

修改爲包括cookie:domain:expires:path和:secure以及...可能是我的jar似乎被忽略的原因,我仍然必須每次創建一個全新的會話! – Marcos 2012-02-15 21:20:34

+0

好東西。這讓我想知道有多少人需要或者使用諸如.save_cookies和.load_cookies這樣的方法,如果他們被添加的話。 – 2012-02-16 19:21:01

+0

我一直在其他網絡驅動庫中使用這兩個cookie jar函數多年 - 通常是延長會話的生命週期或在場外操作數據 - 並積極喜歡在Watir規範中看到它們。但我碰到另一個我覺得我需要警告的問題;以上評論。 – Marcos 2012-02-16 20:16:26