4

在執行時,我們能否在瀏覽器中處理Cookie?我們可以使用Page Object處理瀏覽器cookies嗎?

其實我需要從瀏覽器中獲取cookie,並且需要在場景執行之間設置修改後的cookie。我們可以用頁面對象來做到嗎?

我檢查頁面對象寶石,我們有清晰的餅乾寶石,但我需要獲取和設置一些餅乾值。任何建議請....,

回答

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的餅乾API:

如果您正在使用硒的webdriver沒有的Watir-webdriver的,API的使用記錄Selenium::WebDriver::Options

+0

嗨,謝謝你的建議。但我需要知道,如何**使用Page Object **註釋來交互Selenium/Watir驅動程序。我需要用於獲取瀏覽器的當前cookie並設置/更新cookie值並運行瀏覽器的命令。 – KAK

+0

這個答案是使用頁面對象命令 - 「頁面」是頁面對象。在頁面對象gem中沒有直接的方法來做到這一點(儘管你可以很容易地添加它)。這就是爲什麼我們稱'瀏覽器'來訪問底層watir-webdriver。 –

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 

原始餅乾恢復了與它們的原始:名稱和:值。


Justin Ko指出你的API Docs是一個非常有價值的參考。

相關問題