如何用htmlunit模拟两次快速点击?

时间:2013-10-01 16:12:41

标签: htmlunit

我有一个提交按钮,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 模拟用户在同一页面上点击两次提交按钮?

1 个答案:

答案 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();
}