[英]Selenium: How to track DOM manipulation to find visibility of an element?
是否有可能观看网页上的事件,例如:某个元素已可见?
使用硒有可能吗?
例如,如果我定义了一个时间表,以观看从startTime到endTime的网页。 从startTime到endTime,可以捕获不同的网页事件,其中包括dom操作(例如:html元素已添加并变得可见)。 到达endTime后,我将遍历事件列表,并可以验证是否发生了特定事件。
就我而言,我想了解一个html元素是否可见。
找出问题的常用方法是使用webdriver的API来检查元素的可见性,但会超时。
但是,我想捕获不同的事件并进行一些回调,从而验证是否发生了某些预期事件。
[更新]:Selenium中是否支持MutationObserver ?
是的,您可以使用WebDriver文档中所示的显式等待。
ExpectedConditions
类提供了许多有用的元素状态,例如ElementToBeVisible
, ElementToBeClickable
等。
这应该够了吧。
以下是您可以做什么的示例:
WebDriverWait wait = new WebDriverWait(driver, 10); // how many seconds
wait.until(ExpectedConditions.elementToBeClickable(myPage.getButton()));
对于更复杂的事情,您可以为WebDriverWait
提供自己的Function
,即:
wait.until(o -> {
return driver.getWindowHandles().stream().collect(Collectors.toList()).get(tabNo);
});
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;");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.