0

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

4

1 回答 1

0

Marc Guillmot(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();
}
于 2013-10-24T07:11:34.253 回答