Rails 6.1+Capybara XPath功能测试无法检测到图片的问题求助
问题:Capybara功能测试中用XPath验证带资产指纹的图片存在
环境
- Rails 6.1
- Ruby 3.1.1
- Capybara(用于Feature Specs功能测试)
- 首次使用XPath
视图代码
视图中图片源文件存放路径:app/assets/images/bars/,视图代码如下:
<% @levels.each do |l| %> <% image=l.color.downcase + '-bar.png' %> <p><%= image_tag("bars/#{image}", id: l.color.downcase, :size => "25x50") %></p> <% end %>
测试代码(首次尝试)
scenario "it has the level 1 image" do # 目标图片源文件为 /app/assets/images/bars/white-bar.png expect(page).to have_xpath("/img[contains( @src, 'white-bar' )]") end
已尝试的无效写法
expect(page).to have_xpath("/img[contains( @src, 'white-bar.png' )]")expect(page).to have_xpath("/img[contains( @src, '/bars/white-bar.png' )]")expect(page).to have_xpath("/img[contains( @src, '/images/bars/white-bar.png' )]")
实际页面的图片路径(开发者工具查看)
页面渲染后,图片的src带有Rails自动添加的资产指纹,实际路径为:
/assets/bars/white-bar-31c13c54bf0beaccadbdcb342490b30d380f235669ec6c31b316f6ed8100722f.png
路径前缀为/assets/bars/,不含/images,长串字符是Rails的资产指纹。
需求与疑问
需要编写测试确保页面中目标图片存在,按XPath逻辑,contains(@src, 'white-bar')应该能匹配到唯一的目标图片,但所有尝试都无效,希望了解问题原因及解决方法。
内容的提问来源于stack exchange,提问作者John Cowan
相关产品推荐
相关产品推荐

