我们可以使用Page Object处理浏览器cookie吗?

时间:2013-07-16 12:41:42

标签: selenium-webdriver watir-webdriver pageobjects page-object-gem

我们能否在执行时处理浏览器中的 Cookie

实际上我需要从浏览器中获取cookie,并且需要在场景执行之间设置修改后的cookie。我们能用页面对象吗?

我检查了页面对象gem,我们有用于清除cookie的gem,但我需要 获取并设置一些cookie值 。任何建议请....,

2 个答案:

答案 0 :(得分:2)

您需要直接与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的更多信息:

如果您使用没有watir-webdriver的selenium-webdriver,则Selenium::WebDriver::Options中会记录API。

答案 1 :(得分:2)

在任何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是非常有价值的参考。