我正在尝试使用WebDriver自动化文件上传。它适用于ChromeDriver和FirefoxDriver,但拒绝为HTMLUnit工作。
我已经阅读了
Using Webdriver for PrimeFaces file upload
Unable to upload file using Selenium web driver
但两者都没有帮助。
此上传操作的selenium(java)代码非常简单:
String elementXPath = "//input[contains(@id,'FileUpload_input')]";
WebElement element = driver.findElement(By.xpath(elementXPath));
element.sendKeys(pathToFile);
inputElement的html代码是:
<div class="fileupload-buttonbar ui-widget-header ui-corner-top">
<label class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-icon-left fileinput-button" role="button" aria-disabled="false">
<span class="ui-button-icon-left ui-icon ui-icon-plusthick"></span>
<span class="ui-button-text">Upload</span>
<input type="file" id="form:FileUpload_input" name="form:FileUpload_input">
</label>
</div>
<div class="fileupload-content ui-widget-content ui-corner-bottom">
<table class="files"></table>
</div>
可能是必要的,输入元素的primefaces-codesnippet:
<div class="#{modalDialog ? 'span5' : 'span6'}">
<p:fileUpload id="FileUpload" mode="advanced" auto="true" sizeLimit="2097152" fileUploadListener="#{ClassView.handleFileUpload}"
label="Upload" allowTypes="/(\.|\/)(gif|GIF|jpe?g|JPE?G|png|PNG)$/" process="@this"
showButtons="false"/>
</div>
正如您所看到的,这是一个图片上传。这个上传的值得注意的特点是,没有'确认'或'提交'按钮。
testautomation适用于主浏览器,但是使用htmlUnit失败。经过几个小时的调试,我可以确认,htmlUnit执行'sendKeys'-Methode,但这不会触发fileUploadListener。我已经尝试点击其他元素,因此有一个focusLost-Action,但这没有帮助。 实际上,'sendKeys'之后的'driver.getPageSource()'传递:
<div class="fileupload-buttonbar ui-widget-header ui-corner-top">
<label class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-icon-left fileinput-button" role="button" aria-disabled="false">
<span class="ui-button-icon-left ui-icon ui-icon-plusthick"></span>
<span class="ui-button-text">Upload</span>
<input id="form:FileUpload_input" name="form:FileUpload_input" value="correct\path\to\file\pic.png" type="file" >
</label>
</div>
<div class="fileupload-content ui-widget-content ui-corner-bottom">
<table class="files">
<tbody align="left">
<tr class="template-upload" style="">
<td class="preview"></td>
<td class="name">pic.png</td>
<td class="size"></td>
<td class="progress">
<div class="ui-progressbar ui-widget ui-widget-content ui-corner-all" role="progressbar" aria-valuemin="0" aria-valuemax="100" aria-valuenow="100">
<div class="ui-progressbar-value ui-widget-header ui-corner-left ui-corner-right" style="width: 100%; display: block;"></div>
</div>
</td>
<td class="start">
<button class="ui-button ui-widget ui-state-default ui-corner-all ui-button-icon-only ui-state-hover" type="submit">
<span class="ui-button-icon-left ui-icon ui-icon ui-icon-arrowreturnthick-1-n"></span>
<span class="ui-button-text">ui-button</span>
</button>
</td>
<td class="cancel">
<button class="ui-button ui-widget ui-state-default ui-corner-all ui-button-icon-only">
<span class="ui-button-icon-left ui-icon ui-icon ui-icon-cancel"></span>
<span class="ui-button-text">ui-button</span>
</button>
</td>
</tr>
</tbody>
</table>
</div>
所以现在有按钮......为什么?
我仍然试图点击带有xPath "//td[@class='start']//button"
的按钮,但仍然没有发生任何事情。没有Fileupload。
HtmlDriver启用了javascript,我也在使用NicelyResynchronizingAjaxController()。我已经尝试等待超过30秒,但仍然无效。
是否有人知道这个问题并且它是解决方案......或者至少是一种解决方法?
答案 0 :(得分:0)
我自己找到了解决方案。 我仍在使用selenium 2.40,升级到2.42解决了问题,虽然更改日志没有为我的问题提出可能的错误修正。