首页 > 解决方案 > 每次页面加载后运行 JavaScript

问题描述

我正在使用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
    }
});

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

标签: javascriptjavaseleniumwebdriverselenide

解决方案


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

编辑:正如评论 beforeNavigateTo 中所指出的,仅在直接向驱动程序发送导航命令时才会触发。而是侦听 EventClicking 和 ElementClicked 事件,将当前 URL 缓存在 click 事件上,然后检查它是否在 clicked 事件上发生了变化。


推荐阅读