如果按钮位于另一个div中,如何单击htmlUnit

时间:2018-07-29 16:08:40

标签: java htmlunit

单击后无法获得响应,我尝试了很多示例,但未成功。

我认为这是该网站的javascript的问题,因为在示例中,我尝试了其简单的make click。

但是,这是我无法点击的按钮

<div class="frame-login">
                <div class="frame-cargando" ng-show="cargandoLogin">
                    <div class="cargando cargando-login"></div>
                </div>
                <div class="formulario {{cargandoLogin ? 'formulario-deshabilitado' : ''}}" ng-show="!autentificando">
                    <form name="security_check" id="security">
                        <input type="text" name="j_username" id="j_username"
                            ng-model="nombreUsuario"
                            placeholder="{{ 'INPUT.LOGIN.USUARIO' | translate }}"
                            autocomplete="off" maxlength="30" />
                        <input type="password"
                            name="j_password" id="j_password" ng-model="clave"
                            placeholder="{{ 'INPUT.LOGIN.CONTRASENA' | translate }}"
                            maxlength="30" autocomplete="off" />
                    </form>
                </div>
                <div ng-show="autentificando" class="{{cargandoLogin ? 'formulario-deshabilitado' : ''}}">
                    <h2 class="h2-supervisor">{{ 'TITULO.HOLA' | translate }} {{usuario.nombre}} {{usuario.apellido}}</h2>
                    <h3 class="h3-supervisor">{{ 'SELECCIONAR.SUPERVISOR' | translate}}</h3>
                    <select ng-model="usuario.supervisor" class="combo-supervisor" ng-change="validarFormulario()" ng-disabled="!activarBoton"
                        ng-options="option.nombreUsuario as option.nombreUsuario for option in supervisores">
                        <option value="">{{ 'COMBOBOX.SELECCIONE' | translate }}</option>
                    </select>
                </div>
                <button class="boton-login" ng-click="validarFormulario()" ng-show="!autentificando" ng-disabled="!activarBoton">{{ 'BOTON.INGRESAR' | translate }}</button>
                <div class="errorl-login">{{ mensaje }}</div>
            </div>

点击的答案是相同的站点,但是我在j_username和j_password中输入了值。

我正在用Java 8尝试,我的代码是:

HtmlPage page = webClient.getPage("https://piv.wom.cl/Dashboardweb/#/seccion6/");
HtmlForm form = page.getFormByName("security_check");
HtmlTextInput nameField = form.getInputByName("j_username");
nameField.setValueAttribute("user");
HtmlPasswordInput passField = form.getInputByName("j_password");
passField.setValueAttribute("pass");
HtmlButton button = (HtmlButton) page.getElementsByTagName("button").get(0);
HtmlPage page2 = button.click();

if( page2 != null){
  System.out.println("we did It=[" + page2.asXml() + "]");
}

编辑1: 我尝试通过另一种方式获取页面,将值从get传递过来,像这样:

 HtmlPage page = webClient.getPage("https://piv.wom.cl/Dashboard-web/login/j_security_check?j_username=username&j_password=password");

但是现在,java显示此错误:

Four
======= EXCEPTION START ========
Exception class=[net.sourceforge.htmlunit.corejs.javascript.JavaScriptException]
com.gargoylesoftware.htmlunit.ScriptException: Error: [$rootScope:infdig] http://errors.angularjs.org/1.4.5/$rootScope/infdig?p0=10&p1=%5B%5D (https://ajax.googleapis.com/ajax/libs/angularjs/1.4.5/angular.min.js#133)
    at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:918)
    at net.sourceforge.htmlunit.corejs.javascript.Context.call(Context.java:620)
    at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.call(ContextFactory.java:532)
    at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.callFunction(JavaScriptEngine.java:847)
    at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.callFunction(JavaScriptEngine.java:819)
    at com.gargoylesoftware.htmlunit.html.HtmlPage.executeJavaScriptFunction(HtmlPage.java:2520)
    at com.gargoylesoftware.htmlunit.html.HtmlPage.executeJavaScriptFunction(HtmlPage.java:2513)
    at com.gargoylesoftware.htmlunit.javascript.host.event.EventListenersContainer.executeEventListeners(EventListenersContainer.java:264)
    at com.gargoylesoftware.htmlunit.javascript.host.event.EventListenersContainer.executeBubblingListeners(EventListenersContainer.java:330)
    at com.gargoylesoftware.htmlunit.javascript.host.event.EventTarget.fireEvent(EventTarget.java:189)
    at com.gargoylesoftware.htmlunit.html.DomElement$2.run(DomElement.java:1413)
    at net.sourceforge.htmlunit.corejs.javascript.Context.call(Context.java:620)
    at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.call(ContextFactory.java:532)
    at com.gargoylesoftware.htmlunit.html.DomElement.fireEvent(DomElement.java:1418)
    at com.gargoylesoftware.htmlunit.html.HtmlPage.executeEventHandlersIfNeeded(HtmlPage.java:1220)
    at com.gargoylesoftware.htmlunit.html.HtmlPage.initialize(HtmlPage.java:259)
    at com.gargoylesoftware.htmlunit.WebClient.loadWebResponseInto(WebClient.java:536)
    at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:398)
    at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:315)
    at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:463)
    at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:448)
    at main.Test.main(Test.java:31)
Caused by: net.sourceforge.htmlunit.corejs.javascript.JavaScriptException: Error: [$rootScope:infdig] http://errors.angularjs.org/1.4.5/$rootScope/infdig?p0=10&p1=%5B%5D (https://ajax.googleapis.com/ajax/libs/angularjs/1.4.5/angular.min.js#133)
    at net.sourceforge.htmlunit.corejs.javascript.Interpreter.interpretLoop(Interpreter.java:1119)
    at net.sourceforge.htmlunit.corejs.javascript.Interpreter.interpret(Interpreter.java:911)
    at net.sourceforge.htmlunit.corejs.javascript.InterpretedFunction.call(InterpretedFunction.java:111)
    at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.doTopCall(ContextFactory.java:422)
    at com.gargoylesoftware.htmlunit.javascript.HtmlUnitContextFactory.doTopCall(HtmlUnitContextFactory.java:331)
    at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:3570)
    at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$4.doRun(JavaScriptEngine.java:840)
    at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:903)
    ... 21 more
JavaScriptException value = Error: [$rootScope:infdig] http://errors.angularjs.org/1.4.5/$rootScope/infdig?p0=10&p1=%5B%5D
== CALLING JAVASCRIPT ==

1 个答案:

答案 0 :(得分:0)

如果要在上述“ div”中提交表单,则可以使用Java脚本函数,例如:document.getElementById(“ form id”)。submit()。