Неопределенный метод 'set_cookie' для капибары Как я могу создать cookie? - PullRequest
0 голосов
/ 22 ноября 2018

Я работаю против общедоступного сайта

Когда я пытаюсь 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 не решает мою проблему или не сработал.
Фактический 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

Я добавил следующеекод к спецификации (сейчас используется только 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 block in ': неинициализированная константа ShowMeTheCookies (NameError)`

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

Capybara не предоставляет API cookie, потому что его основной целью является тестирование приложений и настройка файлов cookie, когда непосредственно при тестировании, как правило, не очень хорошая идея.При этом звучит так, будто вы просматриваете веб, а не тестируете, поэтому у вас есть 2 варианта.

  1. Доступ к специфичным для драйвера методам cookie.Поскольку вы используете драйвер Selenium, это будет что-то вроде

    page.driver.browser.manage.add_cookie(name: cookie_name, value: cookie_value)
    
  2. Используйте гем, который предоставляет общий API cookie для разных драйверов.Это будет драгоценный камень show_me_the_cookies, рекомендуемый в комментариях.Тогда это будет

    create_cookie(cookie_name, cookie_value)
    

Возможно, вы получаете неинициализированную константу, потому что вам нужно require 'show_me_the_cookies' в вашем spec_helper / rails_heper

0 голосов
/ 22 ноября 2018

Это решило это:

После посещения для создания сеанса я использовал:

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