Selenium C#如何处理警报“打开选择一个应用程序”?

Posted

技术标签:

【中文标题】Selenium C#如何处理警报“打开选择一个应用程序”?【英文标题】:Selenium C# How to handle Alert "Open Pick an app"? 【发布时间】:2019-02-12 14:50:41 【问题描述】:

我正在尝试使用 Selenium C# for Chrome 获取警报文本

但是这个警报似乎与普通的 javascript 警报不同,使用下面的代码会返回错误异常:

string text = driver.SwitchTo().Alert().Text;

OpenQA.Selenium.NoAlertPresentException:没有这样的警报

这是否被视为警报?有办法处理吗?

【问题讨论】:

【参考方案1】:

您看到的对话框显示在操作系统级别,因此您无法在 DOM 中看到它或使用 Selenium 与之交互。如果你真的需要处理它,我建议你研究一个操作系统级别的自动化工具,它可以发送键或鼠标事件以你需要的方式处理对话框。

对于 Java,您可以使用 Java AWT 包中定义的 Robot 类,因为它专门用于处理与测试自动化相关的本机输入事件,并且在处理 Selenium 和对话框时经常被提及。但是,它在 .NET 世界中不存在,因此您需要寻找其他地方。一个快速的谷歌搜索给了我一些可能有帮助的东西:

Robot Framework(使用 IronPython 支持 .NET)

此外,您还可以通过以下方式实现更简单的操作:

GlobalMouseKeyHook

所以,总结一下。不,这不是您期望的正常警报,是的,您可以处理它,但它需要在 Selenium 世界之外采取一些步骤。

【讨论】:

可惜没有 .Net,感谢您对框架的建议。 没问题,希望你能解决问题。我的建议是尽可能避免这种情况。 您可以使用 AutoIT。它是一个 nuget 包,可让您与 Windows 对象进行交互。 感谢@Dazed 的提醒。我不知道 AutoIT 有一个实际的 NuGet 包。【参考方案2】:

我们可以使用下面的 windows 窗体 sendkeys 代码来接受操作系统级别的弹出窗口

 System.Windows.Forms.SendKeys.SendWait("LEFT");
 Thread.Sleep(1000);
 System.Windows.Forms.SendKeys.SendWait("ENTER");

【讨论】:

以上是关于Selenium C#如何处理警报“打开选择一个应用程序”?的主要内容,如果未能解决你的问题,请参考以下文章

Python Selenium - 如何处理在WebDriverWait完成之后才显示的警报?

Selenium 如何处理多层嵌套 iframe

如何处理 Selenium 中的打印对话框?

python3 selenium 如何处理异常情况

robot framework + selenium 如何处理此类的下拉框 如何选中下拉框里的值

selenium 如何处理table