如何处理HtmlUnit和框架。棘手的框架逻辑

时间:2013-06-20 19:03:39

标签: frame htmlunit

我原来的问题很混乱,我重写了。现在它更加清晰。

您好我正在尝试使用HtmlUnit导航网页。我在尝试着 去网址 - >在文本框中输入文本(在第1帧中) - >按搜索按钮(在第1帧中) - >转到搜索结果显示的新框架(第2帧)。

当我写这段代码时:

HtmlPage page = webClient.getPage("http://someurl.com");

HtmlPage toolbar = (HtmlPage) page.getFrameByName("toolbar").getEnclosedPage(); //GET TOOLBAR FRAME 

HtmlTextInput searchBox = toolbar.getElementByName("query"); //GET TEXT BOX ELEMENT

searchBox.setValueAttribute("SOME STRING"); //FILL TEXT BOX ELEMENT WITH TEXT

List<HtmlElement> elements1 = (List<HtmlElement>) toolbar.getByXPath(<SOME XPATH>); //LIST OF A SINGLE ELEMENT WHICH IS THE SEARCH BUTTON

HtmlElement element2 = elements1.get(0); // GET SEARCH BUTTON ELEMENT FROM LIST

page = element2.click();  // CLICK SEARCH BUTTON AND LOAD NEW PAGE TO "page"

我正在搜索"SOME STRING"。当我这样做时,另一个页面出现(虽然不刷新页面,URL永远不会刷新)与一个附加框架。现在,我点击搜索按钮,但新的page只是toolbar框架的网页,而不是整个网页的网页。

我想现在访问其他框架。那么如何“退出”当前帧并选择新帧?

1 个答案:

答案 0 :(得分:0)

我找到了我的试验和错误的答案。

page = (HtmlPage) searchButton.click().getEnclosingWindow().getTopWindow().getEnclosedPage();
page = (HtmlPage) page.getFrameByName("Frame 1").getEnclosedPage();
page = (HtmlPage) page.getFrameByName("Frame 2").getEnclosedPage();

效果很好,希望我能帮助你们中的一些人。