【问题标题】:Undefined method 'set_cookie' for capybara How can I create a cookie?水豚的未定义方法“set_cookie”如何创建cookie?
【发布时间】:2019-04-25 10:10:44
【问题描述】:

我正在与一个公共网站竞争

当我尝试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:inblock in ': uninitialized constant ShowMeTheCookies (NameError)`

【问题讨论】:

标签: ruby selenium rspec capybara


【解决方案1】:

这解决了它:

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

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

【讨论】:

    【解决方案2】:

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

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

      page.driver.browser.manage.add_cookie(name: cookie_name, value: cookie_value)
      
    2. 使用可以跨不同驱动程序提供通用 cookie API 的 gem。那将是 cmets 中推荐的 show_me_the_cookies gem。那将是

      create_cookie(cookie_name, cookie_value)
      

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多