2013-06-27 55 views
5

我想:C#/ ASP.NET硒的webdriver - 再使用cookie

  • 登錄到網站
  • 保存Cookie
  • 給用戶一個選擇做A,B或C
  • A,B和C都需要進行登錄。
  • 每打開一個FirefoxDriver,做自己的事情

我想要做的是登錄ONCE,保存來自該的cookie,並將它們添加到我想要打開的任何其他FirefoxDriver。

現在我想保存cookies在

public ReadOnlyCollection<Cookie> Cookies { get; set; } 

這是

WebDriver.Manage().Cookies.AllCookies; 

假設登錄工作的結果和餅乾上面的方法保存,我有這樣的:

 WebDriver = new FirefoxDriver(); 
     WebDriver.Navigate().GoToUrl("http://www.example.com"); 

     if (cookies != null) 
     { 
      var s = WebDriver.Manage().Cookies; //Logged out cookies 
      WebDriver.Manage().Cookies.DeleteAllCookies(); //Delete all of them 
      var sd = WebDriver.Manage().Cookies; //Make sure theyre deleted 
      foreach (var cookie in cookies) 
      { 
       WebDriver.Manage().Cookies.AddCookie(cookie); 
      } 
      var ss = WebDriver.Manage().Cookies; 
      WebDriver.Navigate().GoToUrl("http://example.com/requiresloginpage"); 
     } 

問題是,然而在這種情況下超過「ss」,給出這個異常錯誤

AllCookies = 'ss.AllCookies' threw an exception of type 
'OpenQA.Selenium.WebDriverException' 
base {System.Exception} = {"Unexpected problem getting cookies"} 
InnerException = {"Cookie name cannot be null or empty string\r\nParameter name: name"} 

我傳遞了8個cookie(當你登錄時總數) - 並且它們全部似乎設置好了。不知道我在做什麼錯

+0

你檢查過's'的內容了嗎?他們包含哪些Cookie的所有值設置? – Arran

+0

不確定你的意思,但是繼承人截圖(我們允許發佈圖片鏈接?)[[沒有登錄('s'的值):[http://i.imgur.com/P5weWDb.png]] [[已記錄in(cookies即時通過):http://i.imgur.com/Hwyn07h.png]] –

+0

使用調試器檢查每個cookie,它是否有名稱和值? – Arran

回答

0

通常Selenium不支持跨會話cookie。

最簡單的方法是使用序列化。 你需要圍繞硒的cookie創建包裝類,並使其可序列化。並創建類CookiesManager,其中將有2個方法:SaveSession() - 保存和RestoreSession() - 從序列化文件恢復。

另一種方法是將一些cookie信息保存到某個臨時cookie文件中。像.... Csv或XML。 這種方式的示例,你可以看到這裏:Keep user logged in - save cookies using web driver 但只適用於c#。