8

我正在为使用 Ruby 和 Watir 的客户开发一个项目。他要求在重新加载应用程序时恢复会话(以便保存他的登录状态)。这是 Chrome 的正常行为(看起来),Firefox 也可以选择这样做。

我已经尝试了所有我能想到的东西,但似乎无法使用 watir-webdriver 让它工作。我已经指定 Watir 使用特定的配置文件(您认为它会解决问题),确保所有设置都是正确的(它们是正确的,因为它们在我自己启动浏览器时工作)。我已经尝试过使用各种开关和配置文件选项的 Chrome,我认为这可能会有所帮助。没有什么。

所以,问题是,为什么会发生这种情况,我可以做些什么来解决或绕过这个问题?在这一点上,我几乎完全没有想法。我什至尝试在 IRB 中手动保存和重新加载 cookie,但无济于事......

我知道这一定是可能的,因为当我手动登录网站,关闭浏览器并重新打开它时,我仍然处于登录状态。我需要重现这种确切的行为,但是在手册之间的某个地方出了点问题Chrome/Firefox 的实例,以及由 Watir 控制的实例。

最后,我会提到我注意到,当我指定我的个人资料时,它确实会加载我的历史记录条目,但不会加载任何 cookie。只是越来越让我困惑。

如果有人可以帮助我,将不胜感激。

4

3 回答 3

3

好消息是我想出了一个解决方案。我想分享它,以防其他人遇到这个问题。我向你们中的那些人致以最诚挚的歉意。

我的最终解决方案如下:

  1. 专门为应用程序创建 Firefox 配置文件
  2. 将 Firefox 设置为“恢复 Windows 和选项卡”。这不起作用(Watir/Selenium 的东西)并且会忽略设置,即使 Firefox 识别它们。
  3. 为了解决上述问题,我在 Selenium 中找到了一个 user.js 文件,在该文件中手动编辑了“恢复 Windows 和选项卡”的设置,并将该文件粘贴到我的 Firefox 配置文件目录(~/.mozilla/firefox /*)。
  4. Firefox 在每次运行时都会将 prefs.js 中的首选项替换为 user.js 中的首选项。这解决了它。

我会注意到,我实际上必须在 selenium-webdriver 本身中调整相当多的代码以使这一切顺利运行。watir-webdriver 位于 selenium-webdriver 之上。

于 2013-05-10T05:16:38.753 回答
3

我相信,按照设计,webdriver 总是以干净的 cookie 明智地开始会话。

当您尝试进行模拟关闭和重新打开浏览器的测试时,这可能会使事情变得有些棘手(这实际上在很多方面,比网站测试浏览器更多,因为网络服务器真的没有办法知道浏览器已关闭并重新打开)

如果您想尝试保存和恢复 cookie,请阅读一些 webdriver 文档,在关于 cookie 的部分中说明了一个重要的警告

在我们离开这些后续步骤之前,您可能有兴趣了解如何使用 cookie。首先,您需要位于 cookie 有效的域中。如果您在开始与网站交互之前尝试预设 cookie,并且您的主页很大/加载需要一段时间,则另一种方法是在网站上找到一个较小的页面,通常 404 页面很小(http://example. com/some404page )

因此,如果您要尝试保存 cookie,然后在弹出浏览器后恢复它们,您可能需要导航到网站上的某个位置,然后再尝试重新创建 cookie。

我会通过 IRB 尝试一下,看看你会得到什么

于 2013-05-08T22:12:55.910 回答
2

如果您使用任何现有文件夹作为user-data-dir开关,则在关闭浏览器后保留所有文件和会话。否则,它会创建文件夹并在之后将其删除(连同所有 cookie、tmp 文件和会话)。

因此,您可以冷使用此处chrome://version/所述的任何现有配置文件或url处的默认路径

就我而言,它是/Users/mikhail/Library/Application Support/Google/Chrome/Default

由于某种原因,正确的路径将是这个字符串,没有路径的最后一个“/默认”部分:

require 'watir-webdriver'

username = ENV['USER'] #or just your name
switches = %W[--user-data-dir=/Users/#{username}/Library/Application\ Support/Google/Chrome/]

browser = Watir::Browser.new :chrome, switches: switches
browser.goto 'google.com'

在这种情况下,您将保留所有历史记录和已安装的扩展。

或更简单:

require 'watir-webdriver'

switches = %W[--user-data-dir=/some\ folder]
browser = Watir::Browser.new :chrome, switches: switches
browser.goto 'google.com'

在这种情况下some folder应该存在,您将从头开始创建新的配置文件。

于 2015-12-26T20:32:44.140 回答