2017-04-22 6 views
0

저는 htmlunit을 처음 사용하고 htmlunit로 작성된 웹 페이지에 대한 테스트를 수행해야합니다. 해당 로그인 페이지에는 양식이 없습니다. 다음은 htmlunit 녹아웃 js 작동하지 않습니다. 제출 버튼 클릭시 동일한 페이지 반환

는 사용자 이름, 암호에 대한 HTML 코드 제출 버튼 -

<div class="loader-mask" data-bind="visible: false"> 
        <div class="loader"> Loading Form...</div> 
       </div> 
       <div class="form-group"> 
        <label class="control-label">Email ID:</label> 
        <input type="text" name="username" class="form-control" placeholder="[email protected]" data-bind=" 
         value: loginHandler.userEmail, 
         enterKey: signIn 
        "> 
       </div><!-- /.form-group --> 
       <div class="form-group"> 
        <label class="control-label">Password:</label> 
        <input type="password" name="password" class="form-control" placeholder="Passwords are case-sensitive" data-bind=" 
         value: loginHandler.userPassword, 
         enterKey: signIn 
        "> 
       </div><!-- /.form-group --> 
       <div class="text-right"> 
        <p><button type="button" id="qaSignIn" class="btn btn-default" data-bind=" 
         click: signIn, 
         disable: loginHandler.isLoggingIn, 
         continueOn: userLoggedIn, 
         continueLink: { link: 'dashboard.html', params: {} } 
        "> 

이제 HtmlUnit과에서, 내가 쉽게 사용자 이름, 암호 및 버튼을 얻을 수와 나는 이름에 대한 값을 설정할 수 오전 암호 필드뿐만 아니라 버튼을 클릭 할 때 동일한 HTML 로그인 페이지를 반환합니다. 브라우저에서 자격 증명으로 로그인을 시도했는데 거기에 로그인 할 수 있습니다. 그래서 신임장은 좋습니다.

내 HtmlUnit과 코드입니다 -

HtmlTextInput htmlInputUsername = (HtmlTextInput) loginPage.getElementByName("username"); 
htmlInputUsername.setValueAttribute("myUserName"); 
HtmlPasswordInput htmlInputPassword = (HtmlPasswordInput) loginPage.getElementByName("password"); 
htmlInputPassword.setValueAttribute("myPassword"); 
HtmlButton htmlButton = (HtmlButton) loginPage.getElementById("qaSignIn"); 
loginPage = htmlButton.click(); 

내가 전에 로그인 버튼을 클릭하지만이 같은 XML 페이지를 반환 한 후 인쇄 page.asXml()을 시도했다. 어떤 생각을 잘못하고 있니? 난이 옵션을 설정 시도 - 사전에

webClient.getOptions().setUseInsecureSSL(true); 
webClient.getCookieManager().setCookiesEnabled(true); 
webClient.getOptions().setJavaScriptEnabled(false); 
webClient.getOptions().setCssEnabled(true); 
webClient.getOptions().setRedirectEnabled(true); 
webClient.setAjaxController(new NicelyResynchronizingAjaxController()); 
webClient.waitForBackgroundJavaScript(30000); 

감사합니다.

답변

1

귀하의 페이지를 분석 할 URL을 알지 못하면서 나는 단지 추측 할 수 있습니다. 첫 번째 시도에서

webClient.waitForBackgroundJavaScript(30000); 

은 옵션이 아닌 두 번째

에서 자바 스크립트

webClient.getOptions().setJavaScriptEnabled(true); 

을 활성화합니다. WebClient를 설치하는 동안이 작업을 수행하는 것은 쓸모가 없습니다. 당신은 당신의 클릭

loginPage = htmlButton.click(); 
webClient.waitForBackgroundJavaScript(30000); 

후이 통화를해야하는 것은 어쩌면 당신의 테스트를 위해 WETATOR (www.wetator.org)를 사용하는 옵션입니다. 웹 페이지와의 상호 작용은 훨씬 간단하며 모든 대기 마법은 자동으로 수행됩니다.

+0

하는 데 도움이. 하지만 지금 다음 문제 - 브라우저에서 응용 프로그램에 로그인하면 잠시 동안 제출 버튼이 비활성화되고 다음 페이지로 리디렉션되는 것을 볼 수 있습니다. 코드에서 버튼을 클릭했을 때 반환되는 페이지에는 비활성화 된 버튼이 있습니다. 그 후 아무 일도 일어나지 않는다. 다음 페이지로 방향을 바꾸지 않습니다. –

+0

내 페이지를 한 번 더 들여다 보니

0

JS 아약스 "window.location.href"와 같은 코드가있을 수 있습니다 당신은이 코드를 같이해야 그 때는 :

List<WebWindow> webWindows = client.getWebWindows(); 
WebWindow webWindow = webWindows.get(0); 
HtmlPage page = (HtmlPage) webWindow.getEnclosedPage();