使用 selenium 将文件上传到带有 geckodriver 的 bootsrap-fileinput



我想知道如何使用Selenium和FirefoxDriver将文件上传到bootstrap-fileinput元素。我试过了

WebElement input = letter.findElement(By.cssSelector("#letter input"));
input.sendKeys("/home/me/loremIpsum.pdf");

我得到

org.openqa.selenium.InvalidArgumentException: File not found: /home/me/loremIpsum.pdf

当然,文件/home/me/loremIpsum.pdf确实存在。

相同的代码使用chrome驱动程序工作。

我整理了一个jsfiddle来显示文件输入按钮:https://jsfiddle.net/yscgx2zc/

从我的应用程序(从 Firefox 开发人员控制台复制(呈现的 html 如下所示。找到靠近底部的input元素。

<div id="letter" class="form-group"><label class="control-label">The Letter<span>*</span></label><div class="file-input file-input-new"><div class="file-preview ">
<div class="close fileinput-remove">×</div>
<div class="file-drop-disabled">
<div class="file-preview-thumbnails">
</div>
<div class="clearfix"></div>    <div class="file-preview-status text-center text-success"></div>
<div class="kv-fileinput-error file-error-message" style="display: none;"></div>
</div>
</div>
<div class="kv-upload-progress hide"><div class="progress">
<div class="progress-bar progress-bar-success progress-bar-striped active" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width:0%;">
0%
</div>
</div></div>
<div class="input-group file-caption-main">
<div tabindex="500" class="form-control file-caption  kv-fileinput-caption">
<div class="file-caption-name"></div>
</div>
<div class="input-group-btn">
<button type="button" tabindex="500" title="Clear selected files" class="btn btn-default fileinput-remove fileinput-remove-button"><i class="glyphicon glyphicon-trash"></i>  <span class="hidden-xs">Remove</span></button>
<button type="button" tabindex="500" title="Abort ongoing upload" class="btn btn-default hide fileinput-cancel fileinput-cancel-button"><i class="glyphicon glyphicon-ban-circle"></i>  <span class="hidden-xs">Cancel</span></button>
<div tabindex="500" class="btn btn-primary btn-file">
<i class="glyphicon glyphicon-folder-open"></i>&nbsp;  <span class="hidden-xs">Browse …</span>
<input data-show-upload="false" data-allowed-file-extensions="[&quot;pdf&quot;]" data-allowed-file-types="[&quot;pdf&quot;]" accept="application/pdf" class="file" id="1502961793221" type="file"></div>
</div>
</div></div></div>

您可以尝试使用以下代码块:

WebElement input = letter.findElement(By.xpath("//input[@id='1502957288010']"));
input.sendKeys("/home/me/loremIpsum.pdf");

刚刚尝试将文件上传到 http://plugins.krajee.com/file-basic-usage-demo,这是指定引导程序文件输入的演示页面。

适用于Firefox和Chrome。唯一的问题是输入可见性。当我使其可见时,我能够上传文件。

但是,您的错误消息对我来说似乎很明显。在磁盘上找不到您的文件。请描述您的环境。您使用的是本地还是远程WebDriver?与远程情况一样,此文件应存在于启动浏览器的目标 VM 上。

最新更新