代码之家  ›  专栏  ›  技术社区  ›  Michael Durrant

未定义水豚的“set_cookie”方法如何创建cookie?

  •  1
  • Michael Durrant  · 技术社区  · 7 年前

    我在和一个公共场所赛跑

    当我试着 set_cookie 我得到:

    undefined method 'set_cookie' for #<Selenium::WebDriver::Driver:0x531e792e4b07692c browser=:chrome>
    
    require 'rspec'
    require 'capybara'
    require 'capybara/rspec'
    require 'capybara/dsl'
    require 'pry'
    
    Capybara.run_server = false
    Capybara.app_host = 'http://www.google.com/'
    
    Capybara.register_driver :chrome do |app|
      Capybara::Selenium::Driver.new(app, :browser => :chrome)
    end
    
    root='/'
    
    describe 'Form flow works', :type => :feature do
    
      before :each do
        Capybara.current_driver = :chrome
      end 
    
      it 'Collect the customer data', :happy do
        visit( root )
        page.driver.browser.set_cookie('test_disabled', 'true', :domain => 'www.google.com')
    


    实际的url不是google。

    我试过了 show_me_cookies 但那没用-细节:
    $ gem install show_me_the_cookies Successfully installed show_me_the_cookies-4.0.0 Parsing documentation for show_me_the_cookies-4.0.0 Done installing documentation for show_me_the_cookies after 0 seconds 1 gem installed

    我在规范中添加了以下代码(现在只使用一个包含所有代码的文件)

    RSpec.configure do |c| 
      c.treat_symbols_as_metadata_keys_with_true_values = true
      c.include ShowMeTheCookies, :type => :feature
    end
    

    然后我在我的规范中添加了show_me_the_cookies,但我得到的只是 ...spec/foo_spec.rb:17:in 阻止:未初始化的常量ShowMeTheCookies(NameError)`

    2 回复  |  直到 7 年前
        1
  •  1
  •   Thomas Walpole    7 年前

    Capybara不提供cookieAPI,因为它的主要目标是测试应用程序,并且在测试时直接设置cookie通常不是一个好主意。也就是说,听起来你是在刮网而不是测试,所以你有两个选择。

    1. 访问驱动程序特定的cookie方法。既然你使用的是Selenium驱动程序

      page.driver.browser.manage.add_cookie(name: cookie_name, value: cookie_value)
      
    2. 使用一个gem,在不同的驱动程序之间提供一个通用的cookie API。那就是 show_me_the_cookies

      create_cookie(cookie_name, cookie_value)
      

    您可能会得到未初始化的常量,因为您需要 require 'show_me_the_cookies'

        2
  •  0
  •   Michael Durrant    7 年前

    这解决了问题:

    browser = Capybara.current_session.driver.browser
    browser.manage.add_cookie :name => 'ab', :value => 'true', :expires => Time.now + 3600
    
    推荐文章