Капибара с хромом без головы не очищает сеанс между тестовыми примерами, которые используют разные субдомены - PullRequest
0 голосов
/ 20 ноября 2018

Я переключил свои тесты рельсов с capybara-webkit на безголовый хром.Когда я запускаю тест, который посещает не хост по умолчанию Capybara, первый случай проходит, но второй сбой, потому что пользователь уже вошел в систему, когда он пытается войти

Я использую chromedriver v2.45, selenium-webdriver (3.141.0) и capybara (2.18.0)

У меня есть следующие настройки:

require 'selenium-webdriver'

Capybara.register_driver :chrome do |app|
  options = Selenium::WebDriver::Chrome::Options.new(
    args: %w[headless disable-gpu no-sandbox]
  )
  Capybara::Selenium::Driver.new(app, browser: :chrome, options: options)
end

Capybara.javascript_driver = :chrome

Я попытался сменить хост приложения на домен по умолчанию после посещения другого домена

using_app_host("http://another.lvh.me") do
  visit '/'

  # do something
end

где using_app_host is

def using_app_host(host)
  original_host = Capybara.app_host
  Capybara.app_host = host
  yield
ensure
  Capybara.app_host = original_host
end

, но это не помогло.

Структура спецификации выглядит следующим образом:

feature "Use another subdomain", js: true do
  before { login } # use default Capybara app host http://root.lvh.me

  scenario "case 1" do
    using_app_host("http://another.lvh.me") do
      # do something
    end
  end

  scenario "case 2" do
    using_app_host("http://another.lvh.me") do
      # do something else
    end
  end
end

Есть идеи, почему капибара / хром без головы не работает?t очистить сеанс пользователя между тестовыми примерами при переходе на другой домен?

Ответы [ 2 ]

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

Даже я столкнулся с той же проблемой.

После добавления шагов для очистки файлов cookie сеанс также не работает.Я добавил ниже код в env.rb, чтобы начать новый сеанс каждый раз для нового теста

Может быть, вы можете попробовать это.

Before do
  Capybara.session_name = ":session_#{Time.zone.now.to_i}" 
end

After do
  Capybara.current_session.driver.quit
end

Кроме того, вы можете добавить параметры Chrome, чтобы открыть сеанс в окне инкогнито

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

Храните ли вы информацию о сеансе в браузерах window.localStorage и / или window.sessionStorage?Если это так, вы можете настроить их очистку с помощью параметров, передаваемых драйверу (Примечание: эти настройки являются настройками по умолчанию для драйвера селена в Capybara 3.12 +)

Capybara.register_driver :chrome do |app|
  options = Selenium::WebDriver::Chrome::Options.new(args: %w[no-sandbox])
  options.headless!
  Capybara::Selenium::Driver.new(app, browser: :chrome, options: options, clear_local_storage: true, clear_session_storage: true)
end  
...