谷歌搜索了几天,但没有解决以下问题: 我使用 Minitest(5.11.3)、capybara(2.13.0) 和 capybara-webkit(1.14.0) 进行了系统测试,说测试在 2 个依赖 javascript 的特定 View 上失败:View1 根据以下内容隐藏/显示字段一个下拉选择,View2 根据用户在另一个下拉菜单中的选择通过 AJAX 请求对字段数据收费。
当前配置:
require 'test_helper'
class ApplicationSystemTestCase < ActionDispatch::SystemTestCase
driven_by :webkit
Capybara.javascript_driver = :webkit
end
开销配置(一直偏执,以防万一)
setup do
Capybara.current_driver = Capybara.javascript_driver
end
点击和断言仍然会失败,因为 Javascript 没有被执行,因此, View 上的预期更改永远不会发生。 不用说,它在开发中无缝工作:)。
最佳答案
这很可能是因为您正在使用基于 QtWebkit 的 capybara-webkit
。如果使用 QtWebkit 的任何发行版本构建,它不支持 JS > ES5.1。这意味着如果您使用任何现代 JS 功能(let
/const
/添加到 ES6 中的标准对象的方法等)并且没有完全转译/填充兼容 ES5 的 JS 会抛出错误,因此无法运行。您可以通过运行 selenium(如果需要 headless ,则为 headless chrome)来确认这一点,并查看您的测试是否在那里工作。
注意:如果使用 driven_by
进行系统测试,则不需要直接设置 javascript_driver
,并且您可能希望至少将 Capybara 升级到最新的 2.x版本。
关于javascript - capybara-webkit 无法执行 javascript(minitest 系统测试),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50587244/