【问题标题】:Codeception - attachFile for input type that is set to display:noneCodeception - 输入类型的 attachFile 设置为 display:none
【发布时间】:2016-07-07 03:11:47
【问题描述】:

我正在尝试使用$I->attachFile 命令上传文件,但在隐藏输入类型时它不起作用。有没有办法不使用输入标签,而是使用按钮?上传后按钮触发输入。

<div id="action_buttons" class="col-md-5">
    <button id="front-btn-computer-uploader" class="btn btn-block btn-primary upload-from-computer">
        <span class="glyphicon glyphicon-upload"></span>
        <span class="upload-comp"></span>
    </button>
    <div class="upload-widget-container display-none">
        <div class="upload-widget-wrapper">
            <div class="upload-widget-status"></div>
            <input class="upload-widget-file" type="file" name="file">
        </div>
    </div>
</div>

【问题讨论】:

  • 您尝试了哪些方法,结果如何?请阅读有关如何提出好问题的帮助主题。您需要研究自己的问题,查找代码示例等并编写自己的代码来解决问题。如果您做了所有这些但仍然无法弄清楚,那么回来编辑您的问题并添加您所做的研究中的注释,您尝试过的代码以及结果是什么......任何错误消息等。包含任何相关的 HTML 并正确格式化 HTML 和代码也非常重要。
  • 这个问题似乎只出现在firefox浏览器中。当我用 chrome 尝试这个时,它可以工作。对于临时修复,我只是将 display:none 更改为可见,因此我也可以使用 firefox 上传文件。

标签: selenium selenium-webdriver codeception


【解决方案1】:

你可以尝试使用(根据doc)

$I->fillField("//input[ * `type='text']",`  "Hello World!");
$I->fillField(['name' => 'email'], 'jon * `mail.com');` 

但不要发送文本“Hello world”,而是尝试在输入中插入带有文件名的完整文件路径。这将触发表单上传文件。

例子:

$I->fillField("//input[@type='file']", "/home/user/document.txt");

第二种解决方案,是让输入可见(如果你想使用attachFile方法),这样你就可以使用它了。

【讨论】:

  • 实际上,我尝试了第二种解决方案并且它有效,但这只是一个 hack。当我用 chrome 浏览器尝试这个时。它可以在不使元素可见的情况下工作。
  • 顺便说一句,我尝试了你给我的第一个解决方案,仍然不起作用。它只是显示此错误:元素当前不可见,因此可能无法与构建信息交互:版本:'2.53.1',修订:'a36b8b1',时间:'2016-06-30 17:37:03' 系统信息:主机:'MNL-PCS-14-027',ip:'172.16.13.67',os.name:'Windows 7',os.arch:'amd64',os.version:'6.1',java.version : '1.8.0_60' 驱动信息: driver.version: 未知
猜你喜欢
  • 2017-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-24
  • 2017-09-01
  • 2018-02-04
相关资源
最近更新 更多