gpt4 book ai didi

selenium - 使用 HtmlUnit 的 FileUpload 不会触发 fileUploadListener-Event(Primefaces 自动上传)

转载 作者:行者123 更新时间:2023-12-02 18:56:52 26 4
gpt4 key购买 nike

我正在尝试使用 WebDriver 自动上传文件。它适用于 ChromeDriver 和 FirefoxDriver,但不适用于 HTMLUnit。

我已经读过了

Using Webdriver for PrimeFaces file upload

https://stackoverflow.com/questions/21753497/unable-to-automate-filling-of-form-with-file-upload-using-htmlunit

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>

如您所见,这是一张图片上传。此上传的值得注意的特点是,没有“确认”或“提交”按钮。

测试自动化在主浏览器上运行良好,但在 htmlUnit 上失败。经过几个小时的调试,我可以确认 htmlUnit 执行“sendKeys”方法,但这不会触发 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" 单击按钮,但仍然没有发生。没有文件上传。

HtmlDriver 启用了 javascript,而且我正在使用 NicelyResynchronizingAjaxController()。我已经尝试过等待 30 秒以上,但仍然不起作用。

是否有人知道这个问题及其解决方案......或者至少有一个解决方法?

最佳答案

我自己找到了解决方案。我仍在使用 selenium 2.40,升级到 2.42 解决了问题,尽管更新日志没有建议针对我的问题进行可能的错误修复。

关于selenium - 使用 HtmlUnit 的 FileUpload 不会触发 fileUploadListener-Event(Primefaces 自动上传),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25202560/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com