如何在不清除 cookie 或缓存的情况下启动 Selenium RemoteWebDriver 或 WebDriver?

How to start Selenium RemoteWebDriver or WebDriver without clearing cookies or cache?

用例:使用用户名登录,导航到第二因素身份验证页面以执行多项操作之一(即回答基于知识的问题),然后导航到最终页面以输入密码。关闭浏览器并尝试使用用户名再次登录。这次第二因素身份验证页面被绕过,因为应用程序识别 cookie 并提示用户直接输入密码。

问题:我正在使用 Selenium RemoteWebDriver 运行 在单独的测试机器上进行这些测试,当我关闭第一个浏览器并打开 RemoteWebDriver 的新实例时,它似乎从清除 cookie 和缓存开始,然后每次我尝试登录时都会出现第二因素身份验证页面。

我需要:帮助弄清楚如何在不自动清除任何 cookie 或缓存的情况下创建 RemoteWebDriver 的新实例,从而绕过第二因素身份验证页面。我需要这个用于 IE、Chrome、Firefox 和 Safari。

我没有任何代码可以明确地清除它,但我也没有任何试图强制它不清除的东西(如果它存在的话)。我还没有尝试过其他任何东西因为我不知道该尝试什么。

版本: 硒网络驱动程序:2.45.0.0, 硒网格:2.45.0

谢谢!

在 Firefox 上保留 cookie;创建自定义配置文件(参见 here 示例)并在每次启动新的 RemoteWebDriver 实例时使用它。这样 Firefox 将跨会话重用所有现有 cookie 的相同配置文件。但是,这不会保存在测试本身期间收到的 cookie。请参阅下面的替代方法以获取解决方案。

类似的方法适用于 Chrome - link.

对于 Internet Explorer 而不是自定义配置文件,需要将 ensureCleanSession 功能设置为 false 以防止在会话启动时清除 cookie - link

备选方案: Cookie 也可以在测试本身中进行操作:

  1. 测试结束时获取所有cookies:

    ReadOnlyCollection<Cookie> cookies = driver.Manage().Cookies.AllCookies;

  2. 将它们存储在某个地方。你如何做取决于自动化设置,但通常简单的磁盘序列化应该工作得很好。

  3. 在测试开始时反序列化您的 cookie 并通过 WebDriver 添加它们:

    foreach (var cookie in cookies) driver.Manage().Cookies.AddCookie(cookie);