我正在努力让测试工作,测试了几种方法,到目前为止没有任何工作。我有一个按钮
<div >
<a href class="btn btn-default btn-block btn-lg btn-shadowed ut-upload-button"
ng-file-select
ng-file-change="uplFile($event, $file)">
<i class="icon">i</i>
</a>
</div>
这是一个按钮,当点击打开OS文件浏览器时,任何人都知道如何让它工作,因为我尝试了attach_file,page.attach_file,find(“。ut-upload-button”)。set(Rails.root +'spec /文件/ file.txt的“)
上传后,页面应显示Toast Success
expect(page).to have_toast('Success')
对不起,如果这是一个基本的错误或愚蠢的问题,我只是开始使用rspec和capybara并完全迷路了
您不能这样做,因为一旦系统文件浏览器打开,驱动程序就无法与之交互。您需要为实际元素调用attach_file
(在您的情况下可能隐藏在页面上)。由于您没有显示HTML,因此我无法提供确切的代码 - 但假设您有一个类似以下的元素
<input type='file' name='file_upload'>
并且输入通过某种类型的CSS隐藏在视图之外
page.attach_file('file_upload', Rails.root + 'spec/files/file.txt', make_visible: true)
应该适合你。如果页面上只有一个文件上传,您也可以这样做
page.attach_file(Rails.root + 'spec/files/file.txt', make_visible: true)
如果您愿意尝试Capybara项目的主分支,它目前有试用支持将块传递给打开文件选择器的attach_file
。在你的情况下可能是这样的
page.attach_file(Rails.root + 'spec/files/file.txt') do
page.find(".ut-upload-button").click
end
该功能可供用户测试,可能会或可能不会进入Capybara 3.15(取决于报告使用多种方式处理文件输入的方式)在一个月左右发布时。