我正在使用最后一个selenium,一些网站随机弹出消息,停止正常的测试过程
我在想的是,我需要做IAlert as Observer模式,以捕获警报并接受它,并从其停止处理弹出窗口的点继续进行测试。
IAlert代码:
try { IAlert alert = driver.SwitchTo().Alert(); if (alert != null) { alert.Accept(); } } catch (Exception ex) {}
主要问题是如何执行它,或者是否有更好的方法来处理随机弹出窗口?
谢谢
由于在尝试执行其他操作时弹出窗口很重要,因此我建议采用以下方法:EventFiringWebDriver允许您定义将在特定事件之前或之后立即运行的自定义代码。在这里查看示例。
不幸的是,我很久没有在.Net上写任何东西了,所以我的C#技能生锈了。因此,大致如下所示:
IWebDriver driver = new FirefoxDriver(); EventFiringWebDriver eventDriver = new EventFiringWebDriver(driver); // add all relevant events, for example before clicking on something: eventDriver.ElementClicking = new EventHandler<FindElementEventArgs>(checkPopup); driver = eventDriver; // only need EventFiringWebDriver
然后
static void checkPopup(object sender, OpenQA.Selenium.Support.Events. WebElementEventArgs e) { EventFiringWebDriver driver = (sender as OpenQA.Selenium.Support.Events.EventFiringWebDriver); try { Alert alert = driver.SwitchTo().Alert(); alert.accept(); } catch (NoAlertPresentException ex) { // nothing to do - just continue } }
因此,现在,每次脚本要单击某项时,它都会首先检查弹出窗口,并在需要时接受它。