一尘不染

将IAlert设为观察者

selenium

我正在使用最后一个selenium,一些网站随机弹出消息,停止正常的测试过程

我在想的是,我需要做IAlert as Observer模式,以捕获警报并接受它,并从其停止处理弹出窗口的点继续进行测试。

IAlert代码:

try
{
    IAlert alert = driver.SwitchTo().Alert();
    if (alert != null)
    {
        alert.Accept();
    }
}
catch (Exception ex)
{}

主要问题是如何执行它,或者是否有更好的方法来处理随机弹出窗口?

谢谢


阅读 273

收藏
2020-06-26

共1个答案

一尘不染

由于在尝试执行其他操作时弹出窗口很重要,因此我建议采用以下方法: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
     }
}

因此,现在,每次脚本要单击某项时,它都会首先检查弹出窗口,并在需要时接受它。

2020-06-26