Google chrome 当通过(Watir-)Webdriver调用时,Chrome/Firefox不保留cookie?

Google chrome 当通过(Watir-)Webdriver调用时,Chrome/Firefox不保留cookie?,google-chrome,firefox,webdriver,watir-webdriver,selenium-chromedriver,Google Chrome,Firefox,Webdriver,Watir Webdriver,Selenium Chromedriver,我正在为一个使用Ruby&Watir的客户做一个项目。他要求在重新加载应用程序时恢复会话(以便保存他的登录状态)。这似乎是Chrome的正常行为,Firefox也可以选择这样做 我已经尝试了我能想到的一切,但似乎无法使用watir webdriver使其正常工作。我已向Watir指定使用特定的配置文件(您认为这会解决问题),确保所有设置都正确(它们是正确的,因为它们在我自己启动浏览器时工作)。我已经尝试了Chrome浏览器的各种开关和配置文件选项,我认为可能会有所帮助。没什么 所以,问题是,为什

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

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

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

我知道这一定是可能的,因为当我手动登录网站,关闭浏览器,然后重新打开时,我仍然在登录。我需要复制这个精确的行为,但是在Chrome/Firefox的手动实例和Watir控制的实例之间的某个地方出了问题

最后,我要提到我注意到,当我指定我的配置文件时,它确实加载了我的历史记录条目,但没有加载任何cookie。这让我越来越困惑


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

我相信,从设计上讲,webdriver总是以一种全新的方式开始会话

当您尝试执行模拟关闭和重新打开浏览器的测试时,这可能会让事情变得有点棘手(这在很多方面确实是对浏览器的测试多于对网站的测试,因为Web服务器确实无法知道浏览器已关闭和重新打开)

如果您想尝试保存和恢复cookie,请阅读cookie部分中的一些webdriver文档,其中说明了一个重要的注意事项

在我们结束这些后续步骤之前,您可能对 了解如何使用cookies。首先,你需要在 cookie将对其有效的域。如果您正在尝试预设 在您开始与网站交互之前,请先使用cookies,然后再打开您的主页 大/加载需要一段时间另一种选择是查找较小的页面 在站点上,通常404页面很小 ()

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


我会通过IRB试试,看看你会得到什么好消息是我已经想出了一个解决方案。我想和大家分享一下,以防有人因为这个问题进入我的视野。我最诚挚的道歉,向你们中的那些人谁已经

我的最终解决办法如下:

  • 专门为应用程序创建Firefox配置文件
  • 将Firefox设置为“还原窗口和选项卡”。这(什么)不起作用 使用Watir/Selenium),即使在 Firefox认出了他们
  • 为了解决上述问题,我在中找到了一个user.js文件 Selenium,手动编辑设置以“还原窗口和选项卡” 并将该文件粘贴到我的Firefox中的文件上 配置文件的目录(~/.mozilla/firefox/*)
  • Firefox将prefs.js中的首选项替换为 每次运行时都使用user.js。这把它修好了

  • 我会注意到,实际上我必须调整SeleniumWebDriver本身中的许多代码,以使其顺利运行。watir webdriver位于selenium webdriver的顶部。

    如果将任何现有文件夹用作
    用户数据目录开关,则在关闭浏览器后保留所有文件和会话。否则,它会创建文件夹并在之后删除它(包括所有cookie、tmp文件和会话)

    因此,您可以冷使用位于所述位置的任何现有配置文件或位于
    chrome://version/
    url

    在我的例子中,它是
    /Users/mikhail/Library/Application Support/Google/Chrome/Default

    出于某种原因,正确的路径应该是这个字符串,而不包含路径的最后一个'/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'
    

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

    请共享相关代码。这听起来像是webdriver chromedriver的问题。watirwebdriver就在这些之上,浏览器会话等的创建完全取决于webdriver。我将相应地重新标记问题。非常感谢您的评论。当我来到这里的时候,我已经试过了,并且正在寻找一个不同的解决方案。我想,“为什么不想办法利用Firefox的内置功能在关闭之间保存会话呢?”?在这里查看我的答案以了解更多细节。很高兴听到你找到了一种方法来完成你所需要的。Chuck,已经很久了。我想再次感谢你的回答。这是一个很好的回答,你完全正确地认为这是有意为之。这让我大吃一惊,因为我正在尝试做的事情中,没有比这更类似于开源项目的了。在我看来,网络上这些问题的数量简直是疯了。不管怎样,我只是想让你知道我很感激你。谢谢