问题描述
我是 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 (将#修改为@)