1

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

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

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

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

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

谢谢!

4

1 回答 1

1

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

类似的方法适用于 Chrome- link

对于 Internet Explorer 而不是自定义配置文件,需要将 ensureCleanSession 功能设置为 false 以防止在 session start- link上清除 cookie 。

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

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

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

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

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

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

于 2015-03-20T22:49:01.647 回答