在Java项目中,我使用Browser
来显示页面。我使用JavaScript和映射Java方法从文档中获取元素。
我的JavaScript:
var button = document.getElementById(`actionButton`);
if(element != null)
buttonFound(element);
button
是DivHtmlElement
。
映射的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();
}
答案 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
缓存中。