如何访问 cookies (Capybara/Selenium Chrome Webdriver)

How to access cookies (Capybara/Selenium Chrome Webdriver)

我已经能够找到大量声称 page.driver.cookies 应该有效的示例,但在 Selenium::WebDriver::Chrome::Driver 上没有这样的方法(这就是 page.driver 是什么) .

我一直在努力挖掘以寻找任何响应 cookiescookie_jarset_cookieclear_cookies 的东西,但似乎什么都没有.不在 pagepage.driverpage.driver.browser.

我也不太明白读取 cookie 不是测试中的事情(RackTest 驱动程序公开 #cookie_jarRack::Test::Methods 仅转发 set_cookieclear_cookies).为什么我不应该测试在特定条件下设置 cookie 的中间件?

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

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

刚刚阅读 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