在水豚中通过标签标签上传文件
Uploading file by label tag in capybara
我在使用水豚和黄瓜上传文件时遇到问题。
下面的HTML
<div class="dyn-crm-upload-btn-container">
<label class="btn btn-primary btn-sm" data-bind="visible: newCrmBtnEnabled, enabled: fileEditEnabled">
<i class="fa fa-plus"></i>
<span data-bind="i18n:panels.partnerCrm.new" data-i18n="panels.partnerCrm.new">NEW</span>
<input id="dyn-crm-file-input" class="dyn-crm-upload-btn" type="file" name="file" accept=".csv" data-bind="events: { change: setFileToNewName }"></label>
</div>
如果我手动选择了一个文件,HTML 会跟随一个新的 div
<div data-bind="visible: fileUploadVisible" class="dyn-crm-file-upload" style="">
<input type="text" data-bind="value: fileToUpload.name, i18n:[placeholder]panels.partnerCrm.fileUpload.enterName" maxlength="20" class="k-textbox dyn-crm-filename" id="dynCrmFilename" data-value-update="keyup" data-i18n="[placeholder]panels.partnerCrm.fileUpload.enterName" placeholder="File name">
<input type="button" data-bind="click: uploadFileCrmFile,i18n:[value]panels.partnerCrm.fileUpload.upload" value="Upload" class="btn btn-primary" data-i18n="[value]panels.partnerCrm.fileUpload.upload"><div class="file-upload-progress-container">
</div>
我试过了
attach_file(find('file',:visible=>false),File.absolute_path('C:/Users/user/test.csv'))
还有这个
attach_file('file',File.absolute_path('C:/Users/user/test.csv'))
还有一些其他变体,但出现以下错误
Unable to find file field "file"
或者当使用 id
Unable to find file field "dyn-crm-file-input"
我还尝试在 attach_file 上传之前执行一些脚本。
我正在使用
cucumber 2.1.0
ruby 2.1.6
nokogiri 1.6.6.2
capybara 2.4.4
selenium-webdriver 2.47.1
提前致谢:)
已编辑
这是 css 图片的 link:
css picture。
Capybara 通常无法在不可见的文件输入上调用 attach_file。要解决此问题,您需要使用 #execute_script 修改文件输入 css 使其在页面上可见,然后在其上使用 attach_file。
正如我想象的那样,您将不得不使用 jQuery 将元素的 display:none
更改为 display:block
,例如。
要实现这一点,您可以在附加文件之前尝试这样做:
page.execute_script("$('.dyn-crm-upload-btn-container').css('display','block')")
我在使用水豚和黄瓜上传文件时遇到问题。
下面的HTML
<div class="dyn-crm-upload-btn-container">
<label class="btn btn-primary btn-sm" data-bind="visible: newCrmBtnEnabled, enabled: fileEditEnabled">
<i class="fa fa-plus"></i>
<span data-bind="i18n:panels.partnerCrm.new" data-i18n="panels.partnerCrm.new">NEW</span>
<input id="dyn-crm-file-input" class="dyn-crm-upload-btn" type="file" name="file" accept=".csv" data-bind="events: { change: setFileToNewName }"></label>
</div>
如果我手动选择了一个文件,HTML 会跟随一个新的 div
<div data-bind="visible: fileUploadVisible" class="dyn-crm-file-upload" style="">
<input type="text" data-bind="value: fileToUpload.name, i18n:[placeholder]panels.partnerCrm.fileUpload.enterName" maxlength="20" class="k-textbox dyn-crm-filename" id="dynCrmFilename" data-value-update="keyup" data-i18n="[placeholder]panels.partnerCrm.fileUpload.enterName" placeholder="File name">
<input type="button" data-bind="click: uploadFileCrmFile,i18n:[value]panels.partnerCrm.fileUpload.upload" value="Upload" class="btn btn-primary" data-i18n="[value]panels.partnerCrm.fileUpload.upload"><div class="file-upload-progress-container">
</div>
我试过了
attach_file(find('file',:visible=>false),File.absolute_path('C:/Users/user/test.csv'))
还有这个
attach_file('file',File.absolute_path('C:/Users/user/test.csv'))
还有一些其他变体,但出现以下错误
Unable to find file field "file"
或者当使用 id
Unable to find file field "dyn-crm-file-input"
我还尝试在 attach_file 上传之前执行一些脚本。
我正在使用
cucumber 2.1.0
ruby 2.1.6
nokogiri 1.6.6.2
capybara 2.4.4
selenium-webdriver 2.47.1
提前致谢:)
已编辑
这是 css 图片的 link: css picture。
Capybara 通常无法在不可见的文件输入上调用 attach_file。要解决此问题,您需要使用 #execute_script 修改文件输入 css 使其在页面上可见,然后在其上使用 attach_file。
正如我想象的那样,您将不得不使用 jQuery 将元素的 display:none
更改为 display:block
,例如。
要实现这一点,您可以在附加文件之前尝试这样做:
page.execute_script("$('.dyn-crm-upload-btn-container').css('display','block')")