水豚测试仅在使用非无头Chrome(通过无头Chrome才能通过)时失败。

时间:2020-01-07 08:52:25

标签: ruby-on-rails selenium capybara system-testing

我已经使用Minitest / Capybara进行了一些系统测试,但是使用NON-headless Chrome时,即使通过了无头版本,它也可以正常通过。

此设置有效:

# 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()。可以将页面重定向回上一页,但是,当使用NON-headless浏览器时,它将重定向到登录屏幕或其他不相关的屏幕。以下代码段中的最后一行失败。

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按钮可以很好地工作,因此似乎仅在系统测试中是一个问题。任何关于为什么会发生这种情况的想法都值得赞赏。

0 个答案:

没有答案