C#/ASP.NET Selenium WebDriver - 重复使用 Cookie

标签 c# asp.net cookies selenium webdriver

我想:

  • 登录网站
  • 保存 Cookies
  • 让用户选择做 A、B 或 C
  • A、B、C 都需要登录。
  • 每个人都会打开一个 FirefoxDriver 并做自己的事情

我想做的是登录一次,保存其中的 cookie,并将它们添加到我想打开的任何其他 FirefoxDriver。

现在我正在尝试将 cookie 保存在

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

这是

的结果
WebDriver.Manage().Cookies.AllCookies;

假设登录成功并且 cookie 保存在上面,我有这个:

        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(您登录时的总数)- 所有这些似乎都设置好了。不确定我做错了什么

最佳答案

为了保存 cookie,您应该告诉 selenium 使用指定的配置文件。出于某种原因,我无法让它使用我的正常 Chrome 配置文件,但此解决方案将允许您登录一次,之后,selenium 会记住 cookie。

ChromeOptions options = new ChromeOptions();
options.AddArguments(@"user-data-dir=C:\Users\YOU\AppData\Local\Google\Chrome\User Data\NAMEYOUCHOOSE");
//specify location for profile creation/ access
ChromeDriver driver = new ChromeDriver(options);

简单地说,这段代码为配置文件创建了一个保存位置,其中确实包含 cookie。 使用此代码,无需编写保存或加载 cookie 的代码,Chrome 会处理。

请注意,chrome 保存您的配置文件的位置可能与我的不同,我只成功使用了一个与我的常规 Chrome 配置文件指向相同位置的目录。此配置文件以文件夹而非文件的形式存在。

关于C#/ASP.NET Selenium WebDriver - 重复使用 Cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17345753/

相关文章:

c# - DLL 的 app.config 中的 ConnectionString 为空

c# - DataGridView 项目双击

asp.net - ASP.NET MVC 中文件上的 HttpHandler

java - 在 Java 代码中接受 Cookies?

javascript - 存储超过 4096 字节的数组一周

c# - 重用昂贵的用户控件

c# - 使用部分名称获取 Azure Blob

c# - 如何执行真正耗时的方法? asp.net(定时)

asp.net - 如何在 F# 中制作使用连字符的 Controller ?

php - 如何使用 Guzzlehttp/guzzle 6 发送 Cookie?