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

时间:2015-03-20 22:07:35

标签: selenium cookies webdriver remotewebdriver

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

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

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

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

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

谢谢!

1 个答案:

答案 0 :(得分:1)

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

类似的方法适用于Chrome - link

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

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

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

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

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

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

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