当前位置: 首页 > 知识库问答 >
问题:

capybara找不到要附加文件的文件输入字段

怀晋
2023-03-14

我用红宝石、cucumber和水豚。

我的html看起来像这样:

     <tr>
        <th>
            Promotion codes
            </th><td><div class="t-zone" id="promocodesZone">
            <span style="display: inline-block;">
        <span class="field"><label class="field-label">File name:
                <span style="text-transform: none;" class="status-ok"></span></label></span>
        <span class="field"><label class="field-label">Codes available:
                <span style="text-transform: none;" class="status-ok">0</span></label></span>
        <span class="field"><label class="field-label">Codes used:
                <span style="text-transform: none;" class="status-ok"></span></label></span>
        <span class="field"><label class="field-label">Codes uploaded on:
                <span style="text-transform: none;" class="status-ok"></span></label></span>
        </span>
    <div style="margin-bottom: 15px;"><div class="t-upload">
        <div id="promocodesUpload">
        <div class="qq-uploader">
        <div class="qq-upload-drop-area" style="display: none;"><span>Drop </span></div>
        <a class="qq-upload-button btn" style="position: relative; overflow: hidden; direction: ltr;">Upload
<input type="file" name="file" style="position: absolute; right: 0px; top: 0px; font-family: Arial; font-size: 118px; margin: 0px; padding: 0px; cursor: pointer; opacity: 0;"></a>
<ul class="qq-upload-list"></ul></div></div>
        </div>
        </div>
        </div>
        </td>
        </tr>

基本上,我需要做的是通过点击“上传”链接上传文件:

<a class="qq-upload-button btn" style="position: relative; overflow: hidden; direction: ltr;">Upload<input type="file" name="file" style="position: absolute; right: 0px; top: 0px; font-family: Arial; font-size: 118px; margin: 0px; padding: 0px; cursor: pointer; opacity: 0;"></a>

但我一直失败,因为水豚无法找到必要的元素。。。我已经尝试了很多东西:

attach_file('//*[@id="promocodesUpload"]/div/a/input', File.absolute_path($campaign_promotional_code_path))

结果:找不到文件字段“/*[@id=\“promocodesUpload\”]/div/a/input”(Capybara::ElementNotFound)

within(:xpath, '//*[@id="promocodesUpload"]/div/a') do
   attach_file("input", File.absolute_path($campaign_promotional_code_path))
 end

结果:无法找到文件字段“输入”(Capybara::ElementNotFind)

attach_file("Upload", File.absolute_path($campaign_promotional_code_path)

结果:找不到文件字段“Upload”(Capybara::ElementNotFound)

click_link("Upload")

结果:找不到链接“Upload”(Capybara::ElementNotFound)

有什么帮助吗?:)

共有3个答案

申屠黎昕
2023-03-14

如果您的网页上有jQuery:

page.execute_script("$('input[name=file]').css('opacity','1')")

如果您的网页上没有jQuery:

page.execute_script("document.getElementsByName('file')[0].style.opacity = 1")
汪天宇
2023-03-14

Capybara找不到文件输入,因为它的不透明度为0,所以它隐藏在页面上。-最好是使用execute\u脚本修改file inputs style属性,使其在调用attach\u file之前可见

周龙光
2023-03-14

尝试以下操作:

page.driver.browser.all(:xpath, '//input[@name="file"]')[0].send_keys('/home/userA/Desktop/chivalry-medieval-warfare.jpg')

或:

page.driver.browser.all(:xpath, '//input[@type="file"]').last.send_keys('/home/userA/Desktop/chivalry-medieval-warfare.jpg') 
 类似资料:
  • 我只是在用java阅读输入文件,直到我在最基本的步骤上被难住了。。。正在查找输入文件! 输入。txt文件与调用它的类文件位于同一目录中,但eclipse仍给我一个错误,即找不到它: "线程"main"中的异常java.lang.错误:未解决的编译问题:未处理的异常类型FileNotFoundException" 我的代码: 输入txt在同一个包、同一个文件夹和所有内容中。我很困惑:(

  • 我尝试用`log4j.properties'文件配置log4j。 所有的工作,但我得到了一个奇怪的警告: log4j:警告找不到记录器(org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager)的附加程序。log4j:警告请正确初始化log4j系统。log4j:警告有关更多信息,请参见http://logging.apache.org/

  • 问题内容: 我该怎么做才能将其附加到文件中而不是覆盖? 问题答案: 使用附加:

  • 如何将数据附加到文件的末尾(或开头)?我试着用 但它只写最后一项。

  • 我有一个程序,它总是将相同的文件附加到GMAIL(撰写 它所做的是: 在Android 6.0之前,它一直工作良好。现在,我在尝试使用它时收到以下错误: 无法附加空文件 Astro文件共享给我同样的错误(可能是旧版本)。 但是,我安装了ES File Explorer,当我执行相同的例程并选择该文件时,我会收到一个对话框,其中显示: 将文件作为 普通Android方式(适用于彩信、Gmail等)

  • 问题内容: 因此,我可以像这样从本地文件中读取: 而且我可以写入本地文件 但是,如何追加文件?有内置方法吗? 问题答案: 此答案在Go1中有效: