一尘不染

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

selenium

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

问题:我正在使用Selenium
RemoteWebDriver在单独的测试计算机上运行这些测试,并且当我关闭第一个浏览器并打开一个新的RemoteWebDriver实例时,它似乎首先清除Cookie和缓存,并且每次我打开第二个身份验证页面尝试登录。

我需要什么:帮助弄清楚如何创建RemoteWebDriver的新实例,而又不会自动清除任何cookie或缓存,因此将绕过第二个因素身份验证页面。我需要IE,Chrome,Firefox和Safari浏览器。

我没有任何代码可以明确清除此代码,但是我也没有任何尝试将其清除的代码(如果存在的话)。我没有尝试过太多其他事情,因为我不知道尝试什么。

版本:Selenium WebDriver:2.45.0.0,Selenium Grid:2.45.0

谢谢!


阅读 1198

收藏
2020-06-26

共1个答案

一尘不染

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

类似的方法适用于Chrome-
link

对于Internet
Explorer(而不是自定义配置文件),需要确保将CleanCleanSession功能设置为false,以防止在会话启动链接上清除cookie

替代解决方案 :Cookies也可以在测试本身中进行操作:

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

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

  1. 将它们存放在某个地方。如何执行取决于自动化设置,但是通常简单地序列化到磁盘应该可以正常工作。

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

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

2020-06-26