当访问 URL 与 app_host 不同时,水豚不会完全重置

Capybara does not completely reset when visit different URL than app_host

我是 Capybara 的新手,所以我可能会错过一些明显的东西,但我不确定发生了什么。我在同一个套件中有三个测试用例,app_host 设置为 URL A.

测试1:访问网站A,然后重定向到网站B,需要登录B。

测试2:访问网站B并进行一些测试

测试3:访问网站B并进行一些测试。

测试2和3,我用visit with absolute URL访问B站,代码是一样的。在测试 2 中,我不必登录,但在测试 3 中,网站 B 重定向到登录页面。

我在这里发现了一个类似的问题: 但是从 2.8 更新到 3.9 后,我仍然遇到同样的问题。 我也试过Capybara.reset_sessions! Capybara.current_session.driver.browser.manage.delete_all_cookies 每次测试都没有成功。

我正在使用 Capybara 3.29.0 和 Selenium-webdriver 3.142.6。 Chrome driver 在 docker 图像中 selenium/standalone-chrome:3.14.0-iron.

Driver报名:

Capybara.register_driver :selenium do |app|
  chrome_capabilities = Selenium::WebDriver::Remote::Capabilities.chrome(
  chromeoptions: {
      args: %w[headless no-sandbox disable-gpu --window-size=1024,1024]
  })
  Capybara::Selenium::Driver.new(app,
    browser: :remote,
    :url => 'http://localhost:4444/wd/hub',
    :desired_capabilities => chrome_capabilities)
end
Capybara.default_driver = :selenium
Capybara.javascript_driver = :selenium

知道导致行为差异的原因吗?

您使用的 Capybara 和 selenium-webdriver 版本已经过时。 WebDriver 协议仅允许在 reset 发生时重置您所在主机的 cookie,因此如果您在主机之间移动,则只会清除其中一个主机的 cookie。但是,如果您切换到使用最新版本的 Capybara 和最新版本的 selenium-webdriver 和 Chrome,那么 Capybara 将清除所有主机的 cookie(使用 CDP)