我们可以在执行时在浏览器中处理 cookie吗?
实际上,我需要从浏览器获取 cookie,并且需要在场景执行之间设置修改后的 cookie。我们可以使用页面对象来做到这一点吗?
我检查了页面对象 gem,我们有 gem 来清除 cookie,但我需要获取和设置一些 cookie 值。请有任何建议....,
我们可以在执行时在浏览器中处理 cookie吗?
实际上,我需要从浏览器获取 cookie,并且需要在场景执行之间设置修改后的 cookie。我们可以使用页面对象来做到这一点吗?
我检查了页面对象 gem,我们有 gem 来清除 cookie,但我需要获取和设置一些 cookie 值。请有任何建议....,
您需要直接与 watir-webdriver(或 selenium-webdriver)浏览器交互以访问添加/删除 cookie API。
假设您使用的是 watir-webdriver:
page.browser.cookies.clear
page.browser.cookies.add 'foo', 'bar'
page.browser.cookies.delete 'foo'
注意,page.browser
用于访问页面对象的底层 watir-webdriver 浏览器。
您可以阅读有关 watir-webdriver cookie API 的更多信息:
如果您使用 selenium-webdriver 而没有 watir-webdriver,则 API 记录在Selenium::WebDriver::Options中。
在任何 PageObject 页面(类)中,您都可以定义处理 cookie 的方法,并使用 PageObject 访问它。有几种方法可以实现 PageObject,具体取决于您可能使用的其他框架,但这里有一个使用 IRB 的示例。
# Using watir-webdriver
class MyPage
include PageObject
def delete_cookies
# Just wrapping this so it's convenient in my PageObject
@browser.cookies.clear
end
def get_cookies_as_array
# Returns an array of hashes for each cookie
@browser.cookies.to_a
end
def set_browser_cookies( cookie_hash )
# Store the cookie name and value
@browser.cookies.add( cookie_hash[:name], cookie_hash[:value] )
end
def restore_browser_cookies( cookie_array )
cookie_array.each do | cookie_hash_from_array |
self.set_browser_cookies( cookie_hash_from_array )
end
end
end
IRB 示例:
>> require "watir-webdriver"
>> require "page-object"
>> @browser = Watir::Browser.start "http://stackoverflow.com"
>> my_page = MyPage.new(@browser)
>> @cookies_to_keep = my_page.get_cookies_as_array
# Observe the cookies look like this:
# [0]
# ...
# [5] {
# :name => "gauthed",
# :value => "1",
# :path => "/",
# :domain => "stackoverflow.com",
# :expires => nil,
# :secure => false
# }
#
>> my_page.delete_cookies
"" # Empty string is returned
>> my_page.get_cookies_as_array
[] # Empty Array returned because there are no cookies
>> my_page.restore_browser_cookies( @cookies_to_keep )
# Cookie array is returned
原始 cookie 将以其原始 :name 和 :value 恢复。
Justin Ko 指出的API Docs是非常有价值的参考。