JavaFX WebEngine按顺序执行Javascript在网站上执行操作

时间:2018-02-10 14:34:20

标签: java javafx-8

我希望以这样一种方式使用JavaFX WebEngine,以便我可以执行Javascript代码以填充一个表单并单击我打开的网站上的提交按钮。我使用的是ChromeDriver,但我不喜欢它的某些方面,WebView更适合我的需求,但据我研究,确保页面加载的唯一方法是向WebEngine添加状态监听器和当它成功时,在网页上进行操作。但是,当我执行Javascript并提交表单时,会打开一个新网页,以便第二次成功(第一次打开包含表单的网页),并在侦听器中执行相同的表单填写代码。我想在提交表单后执行其他Javascript代码,但我找不到一个好方法。在ChromeDriver中,我可以等待一段时间,但是对于WebView案例,因为它在UI线程中执行,我无法做到这一点。感谢。

1 个答案:

答案 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);
});