【问题标题】:How to start Selenium RemoteWebDriver or WebDriver without clearing cookies or cache?如何在不清除 cookie 或缓存的情况下启动 Selenium RemoteWebDriver 或 WebDriver?
【发布时间】:2015-03-20 22:07:35
【问题描述】:

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

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

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

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

版本: Selenium WebDriver:2.45.0.0, 硒网格:2.45.0

谢谢!

【问题讨论】:

标签: selenium cookies webdriver remotewebdriver


【解决方案1】:

在 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);

【讨论】:

  • 感谢您的快速回复!第一个链接坏了,但我知道你想去哪里。我看到了 webdriver 的 firefox 说明,但不知道如何为 remoteWebDriver 获取它。我正在使用 C# 并尝试将其添加到所需的功能中,但我无法确定为配置文件设置什么功能。我试过“webdriver.firefox.profile”和 FirefoxDriver.ProfileCapabilityName 没有运气。我已经在测试机器上创建了一个自定义配置文件。
  • 我试过:DesiredCapabilities caps; caps.SetCapability("firefox_profile", "profileToolsQA");它也不起作用。
  • 我不完全确定如何在 C# 中执行此操作,因为它因语言而异,但如果您没有任何特定需要从代码中执行此操作,则可以使用命令行开关启动 Selenium 服务器时:-Dwebdriver.firefox.profile=your_profile_name
  • 我尝试将 "webdriver.firefox.profile": "profileName" 添加到我在节点上启动 selenium 服务器时一直使用的配置文件中,但它不起作用所以我开始了使用您提供的开关启动服务器并使用我的个人资料。谢谢!不过我还是有问题。当我运行我的测试并关闭我的浏览器并启动一个新的浏览器(使用配置文件)时,它似乎没有保存 cookie,因为登录过程在输入用户名后立即进入第二个因素页面。如果它正常工作,它应该进入密码页面(如果我手动执行它,它会这样做)。
  • 当 WebDriver 创建新的浏览器实例时,它会复制配置文件并使用该副本,因此在测试期间设置的任何 cookie 将无法用于下一个。要解决此问题,您需要手动启动 firefox(在自定义配置文件下)并手动登录以保存 cookie。之后,使用此配置文件执行的任何新测试都将重用现有的 cookie。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-14
  • 1970-01-01
相关资源
最近更新 更多