HtmlUnit:下载文件后获取UnexpectedPage

时间:2013-06-14 15:52:55

标签: java download selenium-webdriver htmlunit

我需要使用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
}

[....]

1 个答案:

答案 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是主页面。