在HtmlUnit中切换网址

时间:2013-06-28 16:44:00

标签: htmlunit

有没有办法在HtmlUnit中使用session更改url?

我的情况如下所示,

  1. 使用凭据登录http://test.raja.com
  2. 获取页面http://home.raja.com,它应该在登录时显示我的主页。
  3. 在浏览器中,这非常好。但是在HtmlUnit中,我只能获得test.raja.com而不是主页。我尝试过WebWindow,WebConnection,addCookie等但没有任何作用。

    https://community.jboss.org/wiki/UsingTheHtmlUnitAPIWithJSFUnit

    中找到了这个
      

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

         

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

         

    JSFSession jsfSession = new JSFSession(“/ index.jsf”); Web客户端   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
    

1 个答案:

答案 0 :(得分: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);