我有一个提交按钮,onclick()
方法在第二次点击时返回false
。这样我尝试处理尝试双击提交按钮的用户。
使用 htmlunit 2.3 ,我能够像这样测试正确的行为:
public static void clickTwice( ClickableElement element ) throws IOException {
element.click();
element.click();
}
更新为 htmlunit 2.12 后,上述代码不再有效。 ClickableElement
已被删除,HtmlElement
现已clickable
。所以我把它改成了:
public static void clickTwice( HtmlElement element ) throws IOException {
element.click();
element.click();
}
但现在结果与 htmlunit 2.3 不同。
似乎第一次点击使当前页面无效并关闭了javascript引擎。第二次点击是在没有评估onclick()
的情况下执行的,因此第二次提交到服务器的时间不会被阻止。
问题:如何使用 htmlunit 2.12 模拟用户在同一页面上点击两次提交按钮?
答案 0 :(得分:0)
Marc Guillemot(htmlunit的提交者)给了我解决这个问题的方法:
public void clickTwice( final WebClient webClient, final HtmlElement clickable ) throws IOException {
final WebConnection originalConnection = webClient.getWebConnection();
WebConnectionWrapper wcw = new WebConnectionWrapper( originalConnection ) {
private boolean m_requested = false;
@Override
public WebResponse getResponse( final WebRequest request ) throws IOException {
if( m_requested ) {
throw new RuntimeException( "Double request!" );
}
m_requested = true;
clickable.click();
webClient.setWebConnection( originalConnection );
return super.getResponse( request );
}
};
webClient.setWebConnection( wcw );
clickable.click();
}