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

时间:2018-11-22 17:24:33

标签: ruby selenium rspec capybara

我在公共网站上奔跑

当我尝试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')

关于SO的当前答案均未解决我的问题或没有解决问题。
实际网址不是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

我在规范中添加了以下代码(仅使用1个文件,现在所有代码都已添加

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 个答案:

答案 0 :(得分:1)

Capybara不提供cookie API,因为它的主要目的是测试应用程序,并且在测试通常不是一个好主意时直接设置cookie。话虽如此,听起来您好像在抓取网络而不是进行测试,因此您有2个选择。

  1. 访问特定于驱动程序的cookie方法。由于您正在使用Selenium驱动程序,因此类似

    page.driver.browser.manage.add_cookie(name: cookie_name, value: cookie_value)
    
  2. 使用可在不同驱动程序之间提供通用cookie API的gem。那将是注释中推荐的show_me_the_cookies宝石。那将是

    create_cookie(cookie_name, cookie_value)
    

您可能会得到未初始化的常量,因为您需要在spec_helper / rails_heper中使用require 'show_me_the_cookies'

答案 1 :(得分:0)

这解决了它:

访问后创建了我使用的会话:

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