使用Webdriver进行PrimeFaces文件上传

时间:2012-02-21 15:19:10

标签: primefaces webdriver htmlunit

我在使用Webdriver和HTMLUnit为我的Primefaces页面编写测试时遇到了问题。

我所做的是在页面上添加一个简单的Primefaces文件上传,它将采用CSV文件(尚未验证),如下所示:

<p:fileUpload id="listFileUpload" mode="simple"  value="#{fileImportView.file}" />

当从Firefox使用时,这确实会使我的侦听器方法可以使用UploadedFile对象。

但是,当通过测试调用相同的侦听器时,生成的UploadedFile为null。要在提交表单之前为fileupload字段赋值,我使用sendKeys,如下所示:

WebElement drawListFileUpload = webDriver.findElement(By.id("accordionPanel:listFileUpload"));
drawListFileUpload.clear();
drawListFileUpload.sendKeys(file);

谁能看到发生了什么?我一直在寻找与我们使用的HTMLUnit驱动程序有关的答案,但是还没有雪茄......类似的代码似乎可以在同一形式的Primefaces日历中正常工作。

Here's a link to access the application

1 个答案:

答案 0 :(得分:2)

我也喜欢你的发展。我将分享我的知识,但可能有更好的方法。

服务方的jsf代码

<h:form id="lifeProposalEntryForm" enctype="multipart/form-data">
    <p:fileUpload fileUploadListener="#{AddNewLifeProposalActionBean.handleProposalAttachment}"  
            mode="advanced" multiple="true" sizeLimit="3000000" update="customerEntryPanel attachmentDataList"
            allowTypes="/(\.|\/)(gif|jpe?g|png)$/" id="proposalAttachment"/>    
</h:form>

客户端的HTML代码

<div id="lifeProposalEntryForm:proposalAttachment" class="ui-fileupload ui-widget">
    <div class="ui-fileupload-buttonbar ui-widget-header ui-corner-top">
        <span class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-icon-left ui-fileupload-choose" role="button">
            <span class="ui-button-icon-left ui-icon ui-c ui-icon-plusthick"></span>
            <span class="ui-button-text ui-c">Choose</span>
            <input id="lifeProposalEntryForm:proposalAttachment_input" type="file" multiple="multiple" name="lifeProposalEntryForm:proposalAttachment_input">
        </span>
        <button class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-icon-left ui-fileupload-upload" type="button" role="button">
            <span class="ui-button-icon-left ui-icon ui-c ui-icon-arrowreturnthick-1-n"></span>
            <span class="ui-button-text ui-c">Upload</span>
        </button>
        <button class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-icon-left ui-fileupload-cancel" type="button" role="button">
            <span class="ui-button-icon-left ui-icon ui-c ui-icon-cancel"></span>
            <span class="ui-button-text ui-c">Cancel</span>
        </button>
    </div>
......
  • lifeProposalEntryForm:proposalAttachment_input
  • 检索id的元素
  • 放置/发送文件(一个或多个文件)
  • 检索second button的{​​{1}}元素。
  • 点击按钮元素。

java中的Selinium测试

<div id="lifeProposalEntryForm:proposalAttachment"

试试我提到的。这对我有用。