HtmlUnit のセッションで URL を変更する方法はありますか?
私の場合は、以下のようなものです。
- 認証情報を使用してhttp://test.raja.comにログインします。
- ページ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