我有一个简单的 html.haml 文件,其中有一个 text_field_tag 和一个 label_tag。 我使用 jQuery 来获取 text_field_tag 值,并使用该值 on_change 设置 label_tag。 当我在本地运行页面时,它工作得很好,我输入文本,“显示文本输入”反映了它,但在我的测试中,它填充了 text_field_tag 但永远不会点击,因此永远不会触发 on_change,所以这个测试总是失败
it 'displays text in label_tag after input' do
@page.fill_in('textFieldTag', with: '420')
expect(@page).to have_content('420')
end
此屏幕截图是 Capybara 在测试运行期间生成的
我是否正确地相信这不起作用的原因是因为 jQuery 无法识别更改,因为它看起来光标仍在打字?有没有人遇到过这个问题并找到解决方法?
我发现的很多答案都涉及睡眠或使用 wait_until,但这些都没有帮助,因为我相信 on_change 没有注册,因为它认为 Capybara 仍在打字。
如果您使用默认驱动程序,它不支持Javascript。 https://github.com/teamcapybara/capybara#drivers
如果您的页面有一些使用 javascript 的交互,您需要使用另一个驱动程序,例如 Selenium Webdriver: https://rubygems.org/gems/selenium-webdriver/versions/4.14.0
我使用这个驱动程序来测试我的页面,使用 StimulusJS 添加动态输入,效果很好。