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完成之后才显示的警报?