Java Htmlunit中的HtmlAnchor click()函数无效

Java Htmlunit中的HtmlAnchor click()函数无效,java,javascript,htmlunit,Java,Javascript,Htmlunit,我正在尝试使用HtmlUnit自动浏览网站。在这个过程中我需要按下一些按钮。 首先,我使用以下xml构建按钮的HtmlAnchor对象: <a href="dog.php"> <img src="http://images.hand.co.uk/Pic/site_images/hand/Myper/MyOrder/images/DogRed.gif" width="75" height="31" border="0" alt="1 adds"/> </a>

我正在尝试使用HtmlUnit自动浏览网站。在这个过程中我需要按下一些按钮。 首先,我使用以下xml构建按钮的HtmlAnchor对象:

<a href="dog.php">
  <img src="http://images.hand.co.uk/Pic/site_images/hand/Myper/MyOrder/images/DogRed.gif" width="75" height="31" border="0" alt="1 adds"/>
</a>

当我使用click()方法单击它时,它可以正常工作。 然后,我被移动到另一个页面,在该页面中,我有一个链接,需要单击该链接才能显示所需的内容。 单击之后,我没有移动到另一个页面,它只是一个Java脚本函数

这是第二个链接的锚点:

<a style="color: black; font-weight: bold;" href="javascript:show_me('DogDetails.php?DogID=2445485', 2445485, 800);">
  details
</a>

对于这两个元素,我将使用HtmlAnchor对象及其click()方法。但该方法对第二个元素毫无作用

我也尝试过使用HtmlUnit内置的JavaScript引擎,但没有成功。
如何使用HtmlUnit平台单击此持久链接?

最可能的问题是HtmlUnit没有等待JavaScript完成运行。HtmlUnit常见问题解答建议了3种解决方法:

其中,最简单的解决方案是让您的
WebClient
等待AJAX请求完成:

webClient.setAjaxController(new NicelyResynchronizingAjaxController());

我发现一些网站在后台线程上运行AJAX的技巧非常巧妙,这意味着
NicelyResynchronizingAjaxController
不会等待它完成,因为它只监视主UI线程。有一个很好的答案解释了如何等待所有线程,而不仅仅是主线程。

我遇到了类似的问题,尝试了几种方法等待javascript在后台运行,但没有成功

我有点想切换到Selenium,但它在WebClient上禁用CSS后“自行解决”:

WebClient.getOptions().setCssEnabled(false);
每当我们重新启用CSS时,.click()就会停止工作

我的主播是:

<div class="my-anchor's-parent-class"/>
  <a href="javascript:void(0) class="text" id="buttonSearch" style="display: block;">Search</a>
</div>

请你再发一些细节好吗?当你点击javascript链接时,你怎么知道它不工作?您希望在页面上更改什么?单击后,我希望页面会更改。页面中应显示一些新链接和图片。情况是前后页面完全相同。你对selenium是什么意思?这个@用户34609是的。两年前我改用硒,从那以后几乎没有问题。我尝试了所有这些方法。似乎什么都不管用。我尽可能地遵循运行时代码。似乎在类ScriptRuntime的第3183行:result=f.doTopCall(callable、cx、scope、thisObj、args);执行最初失败,因为“结果”返回为未定义。我不明白为什么…对于任何访问这个问题的人,我最终解决了我的问题。解决方案是切换到Selenium,点击上面提到的链接没有问题。
    $('.my-anchor's-parent-class').each(function () {
        $(this).children('a').click(function () {
          // if parent has another given class appended, call .myFunction(this)
          // else, call other function
        });
    });