当前位置: 首页 > 面试题库 >

selenium:是否有类似“在DOM中插入新元素”之类的事件

申屠喜
2023-03-14
问题内容

我正在测试的站点具有通知逻辑,该通知逻辑会在屏幕底部显示一条消息,将其保留一秒钟,然后将其发送出去。显示通知时,它会隐藏其他元素,这会使我的测试不稳定。我尽力弄清何时显示通知(当业务逻辑显示通知时)并将其关闭,但是我时不时地发现新情况,我的代码不知道通知何时显示。

有没有一种方法(使用Selenium)来订阅诸如“在DOM中插入新元素”之类的事件。取消通知的回调将彻底解决我的问题。


问题答案:

Selenium不支持开箱即用,但您可以使用javascript中的MutationObserver来实现。我不知道您使用什么语言编写硒测试,但是在C#中,您可以按以下方式创建扩展方法

public static void StartWatchingForContentChange(this RemoteWebDriver driver, string containerId, int  timeout = SearchElementDefaultTimeout)
{
    driver.ExecuteScript(@"var $$expectedId = arguments[0];
__selenium_observers__ =  window.__selenium_observers__ || {};
(function(){        
var target = document.getElementById($$expectedId);
__selenium_observers__[$$expectedId] = {
        observer: new MutationObserver(function(mutations) {
            __selenium_observers__[$$expectedId].occured = true;
            __selenium_observers__[$$expectedId].observer.disconnect();
        }),
        occured:false
};
var config = { attributes: true, childList: true, characterData: true, subtree: true };
__selenium_observers__[$$expectedId].observer.observe(target, config);
})();", containerId);       
}

public static bool WasContentChanged(this RemoteWebDriver driver, string containerId)
{
    return (bool) driver.ExecuteScript( "return window.__selenium_observers__ && window.__selenium_observers__[arguments[0]].occured;", containerId)
}

您可以使用某种计时器来异步调用WasContentChanged方法并对内容更改作出反应。请阅读MutationObserver文档以获取更多详细信息https://developer.mozilla.org/pl/docs/Web/API/MutationObserver



 类似资料:
  • 问题内容: 我正在尝试像这样计算折线的面积 后来我注意到dbgeometry无效的错误的原因我尝试了ms sql 2012中的代码也给了我错误,但是当我尝试那样的时候 多数民众赞成在SQL工作我的问题是有没有使几何在.net有效的谢谢 问题答案: 我同意Bojan,除非您使用的是实体框架? SqlGeometry对象具有MakeValid()函数,因此,使用您的示例,可以在DbGeography和

  • 问题内容: 我喜欢整个WMI概念,并且可以在Linux(在某些脚本中)中真正使用它。Linux系统有类似的东西吗? 问题答案: 并不是的。您是否正在使用WMI获取系统参数,查询过程,更改配置或监视系统事件,等等? 内核通过和文件系统公开了许多信息和可调旋钮。没有查询语言,只有目录和文件的组织层次结构。其中一些文件是只读,读写或只写的。其中一些人有能力。 有些服务可能具有动态自定义客户查询和更新配置

  • 问题内容: 有什么方法可以检查元素在纯JS(无jQuery)中是否可见? 因此,例如,在此页面中:PerformanceBikes,如果将鼠标悬停在Deals上(在顶部菜单上),则会显示一个交易窗口,但开始时未显示。它在HTML中,但不可见。 那么,给定一个DOM元素,我如何检查它是否可见?我试过了: 但它似乎不起作用。我想知道应该检查哪些属性。我想到: 还有其他我可能会想念的东西吗? 问题答案:

  • 有没有什么方法可以让我检查一个元素在纯JS(没有jQuery)中是否可见? 例如,在这个页面:Performance Bikes中,如果你将鼠标悬停在Deals(在顶部菜单上)上,就会出现一个Deals窗口,但一开始并没有显示出来。它在HTML中,但不可见。 那么,给定一个DOM元素,我如何检查它是否可见呢?我试过: 还有其他我可能失踪的吗?

  • 问题内容: Java中是否有内置方法来查找任何数据类型的大小?有什么方法可以找到尺寸? 问题答案: 否。标准Java SE类库中没有这种方法。 设计者的观点是Java不需要它,因为该语言使应用程序1无需知道需要为原始值,对象或具有给定数量的元素的数组保留多少空间。 您可能会认为sizeof运算符对需要了解其数据结构占用多少空间的人很有用。但是,您还可以使用Java内存分析器简单,可靠地获得此信息以

  • 我正在开发一个ASP。NET网络应用程序。有一些功能我需要每10分钟触发一次。因此,目前我正在考虑一个“计划任务”或创建一个Windows服务来调用URL。 但我记得有一次,我在PHP网络托管空间中使用cron作业做了同样的事情。 那么IIS中有没有类似cron的工作? 注意:我不希望使用第三方在线计划服务。