0

我正在尝试使用 Java FX 的类 WebEngine 单击按钮。我可以与页面交互以执行其他操作,例如使用以下内容从文本框中读取:

webEngine.executeScript("document.getElementsByName(\"myText\")[0].value = \"Test\";");

上面的代码片段工作正常,但是当我尝试执行以下三个示例来按下按钮/提交表单时,什么也没有发生。

document.myForm.submit();

document.getElementById(\"myForm\").submit();

document.getElementById("theSubmitButton").click();

以上三个都在使用 Firefox Web 控制台时工作,但当我将它们更改为 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)。

4

1 回答 1

0

我已经解决了这个问题。

事实证明,文本并没有像我预期的那样存储在 .value 中(在 textarea 中)。当调用 .value = "whatever" 时,它锁定了浏览器。这是 Firefox 优雅地处理的事情,但 webEngine 没有。

将其更改为实际存储文本的 .innerHTML(不是我的设计)解决了这个问题,并且调用 .click() 有效。

于 2013-06-27T01:45:03.357 回答