我的问题是如何通过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");
答案 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;
}
}