javascript - 每次页面加载后运行 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
}
});
注意:我认为这不应该被标记为重复。
解决方案
我来自 C#,所以我不知道确切的代码,但您仍然应该能够将 WebDriver 包装在EventFiringWebDriver中并使用 beforeNavigateTo。根据该链接,它也可以在 java 中使用。
编辑:正如评论 beforeNavigateTo 中所指出的,仅在直接向驱动程序发送导航命令时才会触发。而是侦听 EventClicking 和 ElementClicked 事件,将当前 URL 缓存在 click 事件上,然后检查它是否在 clicked 事件上发生了变化。