运行 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 缓存在点击事件上,然后检查它是否已在点击事件上发生变化。
我正在使用 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 缓存在点击事件上,然后检查它是否已在点击事件上发生变化。