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

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

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

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

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

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

【问题讨论】:

    标签: c# selenium selenium-chromedriver alert ui-testing


    【解决方案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}");
    

    【讨论】:

      猜你喜欢
      • 2016-11-10
      • 1970-01-01
      • 2013-10-10
      • 1970-01-01
      • 2023-01-02
      • 1970-01-01
      • 1970-01-01
      • 2011-09-02
      • 2011-04-27
      相关资源
      最近更新 更多