【问题标题】:HtmlUnit wait for onclick eventHtmlUnit 等待 onclick 事件
【发布时间】:2021-01-29 19:04:15
【问题描述】:

我有这个网页代码:

<a id="btn">Click</a>

<script>
    $('document').ready(function() {
         $('#btn').click(function() {
             ...
             location.search = $.params({click: '1'});
         });
    });
</script>

此代码在 Chrome 中完美运行。

但我想用 HtmlUnit 测试它。我写道:

    page= (HtmlPage) ((HtmlAnchor) page.getDocumentElement().querySelector("#btn")).click();
    assertThat(page.getUrl().getQuery(), containsString("click=1"));

此代码随机运行。有时测试通过,有时失败。 我想是因为异步调用JS的原因,但是我解决不了。

那么我该如何测试呢?

此外,有更好的解决方案来测试网站安装的 HtmlUnit? HtmlUnit 很失望...

【问题讨论】:

    标签: javascript htmlunit


    【解决方案1】:

    您的代码随机运行这一事实可能意味着异步 JS 调用中存在时间问题。我已经在另一个问题中解释了解决此类问题的最佳选择:Get the changed HTML content after it's updated by Javascript? (htmlunit)

    回答您的第二个问题,HtmlUnit 对 JS 来说是一件令人头疼的事情。也许带有本机浏览器(例如:IE)驱动程序的 Selenium 是更好的选择。 C 计划是 PhantomJS,但它不是 Java 库。

    【讨论】:

    • 好点。我假设您在 ... 中执行 AJAX 调用。无论哪种方式,如果它是异步的,那么您可以以相同的方式处理它。现在我知道可能是什么问题了:location.search 正在执行另一个 HTTP 请求。所以你应该等待请求完成。同样,这应该像我在另一个问题中解释的那样通过手动延迟来处理
    • 不,在... 代码中它只是用于设置变量。此函数中不再执行任何操作。
    【解决方案2】:

    我也遇到了类似的问题。我的 html 链接正在使用事件触发 javascript。

    我不工作的测试代码是:

    HtmlAnchor anchor = element.getFirstByXPath("//a[@id='...']");
    anchor.click(); // This is not firing events on js side!!!!
    

    它是如何工作的:

    HtmlAnchor anchor = element.getFirstByXPath("//a[@id='...']");
    anchor.fireEvent("click"); // JS running which listening on click events!
    

    【讨论】:

    • Michael - 请在 Github 上为您的案例打开一个问题。 anchor.click() 应该肯定会触发事件。你用的是 rect 版本吗?
    • 嗨@RBRi,我正在使用带有 Thymeleaf 和 JQuery 的 Spring MVC。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-27
    • 1970-01-01
    • 1970-01-01
    • 2012-02-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多