Java Htmlunit中的HtmlAnchor click()函数无效
我正在尝试使用HtmlUnit自动浏览网站。在这个过程中我需要按下一些按钮。 首先,我使用以下xml构建按钮的HtmlAnchor对象: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>
<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
});
});