由HtmlUnit进行的JSF Richfaces fileUpload测试

时间:2015-04-22 09:02:24

标签: jsf richfaces htmlunit

我的问题是如何通过HtmlUnit测试Richfaces FileUpload。

我的 html页面代码如下:

<div class="uploadFile">
    Upload File:
    <div id="allForm:upload" class="rf-fu ">
        <div class="rf-fu-hdr">
            <span class="rf-fu-btns-lft">
            <span class="rf-fu-btn-add">
            <span class="rf-fu-btn-cnt-add" style="background-position: 2px 2px; padding: 3px 5px 3px 21px;">
            <span class="rf-fu-inp-cntr">
            <input class="rf-fu-inp" type="file">
            </span> Add...
            </span>
            </span>
            <span class="rf-fu-btn-upl">
            </span>
            <span class="rf-fu-btns-rgh">
            </div>
            <div class="rf-fu-lst" style="height: 0px"></div>
            <div class="rf-fu-cntr-hdn">
            </div>
            </div>
    </div>

我的 java htmlunit测试代码就像:

@Test(dataProvider = "browsers")
public void testFileUpload(BrowserVersion browserVersion) throws IOException {
    HtmlPage page = (HtmlPage) doLogin(browserVersion);
    HtmlFileInput fileUpload = page.getElementByName("rf-fu-inp");
    assertNotNull(fileUpload);
    fileUpload.setData(fileForUpload(FILEPATH).toByteArray());
}

在这种情况下,我得到以下异常:

com.gargoylesoftware.htmlunit.ElementNotFoundException: elementName=[*] attributeName=[name] attributeValue=[rf-fu-inp]

我的主要问题是我在输入元素上没有id,否则我有机会做出类似的事情。

 HtmlFileInput fileUpload = (HtmlFileInput) page.getElementById("rf-fu-inp");

2 个答案:

答案 0 :(得分:0)

怎么样:

page.getByXPath("//*[@class='rf-fu-inp']")

表示:通过XPath查找所有标记名称&#39; *&#39;来自根元素&#34; //&#34;具有属性&#34; class&#34;价值&#34; rf-fu-inp&#34;。

请在XPath Tutorial和HtmlUnit API

中阅读更多内容

答案 1 :(得分:0)

我找到了解决方案:

 //UplaodFile
        HtmlFileInput htmlFileInput = null;
        DomNodeList<DomElement> inputs = page.getElementsByTagName("input");
        for (DomElement domElement : inputs) {
            if (domElement.getAttribute("class").equals("rf-fu-inp") &&
                    domElement.getAttribute("type").equals("file")) {
                htmlFileInput = (HtmlFileInput) domElement;
                htmlFileInput.setValueAttribute(System.getProperty("basedir") + FILEPATHCURRENTXML);
                break;
            }
        }