模拟dom元素的点击

时间:2017-06-19 12:50:34

标签: javascript jxbrowser

使用jxBrowser我想使用像

这样的代码来模拟对html元素的点击
final DOMDocument dom = browser.getDocument();
Browser.invokeAndWaitFinishLoadingMainFrame(browser, new Callback<Browser>() 
{
 @Override
 public void invoke(Browser browser) {
    DOMElement elementToClick = dom.findElement(By.xpath("some xPath expression"));
    if (elementToClick != null) {
        elementToClick.click();
    }
}
});

如果click()动作导致页面下载但是如果点击只是执行一些javascript(没有网络动作),这可以正常工作,我得到了一个超时异常。 所以我的问题是如何在执行“纯粹”javascript或网络访问时等待点击操作完成。

感谢您的帮助。

此致 克里斯托夫

1 个答案:

答案 0 :(得分:0)

DOMElement click()方法是异步的,JxBrowser不会等到此方法导致的网页上的任何操作完成。

我建议你可以使用一些JavaScript解决方案以编程方式单击DOM元素。 Browser实例的executeJavaScriptAndReturnValue()方法是同步的,并将等到执行处理此DOM元素上的单击操作的所有JavaScript事件侦听器。不过,当点击操作导致页面加载时,您仍应检查浏览器是否正在加载。 请查看下面的代码示例:

browser.executeJavaScriptAndReturnValue("document.getElementById('converted some xPath expression').click();");