Можем ли мы обрабатывать файлы cookie браузера с помощью Page Object?

Можем ли мы обрабатывать файлы cookie в браузере во время выполнения?

На самом деле мне нужно получить файлы cookie из браузера и установить измененные файлы cookie между выполнением сценария. Можем ли мы сделать это с помощью Page Object?

Я проверяю гем объекта страницы, у нас есть гем для очистки файлов cookie, но мне нужно получить и установить некоторые значения файлов cookie. Любые предложения, пожалуйста....,


person KAK    schedule 16.07.2013    source источник


Ответы (2)


Вам нужно будет напрямую взаимодействовать с браузером watir-webdriver (или selenium-webdriver), чтобы получить доступ к API добавления/удаления файлов cookie.

Предполагая, что вы используете watir-webdriver:

page.browser.cookies.clear
page.browser.cookies.add 'foo', 'bar'
page.browser.cookies.delete 'foo'

Обратите внимание, что page.browser используется для доступа к базовому браузеру watir-webdriver объекта страницы.

Вы можете прочитать больше об API файлов cookie watir-webdriver:

Если вы используете selenium-webdriver без watir-webdriver, API задокументирован в Selenium::WebDriver::Options.

person Justin Ko    schedule 16.07.2013
comment
Привет, спасибо за ваше предложение. Но мне нужно знать, как взаимодействовать с драйвером Selenium/Watir, используя комментарии Page Object. Мне нужна команда, которая использовалась для получения текущего файла cookie браузера, установки/обновления значения файла cookie и запуска браузера. - person KAK; 16.07.2013
comment
Этот ответ использует команды объекта страницы - page - это объект страницы. В геме page-object нет прямого метода для этого (хотя вы можете легко добавить его). Вот почему мы вызываем browser для доступа к базовому watir-webdriver. - person Justin Ko; 16.07.2013

На любой странице (классе) 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.


Документация по API, на которую указал вам Джастин Ко, является очень ценным справочным материалом.

person Sonja Leaf    schedule 18.07.2013