【问题标题】:Can we handle the browser cookies using Page Object?我们可以使用页面对象处理浏览器 cookie 吗?
【发布时间】:2013-07-16 12:41:41
【问题描述】:

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

实际上我需要从浏览器获取cookies,并且需要在场景执行之间设置修改后的cookies。我们可以使用 Page Object 来做到这一点吗?

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

【问题讨论】:

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


    【解决方案1】:

    您需要直接与 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 中。

    【讨论】:

    • 您好,感谢您的建议。但我需要知道,如何使用 Page Object cmets 与 Selenium / Watir 驱动程序交互。我需要用于获取浏览器当前 cookie 并设置/更新 cookie 值并运行浏览器的命令。
    • 这个答案是使用页面对象命令 - page 是页面对象。 page-object gem 中没有直接的方法来执行此操作(尽管您可以轻松添加它)。这就是为什么我们调用browser 来访问底层的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
    

    原始 cookie 以其原始 :name 和 :value 恢复。


    Justin Ko 向您指出的API Docs 是非常有价值的参考。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-21
      • 2021-08-16
      • 2019-04-17
      • 1970-01-01
      • 1970-01-01
      • 2018-01-31
      • 2011-06-21
      相关资源
      最近更新 更多