将IAlert作为观察者 [英] Make IAlert as Observer
问题描述
我在想的是我需要做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){
pre>
EventFiringWebDriver driver =(sender as OpenQA.Selenium.Support.Events.EventFiringWebDriver);
try {
Alert alert = driver.SwitchTo()。Alert();
alert.accept();
}
catch(NoAlertPresentException ex){
//无所事事 - 只是继续
}
}
所以现在,每一次脚本即将点击某些东西,它将首先检查弹出窗口,并在需要时接受。
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屋!