2013-06-27 31 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#。