用例:使用用户名登录,导航到第二因素认证页面以执行多项操作(即回答基于知识的问题),然后导航至最后一页以输入密码。关闭浏览器,然后尝试使用用户名再次登录。这次绕过了第二因素身份验证页面,因为该应用程序识别出cookie,并提示用户直接输入密码。
问题:我正在使用Selenium RemoteWebDriver在单独的测试计算机上运行这些测试,并且当我关闭第一个浏览器并打开一个新的RemoteWebDriver实例时,它似乎首先清除Cookie和缓存,并且每次我打开第二个身份验证页面尝试登录。
我需要什么:帮助弄清楚如何创建RemoteWebDriver的新实例,而又不会自动清除任何cookie或缓存,因此将绕过第二个因素身份验证页面。我需要IE,Chrome,Firefox和Safari浏览器。
我没有任何代码可以明确清除此代码,但是我也没有任何尝试将其清除的代码(如果存在的话)。我没有尝试过太多其他事情,因为我不知道尝试什么。
版本:Selenium WebDriver:2.45.0.0,Selenium Grid:2.45.0
谢谢!
在Firefox上保留cookie;创建一个自定义配置文件(请参阅此处的示例),并在每次启动新的RemoteWebDriver实例时使用它。这样,Firefox将在会话之间的所有现有cookie中重用相同的配置文件。但是,这不会保存测试本身收到的cookie。请参阅下面的替代方法以获取解决方案。
类似的方法适用于Chrome- link。
对于Internet Explorer(而不是自定义配置文件),需要确保将CleanCleanSession功能设置为false,以防止在会话启动链接上清除cookie 。
替代解决方案 :Cookies也可以在测试本身中进行操作:
ReadOnlyCollection<Cookie> cookies = driver.Manage().Cookies.AllCookies;
将它们存放在某个地方。如何执行取决于自动化设置,但是通常简单地序列化到磁盘应该可以正常工作。
在测试开始时反序列化cookie并通过WebDriver添加它们:
foreach (var cookie in cookies) driver.Manage().Cookies.AddCookie(cookie);