2

有什么方法可以在 HtmlUnit 中使用 session 更改 url?

我的情况如下所示,

  1. 使用凭据登录到http://test.raja.com 。
  2. 获取页面http://home.raja.com,它应该让我的主页登录。

在浏览器中,这完全没问题。但是在 HtmlUnit 中,我只能得到 test.raja.com 而不是主页。我尝试了 WebWindow、WebConnection、addCookie 等,但没有任何效果。

在https://community.jboss.org/wiki/UsingTheHtmlUnitAPIWithJSFUnit找到这个

在同一浏览器会话中获取新 URL

如果您想模拟用户在浏览器会话中键入 URL 或出于任何其他原因需要执行 GET 请求,则需要使用 WebClient 和 JSFUnit 的 WebConversationFactory,如下例所示:

JSFSession jsfSession = new JSFSession("/index.jsf"); WebClient webClient = jsfSession.getWebClient(); webClient.getPage(WebConversationFactory.getWARURL() + "/myotherpage.jsf");

JSFSession、JSFServerSession 和 JSFClientSession 将与 WebClient 保持同步,您可以继续正常使用这些对象。此外,HttpSession 将相同,因为 WebClient 将继续设置 JSESSIONID cookie。

这在 HtmlUnit 本身中可能吗?

我的示例代码

final WebClient webClient = new WebClient();
HtmlPage page = webClient.getPage("https://home.raja.com");     
final List<FrameWindow> window = page.getFrames();
final HtmlPage pageTwo = (HtmlPage) window.get(0).getEnclosedPage();//this is test.raja.com served via iframe
HtmlForm form = pageTwo.getFormByName("login");
HtmlInput userName = (HtmlTextInput)form.getInputByName("testone");
HtmlInput password = (HtmlPasswordInput)form.getInputByName("testtwo");
userName.setValueAttribute("guest");
password.setValueAttribute("guest");
HtmlInput submit = (HtmlSubmitInput)form.getInputByName("submit");
HtmlPage pagethree = (HtmlPage)submit.click();
page = webClient.getPage("https://home.raja.com");      //here it again goes for login page
4

1 回答 1

3

问题解决了。使用以下代码,

webClient.setRedirectEnabled(true);
webClient.setJavaScriptEnabled(true);                                             
webClient.setThrowExceptionOnScriptError(false);             
webClient.setThrowExceptionOnFailingStatusCode(false);  
webClient.setUseInsecureSSL(true);
webClient.setCssEnabled(true);
webClient.setAppletEnabled(true);
webClient.setAjaxController(new NicelyResynchronizingAjaxController());
webClient.waitForBackgroundJavaScript(10000);
于 2013-06-29T07:57:11.523 回答