我希望以这样一种方式使用JavaFX WebEngine,以便我可以执行Javascript代码以填充一个表单并单击我打开的网站上的提交按钮。我使用的是ChromeDriver,但我不喜欢它的某些方面,WebView更适合我的需求,但据我研究,确保页面加载的唯一方法是向WebEngine添加状态监听器和当它成功时,在网页上进行操作。但是,当我执行Javascript并提交表单时,会打开一个新网页,以便第二次成功(第一次打开包含表单的网页),并在侦听器中执行相同的表单填写代码。我想在提交表单后执行其他Javascript代码,但我找不到一个好方法。在ChromeDriver中,我可以等待一段时间,但是对于WebView案例,因为它在UI线程中执行,我无法做到这一点。感谢。
答案 0 :(得分:3)
我不确定这是不是你的意思。 SUCCEEDED
只是关于引擎状态的信息,为了更准确你应该检查其他参数,例如:如果你想在一个监听器中处理不同的页面,你可以使用基于位置的(当前加载的url)验证。
WebEngine engine = webView.getEngine();
engine.getLoadWorker().stateProperty().addListener((observable, oldValue, newValue) -> {
if (newValue != State.SUCCEEDED) {
return;
}
String location = engine.getLocation();
if (location.contains("page1")) {
// Do something
return;
}
if (location.contains("page2")) {
// Do something
return;
}
System.out.println("Unhandled location: " + location);
});