我在C#中使用selenium(默认浏览器 - FireFoX)。
有些网站会在未知时间后弹出消息(如果有的话)。
我无法使用等待或睡眠,因为我不知道弹出窗口会出现在哪个屏幕上。使用' try-Catch'在每个页面上都不是很聪明....
我想到的解决方案是使用事件监听器来收听弹出窗口,然后它会点击' X'按钮。当然,侦听器必须位于Thread中,并且每个测试可能都有一个Threads数组,用于获取事件列表和xpath / ID。
有没有人做过这样的事情?是否有任何示例/文章/教程可以帮助我?
10X,
吉尔
答案 0 :(得分:0)
考虑到一个古老的中国人proverb,当遇到这些问题时,我会去SeleniumHQ github存储库并查看tests。
您希望您的等待时间很短,这样您就不会在没有警报时浪费太多时间等待。您可以在页面打开时或在测试离开该页面之前调用弹出处理代码;取决于您的应用程序的行为。
答案 1 :(得分:0)
我只是覆盖FirefoxDriver以自动接受警报并使警报异常静音:
class FirefoxDriverEx : FirefoxDriver {
private static DesiredCapabilities Capabilities() {
var capa = DesiredCapabilities.Firefox();
capa.SetCapability(CapabilityType.UnexpectedAlertBehavior, "accept");
return capa;
}
public FirefoxDriverEx()
: base(Capabilities()) { }
protected override Response Execute(string driverCommandToExecute, Dictionary<string, object> parameters) {
try{
return base.Execute(driverCommandToExecute, parameters);
} catch (UnhandledAlertException) {
return base.Execute(driverCommandToExecute, parameters);
}
}
}
以下是一个用法示例:
var driver = new FirefoxDriverEx();
driver.Navigate().GoToUrl("http://the-internet.herokuapp.com/javascript_alerts");
driver.FindElementByXPath("//button[.='Click for JS Alert']").Click();
string text = driver.FindElementById("result").Text;