Selenium:有没有像"New element inserted in DOM"这样的事件



我正在测试的网站具有通知逻辑,该通知逻辑在屏幕底部凸出一条消息,将其保留一秒钟,然后将其发送给。显示通知时,它隐藏了其他元素,这使我的测试不稳定。我竭尽所能弄清楚何时显示通知(何时显示业务逻辑)并将其删除,但是时不时地检测到新案例,我的代码不知道显示该通知何时显示。

是否有办法(使用硒)订阅"插入DOM中的新元素"之类的事件。驳回其回调通知将一劳永逸地解决我的问题。

硒不支持此用例,但是您可以在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方法,并为内容更改做出反应。请阅读更多详细信息https://developer.mozilla.org/pl/pl/docs/web/api/muntiobserver

最新更新