运行 JavaScript 每次页面加载后

Run JavaScript after every page load

我正在使用 Selenide 来测试网站。 我需要在每个页面上设置一些事件监听器。 为此,我需要某种页面加载事件,它会在 Selenium 加载新页面时告诉我。

一个可能(但丑陋)的解决方案是每隔 x 秒检查一次循环中的当前 url。


解决方案:

WebDriverRunner.addListener(new WebDriverEventListener() {
    private String urlBeforeClick;

    @Override
    public void afterNavigateTo(String s, WebDriver webDriver) {
        // code here
    }

    @Override
    public void beforeClickOn(WebElement webElement, WebDriver webDriver) {
        this.urlBeforeClick = webDriver.getCurrentUrl();
    }

    @Override
    public void afterClickOn(WebElement webElement, WebDriver webDriver) {
        // if the url is different after a click a new page was loaded.
        if (!Objects.equals(this.urlBeforeClick, webDriver.getCurrentUrl()))
            // code here
    }
});

注意:我认为这不应该被标记为重复。

此页面讨论了一个 "unload" 事件。这对你有用吗?

Javascript event that runs before page changes

我还发现页面中的一个匿名函数会在onLoad事件之前运行。 https://jsfiddle.net/pawqhdjy/

function codeAddress() {
    alert('second');
}

window.onload = codeAddress;

(function () {
    alert("first");
})();

我来自 C#,所以我不知道确切的代码,但您仍然应该能够将 WebDriver 包装在 EventFiringWebDriver 中并使用 beforeNavigateTo。根据那个 link 也可以在 java 中使用。

编辑: 正如之前的评论中所指出的,NavigateTo 仅在直接向驱动程序发送导航命令时触发。取而代之的是监听 EventClicking 和 ElementClicked 事件,将当前 URL 缓存在点击事件上,然后检查它是否已在点击事件上发生变化。