如何访问 cookies (Capybara/Selenium Chrome Webdriver)
How to access cookies (Capybara/Selenium Chrome Webdriver)
我已经能够找到大量声称 page.driver.cookies
应该有效的示例,但在 Selenium::WebDriver::Chrome::Driver
上没有这样的方法(这就是 page.driver
是什么) .
我一直在努力挖掘以寻找任何响应 cookies
、cookie_jar
、set_cookie
或 clear_cookies
的东西,但似乎什么都没有.不在 page
、page.driver
或 page.driver.browser
.
我也不太明白读取 cookie 不是测试中的事情(RackTest 驱动程序公开 #cookie_jar
但 Rack::Test::Methods
仅转发 set_cookie
和 clear_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
我已经能够找到大量声称 page.driver.cookies
应该有效的示例,但在 Selenium::WebDriver::Chrome::Driver
上没有这样的方法(这就是 page.driver
是什么) .
我一直在努力挖掘以寻找任何响应 cookies
、cookie_jar
、set_cookie
或 clear_cookies
的东西,但似乎什么都没有.不在 page
、page.driver
或 page.driver.browser
.
我也不太明白读取 cookie 不是测试中的事情(RackTest 驱动程序公开 #cookie_jar
但 Rack::Test::Methods
仅转发 set_cookie
和 clear_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