如何用Protractor关闭遮挡父元素FlyoutAnchor的弹出菜单?
我之前在处理Protractor自动化测试时,刚好碰到过Firefox下ESC键无法关闭FlyoutAnchor菜单的问题,给你几个亲测有效的解决方案:
直接通过JavaScript触发FlyoutAnchor的点击事件
既然手动点击FlyoutAnchor能关闭菜单,但因为焦点被菜单遮挡无法用常规的Protractor click方法,我们可以跳过焦点检查,直接通过JS执行点击操作。这种方法不依赖浏览器的焦点状态,Firefox下稳定有效:const flyoutAnchor = element(by.css('your-flyout-anchor-selector')); // 替换成你的控件选择器 browser.executeScript("arguments[0].click();", flyoutAnchor);原理是直接调用DOM元素的原生click方法,完全模拟手动点击的行为,绕过Protractor自带点击逻辑里的焦点校验。
点击页面空白区域触发菜单关闭
大多数Flyout菜单组件都会监听页面的点击事件,当点击菜单外部区域时自动关闭。你可以尝试点击body标签或者页面上的空白容器:element(by.tagName('body')).click();这个方法的前提是你的菜单组件支持点击外部关闭,大部分主流UI框架(比如Angular Material、React Bootstrap)都默认支持这个特性。
直接操作菜单DOM隐藏它
如果上面两种方法都不行,你可以直接通过JS修改菜单的样式或者调用组件的关闭方法。比如强制设置菜单为隐藏状态:const flyoutMenu = element(by.css('your-flyout-menu-selector')); // 替换成你的菜单选择器 browser.executeScript("arguments[0].style.display = 'none';", flyoutMenu);如果你知道组件的内部关闭方法(比如某些框架组件会暴露
close()或hide()方法),也可以直接调用:browser.executeScript("arguments[0].close();", flyoutMenu);
内容的提问来源于stack exchange,提问作者Surendra
相关产品推荐
相关产品推荐

