2

HtmlUnit のセッションで 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 との同期を維持し、これらのオブジェクトを引き続き通常どおり使用できます。また、WebClient は引き続き JSESSIONID Cookie を設定するため、HttpSession は同じになります。

これは 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 に答える