ruby-on-rails - 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
),过滤器将启动并重定向到适当的页面。以后对登录屏幕的任何请求也会被重定向。
所以我的问题是:
在无头和非无头 Chrome 浏览器中执行系统测试的方式有根本区别吗?
这似乎不是竞争条件问题,因为单击按钮时的重定向是及时发生的。这是页面被重定向到的位置,这是一个问题。当您实际使用该应用程序时,该
Back
按钮可以正常工作,因此这似乎只是系统测试中的问题。任何关于为什么会发生这种情况的想法都值得赞赏。
解决方案
推荐阅读
- html - 创建css聊天气泡时可见线
- java - Java 8 列表处理 - 有条件地添加元素
- json - JSON在ARM模板循环中加密虚拟机
- javascript - ReactJS:意外令牌'<'
- javascript - 在查找字符串中出现字符的频率时,此语法的确切含义是什么?
- python-3.x - 如果尝试使用 f = open('XYZ.ipynb', 'w') 打开文件,如何恢复原始文件内容?
- c# - 存储具有相同唯一标识符(“用户名”)的两个域模型(用户)时克服不一致的最佳方法
- c# - 将项目动态添加到表 asp MVC
- cpanel - 在 Cpanel 中的插件域后无法托管我的新网站
- selenium - 如何根据 TestNG Assert 结果使用 Log4j 级别?