【问题标题】:How to access cookies (Capybara/Selenium Chrome Webdriver)如何访问 cookie (Capybara/Selenium Chrome Webdriver)
【发布时间】:2020-07-19 18:03:22
【问题描述】:

我已经找到了大量声称page.driver.cookies 应该可以工作但Selenium::WebDriver::Chrome::Driver 上没有这种方法的示例(page.driver 就是这样)。

我一直在尝试用 pry 进行挖掘,以找到任何响应 cookiescookie_jarset_cookieclear_cookies 的内容,但似乎什么都没有。不在pagepage.driverpage.driver.browser 上。

我也不太明白读取 cookie 不是测试中的事情(RackTest 驱动程序公开了#cookie_jar,但Rack::Test::Methods 只转发set_cookieclear_cookies)。为什么我不应该测试在某些条件下设置 cookie 的中间件?

【问题讨论】:

    标签: ruby-on-rails selenium testing cookies capybara


    【解决方案1】:

    您不应该直接测试 cookie 的原因是功能/系统测试是错误的地方。这些类型的测试旨在从用户的角度测试事物,用户实际上并没有看到 cookie,他们只是看到了 cookie 启用的行为。因此,在 Capybara 测试中,您应该只测试 cookie 启用的行为,而不是设置实际的 cookie。 cookie 的设置/清除确实应该在控制器或请求测试中进行测试。

    如果您仍然坚持直接访问 cookie,那么可以使用 JS 通过evaluate_script 或通过 selenium 驱动程序特定方法 page.driver.browser.manage.all_cookies 等访问它们 - 尽管任何时候您调用 page.driver.xxx 时,您可能正在做某事你不应该。

    【讨论】:

    • 我选择了一个请求规范。我认为它不仅正确而且更快。使用 Chrome 时,我还遇到了请求规范解决的另一个问题:签名/加密 cookie。
    【解决方案2】:

    刚刚阅读this documentation,你有没有尝试过这样的事情:

    require 'selenium-webdriver'
    driver = Selenium::WebDriver.for :chrome
    
    begin
      driver.get 'https://www.example.com'
    
      # Adds the cookie into current browser context
      driver.manage.add_cookie(name: "key", value: "value")
    ensure
      driver.quit
    end
    
    

    【讨论】:

    • 问题是关于 Ruby 的,但您展示的是 JS selenium API。
    • 抱歉,该链接确实有一个似乎可以工作的代码示例,
    猜你喜欢
    • 2019-02-15
    • 1970-01-01
    • 1970-01-01
    • 2021-02-11
    • 2013-02-28
    • 2021-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多