我正在尝试使用Java FX的WebEngine类单击一个按钮。我能够与页面进行交互以执行其他操作,例如使用以下内容从文本框中读取:
webEngine.executeScript("document.getElementsByName(\"myText\")[0].value = \"Test\";");
上面的代码片段工作正常,但是当我尝试执行以下三个示例来按下按钮/提交表单时,根本没有任何事情发生。
document.myForm.submit();
document.getElementById(\"myForm\").submit();
document.getElementById("theSubmitButton").click();
上述三个中的所有三个在使用Firefox Web Console时都有效,但在我将它们更改为webEngine.executeScript()时则无效;
有关导致此问题无法在Java webEngine.executeScript()调用中起作用的任何想法吗?
编辑:另外,我知道页面已加载,我已经设置了一些内容,等待页面加载后再调用。EDIT2:以下是有关Java调用和结果的更多信息。当我拨打以下电话时:
System.out.println(webEngine.executeScript("document.getElementById('theSubmitButton').click();"));
我得到以下结果:
undefined
然而,当我运行时:
System.out.println(webEngine.executeScript("document.getElementById('theSubmitButton');"));
我得到了这个结果:
[object HTMLInputElement]
所以我知道对象存在于我认为的位置,问题是.click()调用。同样,下面的代码仍然可以在Firefox的Web控制台中运行,如下所示,并完成我需要它做的所有事情。
document.getElementById('theSubmitButton').click();
当我在我的java程序中使用.click()函数时(使用.executeScript()),按钮的文本会随着我在任何Web浏览器中看到的而改变,但我需要的实际重定向和表单提交不会发生。当我使用图形webEngine浏览器时,它也不起作用。
表单提交确实可以在其他任何地方使用(Firefox,Chrome,IE)。
答案 0 :(得分:0)
我已经解决了这个问题。
事实证明,文本没有像我期望的那样存储在.value(在textarea中)。当调用.value =“whatever”时,它会锁定浏览器。这是Firefox优雅处理的内容,但webEngine却没有。
将此更改为文本实际存储的.innerHTML(不是我的设计)修复了问题,并调用.click()工作。