【问题标题】:Uploading file by label tag in capybara在水豚中通过标签标签上传文件
【发布时间】:2015-12-14 14:18:05
【问题描述】:

我在使用 capybara 和 cucumber 上传文件时遇到问题。

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图片的链接: css picture

【问题讨论】:

标签: ruby cucumber automated-tests capybara


【解决方案1】:

正如我想象的那样,例如,您将不得不使用 jQuery 将元素的 display:none 更改为 display:block

要实现 tis,您可以在附加文件之前尝试这样做:

page.execute_script("$('.dyn-crm-upload-btn-container').css('display','block')")

【讨论】:

    【解决方案2】:

    Capybara 通常不能在不可见的文件输入上调用 attach_file。要解决此问题,您需要使用 #execute_script 修改文件输入 css,使其在页面上可见,然后在其上使用 attach_file。

    【讨论】:

    • 这并没有提供问题的答案。要批评或要求作者澄清,请在他们的帖子下方留下评论。 - From Review
    • @praveenSharma 这确实提供了答案 - 使用 execute_script 调整 CSS,使元素可见。它没有提供确切的代码(因为我回答时 css 不在问题中)但不需要确切的代码就可以成为有效的答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-31
    • 2010-10-15
    • 2011-06-01
    • 2021-12-31
    相关资源
    最近更新 更多