如何将HTMLDivElement返回到Java代码

时间:2017-01-13 16:03:25

标签: javascript java dom

在Java项目中,我使用Browser来显示页面。我使用JavaScript和映射Java方法从文档中获取元素。

我的JavaScript:

var button = document.getElementById(`actionButton`);

if(element != null)
   buttonFound(element);

buttonDivHtmlElement

映射的Java方法buttonFound

ButtonFoundFunction(this, browser, "buttonFound"); 

...扩展BrowserFunction并覆盖方法

@Override
public Object function(Object[] arguments) {
    browser.execute(arguments[0] + ".click()");
}

但方法function未被调用(?)。

我尝试不返回DivHtmlElement但是简单的按钮ID如下面的JavaScript所示:

buttonFound(`actionButton`);

然后覆盖function调用点击

@Override
public Object function(Object[] arguments) {
    browser.execute("document.getElementById('" + arguments[0] + "').click();");
}

...它有效,但它按ID搜索按钮两次,首先是JavaScript,第二次是调用function

如何将DivHtmlElement返回此function

修改

搜索按钮的第一个JavaScript:

var buttons = [];

var buttons[0] = document.getElementById(`actionButton`);

第二个只执行点击索引的JavaScript:

function doClick(index){
   buttons[index].click();     
}

1 个答案:

答案 0 :(得分:0)

由于@I wrestled a bear once表示我无法将原生JS对象传递给Java,所以我做了同样的事情。

当JavaScript看起来像这样:

var buttons = [];

var buttons[0] = document.getElementById(`actionButton`);

在Java中执行click是足够的代码:

browser.execute("buttons[0].click()");

因为buttons数组位于SWT Browser缓存中。