我需要使用htmlUnit webDriver在不同页面下载不同的文件。我在页面上循环,对于每个页面,我单击输入字段以触发下载。 对于第一次下载,我单击一个HtmlInputElement(一个提交按钮),它返回给我文件。之后,HtmlPage变为UnexpectedPage。检查UnexcpetedPage中的WebResponse我仍然发现已经下载的文件。 如何解决?
代码: [...]
public void test(HtmlPage htmlPage){
List<?> checkBox = htmlPage.getByXPath("//tbody[@id='TestID:ricerca_report:tb']/tr[child::td[contains(text(),'TEST')]]/td[1]/input[@type='checkbox']");
for (int j = 0; j < checkBox.size(); j++) {
HtmlCheckBoxInput checked = (HtmlCheckBoxInput) checkBox.get(j);
checked.setChecked(true);
}
writeResponseHtml(htmlPage, spOp);
InputStream input = null;
try{
HtmlSubmitInput htmlSubmitInput = htmlPage.getElementByName(param.getNameAttribute());
WebResponse webResponse = htmlSubmitInput.click().getWebResponse();
extractOriginalFileName(webResponse, spiderInfo.getFileName());
if( checkAndSaveFileExtension(webResponse) != null ){
input = webResponse.getContentAsStream();
downloadFile( input );
spiderInfo.setFileName("work/output/spider_logs/");
}else
spiderInfo.setSpiderState(SpiderStates.DOWNLOAD_ERROR);
}catch ( Exception e ){
logger.error("getOperation download exception; " + spOp + "; Exception: " + e);
spiderInfo.setSpiderState(SpiderStates.DOWNLOAD_ERROR);
page = null;
}
writeResponseHtml(htmlPage, spOp);
HtmlTableDataCell tableCell = htmlPage.getFirstByXPath(param.getContainsElement2());
Page p = tableCell.click(); // Here i got the exception
}
[....]
答案 0 :(得分:0)
如果有人遇到同样的问题;我使用 Page Creator :
解决了问题PageCreator dpc = new DefaultPageCreator();
HtmlPage detailPage = null;
for (int j = 2 ; j<= 11; j++){ // there are 10 pages
detailPage = (HtmlPage)dpc.createPage(htmlPage.getWebResponse(),webClient.openWindow(htmlPage.getUrl(),"ew Window"));
detailPage = ((HtmlElement)detailPage.getFirstByXPath("MYXPATH")).click();
detailPage = ((HtmlElement)((HtmlPage)detailPage ).getFirstByXPath("MYXPATH2")).click(); // download element
webClient.setCurrentWindow(htmlPage.getEnclosingWindow()); //go back to main window
}// end FOR
其中htmlPage是主页面。