是否有可能为以下事件观看网页:元素已被显示?
这可能是使用硒吗?
例如,如果我定义了从startTime到endTime观看网页的时间线。从startTime到endTime,可以捕获不同的网页事件,其中包括dom操作(例如:已添加html元素并使其可见)。一旦达到endTime,我将迭代事件列表,我可以验证特定事件是否已经发生。
就我而言,我想知道一个html元素是否可见。
通常的方法是使用webdriver的API检查元素的可见性,但有一些超时。
但是,我想捕获不同的事件并进行一些回调,从而验证发生了一些预期的事件。
[更新]:我们是否支持Selenium中的MutationObserver?
答案 0 :(得分:2)
是的,您使用显式等待,如WebDriver Documentation。
所示 ExpectedConditions
类提供了许多有用的元素状态,例如ElementToBeVisible
,ElementToBeClickable
等。
这应该可以解决问题。
答案 1 :(得分:2)
以下是您可以做的样本:
WebDriverWait wait = new WebDriverWait(driver, 10); // how many seconds
wait.until(ExpectedConditions.elementToBeClickable(myPage.getButton()));
对于更复杂的事情,您可以为Function
提供自己的WebDriverWait
,即:
wait.until(o -> {
return driver.getWindowHandles().stream().collect(Collectors.toList()).get(tabNo);
});
答案 2 :(得分:0)
Selenium不支持事件,因此您可能应该转移到puppetter之类的其他工具,它似乎支持事件。也就是说,通过将所有事件存储在页面中的变量中,仍然可以通过脚本注入来记录事件:
jse.executeScript(
"var window.__events = [];" +
"new MutationObserver(function(mutations) {" +
" mutations.forEach(function(mutation) {" +
" window.__events.push(mutation);" +
" });" +
"})).takeRecords();");
然后只需返回列表:
Object events = jse.executeScript("return window.__events;");