HtmlUnit 未单击表单内的输入类型按钮

问题描述

我是 HtmlUnit 的新手,正在测试 SAML SSO 流程。

form 有两个 button一个是常规的 type=submit 按钮,用于提交 Post 请求(表单)和另一个 input type=button

当我使用常规提交按钮时,它可以工作,我可以使用凭据登录并查看下一个登录页面

在输入类型按钮点击中,它在点击时调用 javascript 函数,并调用提交表单,有一些重定向,最终页面显示带有登录表单的 IDP 页面

我被卡在这里,因为我没有看到点击发生,我已经尝试了很多东西,但仍然没有被点击。在日志中,我没有看到 POST 被触发。它停留在同一页面上。我曾尝试使用 wait for javascript 和 sleep 一段时间但没有变化。

这是表单的片段,一旦填写了用户名和密码,常规提交按钮就会变成 enabled

<form method="POST" action="login" id="thisform">
   <input id="username" name="username" type="text">
   <input id="password" name="password" type="password">
   <button id="loginbutton" type="submit" class="submit-btn" disabled>Sign in</button>
   <div class="sign-in-with">  
      <input type="button" value="test" class="other-test-btn" id="test">
   </div>
</form>

input button 的 JavaScript 代码段:

var testproviderLogin = function(e) {
    $('#testHandler').val(e.target.id);
    $('#thisform').submit();
}

var formSubmitted = function(e) {
    if (window.location.hash) {
        $("#fragment").val(window.location.hash);
    }
}


$(document).ready(function() {
    $('.other-test-btn').click(testproviderLogin);
    $('#thisform').submit(formSubmitted);
});

这是我的代码

try (final WebClient webClient = new WebClient(browserVersion.CHROME)) {

            webClient.getoptions().setThrowExceptionOnScriptError(false);
            webClient.getoptions().setThrowExceptionOnFailingStatusCode(false);
            webClient.getoptions().setJavaScriptEnabled(true);
            webClient.getoptions().setCssEnabled(true);
            webClient.getoptions().setRedirectEnabled(true);
            webClient.setAjaxController(new NicelyResynchronizingAjaxController());
            webClient.getCookieManager().setCookiesEnabled(true);

            final HtmlPage loginPage = webClient.getPage("https://loginpage.com");
            assertthat(loginpage.getTitleText()).isEqualTo("Login page");

            HtmlButtonInput button = loginpage.getHtmlElementById("test");
            //This makes no difference
            //webClient.waitForBackgroundJavaScript(30000);      
            //Thread.sleep(30000)


            // Click on the Sign in with test
            final HtmlPage nextLoginPage = button.click();
            synchronized (nextLoginPage) {
                nextLoginPage.wait(30000);
            }
            System.out.println(nextLoginPage.asXml()); //stays on same login page.

            //HtmlPage myPage = (HtmlPage) webClient.getCurrentwindow().getEnclosedPage();
//            System.out.println("MY PAGE " + webClient.getCurrentwindow().getEnclosedPage().getUrl().toString());
//            System.out.println(myPage.asXml());

      }

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...