将IAlert作为观察者 [英] Make IAlert as Observer

查看:116
本文介绍了将IAlert作为观察者的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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



我在想的是我需要做IAlert作为观察者捕捉警报的模式接受它,并从停止处理弹出窗口继续测试。



IAlert代码:

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

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



谢谢

解决方案

由于弹出窗口当您尝试执行其他操作时很重要,我将提出以下方法: EventFiringWebDriver 允许您定义将在特定事件之前或之后运行的自定义代码。请参阅此处的示例。



不幸的是,我没有在.Net上写任何东西很长一段时间,所以我的C#技能是生锈的。所以大致看起来像这样:

  IWebDriver驱动程序=新的FirefoxDriver(); 
EventFiringWebDriver eventDriver = new EventFiringWebDriver(driver);
//添加所有相关的事件,例如在点击某事之前:
eventDriver.ElementClicking = new EventHandler< FindElementEventArgs>(checkPopup);
driver = eventDriver; //只需要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){
//无所事事 - 只是继续
}
}
pre>

所以现在,每一次脚本即将点击某些东西,它将首先检查弹出窗口,并在需要时接受。


I'm using last selenium some websites have randomly popup messages that stops the normally test process

What i'm thinking is that i need to do IAlert as Observer pattern that catches the alert accept it and continue the test from the point that its stopped for handling the popup.

IAlert Code:

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

The main question is how can i perform it or if there is a better way to handle randomly popups?

Thank's

解决方案

Since popup would matter when you are trying to do something else, I will suggest the following approach: EventFiringWebDriver allows you to define custom code that will run right before or after a particular event. See an example here.

Unfortunately I didn't write anything on .Net for a long time, so my C# skills are rusty. So roughly it would look like this:

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

And then

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
     }
}

So now, every time script is about to click something, it would first check for popup and accept it if needed.

这篇关于将IAlert作为观察者的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆