在执行时,我们能否在浏览器中处理Cookie??我们可以使用Page Object处理浏览器cookies吗?
其实我需要从浏览器中获取cookie,并且需要在场景执行之间设置修改后的cookie。我们可以用页面对象来做到吗?
我检查页面对象宝石,我们有清晰的饼干宝石,但我需要获取和设置一些饼干值。任何建议请....,
在执行时,我们能否在浏览器中处理Cookie??我们可以使用Page Object处理浏览器cookies吗?
其实我需要从浏览器中获取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的饼干API:
如果您正在使用硒的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
原始饼干恢复了与它们的原始:名称和:值。
Justin Ko指出你的API Docs是一个非常有价值的参考。
嗨,谢谢你的建议。但我需要知道,如何**使用Page Object **注释来交互Selenium/Watir驱动程序。我需要用于获取浏览器的当前cookie并设置/更新cookie值并运行浏览器的命令。 – KAK
这个答案是使用页面对象命令 - “页面”是页面对象。在页面对象gem中没有直接的方法来做到这一点(尽管你可以很容易地添加它)。这就是为什么我们称'浏览器'来访问底层watir-webdriver。 –