2013-06-27 44 views
5

Tôi muốn:C#/ASP.NET Selenium WebDriver - Tái sử dụng Cookies

  • Đăng nhập vào một trang web
  • Save Cookies
  • Cho người dùng một sự lựa chọn để làm A, B hoặc C
  • A, B và C tất cả các yêu cầu được đăng nhập.
  • Mỗi sẽ mở ra một FirefoxDriver và làm việc của riêng họ

Những gì tôi muốn làm, là đăng nhập ONCE, lưu cookie từ đó và thêm chúng vào bất kỳ FirefoxDriver nào khác mà tôi muốn mở.

Ngay bây giờ tôi đang cố gắng để lưu các cookie trong

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

mà là kết quả của

WebDriver.Manage().Cookies.AllCookies; 

Giả sử đăng nhập làm việc và cookie được tiết kiệm ở trên, tôi có điều này:

 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"); 
     } 

Vấn đề là, tuy nhiên trên "ss" trong trường hợp này, cung cấp lỗi ngoại lệ này

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"} 

Tôi đang chuyển 8 cookie (tổng số khi bạn đăng nhập) - và tất cả chúng dường như được đặt và ok. Không chắc chắn những gì tôi đang làm sai

+0

Bạn đã kiểm tra nội dung của 's', tôi giả sử? Những gì họ chứa Cookies có tất cả các giá trị của họ được thiết lập? – Arran

+0

Bạn không chắc chắn ý bạn là gì nhưng ảnh chụp màn hình của cô ấy (chúng tôi có được phép đăng liên kết hình ảnh không?) [[Chưa đăng nhập (giá trị của 's'): http://i.imgur.com/P5weWDb.png]] [[Đã đăng nhập trong (cookie im đi qua): http://i.imgur.com/Hwyn07h.png]] –

+0

Kiểm tra từng cookie bằng trình gỡ rối, nó có tên cũng như giá trị không? – Arran

Trả lời

0

Thông thường Selenium không hỗ trợ cookie chéo phiên.

Cách dễ nhất là sử dụng Tuần tự hóa. Bạn cần tạo lớp bao quanh cookie của selenium và làm cho nó có thể tuần tự hóa được. Và tạo lớp CookiesManager, nơi sẽ có 2 phương thức: SaveSession() - để lưu và RestoreSession() - để khôi phục từ tập tin được tuần tự hóa.

Một cách khác là lưu một số thông tin cookie vào một số tệp cookie tạm thời. Giống như .... Csv hoặc XML. Mẫu theo cách này bạn có thể xem tại đây: Keep user logged in - save cookies using web driver nhưng chỉ cho C#.

Các vấn đề liên quan