首页 > 解决方案 > Capybara 测试仅在使用非无头 Chrome 时失败(通过无头 Chrome)

问题描述

我使用 Minitest/Capybara 进行了一些系统测试,但是在使用 NON-headless Chrome 时一部分总是失败,即使在使用 headless 版本时它通过就好了。

此设置有效:

# application_system_test_case.rb

class ApplicationSystemTestCase < ActionDispatch::SystemTestCase
  driven_by :selenium, using: :headless_chrome
end

这会导致测试失败:

# application_system_test_case.rb

class ApplicationSystemTestCase < ActionDispatch::SystemTestCase
  driven_by :selenium
end

有问题的测试检查我的应用程序中某个Back按钮的功能(自定义按钮,而不是浏览器默认的后退按钮)。测试找到并单击history.back()内部调用的按钮。这应该将页面重定向回上一页,但是,当使用非无头浏览器时,它会重定向到登录屏幕或另一个不相关的屏幕。下面代码段中的最后一行失败了。

page_before_settings_page = current_path
click_on 'Settings'
assert_current_path '/settings'

click_on 'Back'
assert_current_path page_before_settings_page

更让我困惑的是,before_action登录控制器有一个过滤器,如果您已经登录,它应该会将您重定向到登录页面。因此,当时甚至不应该访问登录屏幕. 果然,如果我在登录页面呈现后使用调试器暂停测试并重新加载页面(visit current_path),过滤器将启动并重定向到适当的页面。以后对登录屏幕的任何请求也会被重定向。

所以我的问题是:

  1. 在无头和非无头 Chrome 浏览器中执行系统测试的方式有根本区别吗?

  2. 这似乎不是竞争条件问题,因为单击按钮时的重定向是及时发生的。这是页面被重定向到的位置,这是一个问题。当您实际使用该应用程序时,该Back按钮可以正常工作,因此这似乎只是系统测试中的问题。任何关于为什么会发生这种情况的想法都值得赞赏。

标签: ruby-on-railsseleniumcapybarasystem-testing

解决方案


推荐阅读