Selenium WebDriver for C# - 弹出对话框

本文关键字:对话框 WebDriver for Selenium | 更新日期: 2023-09-27 18:34:12

是否支持在 c# 中使用弹出对话框(特别是文件下载)?

Selenium WebDriver for C# - 弹出对话框

对于弹出窗口对话框,您可以使用警报来捕获:

IAlert alert = driver.SwitchTo().Alert();
alert.Accept();

不,没有 - 至少不是原生的。

网页

驱动程序仅与网页交互。弹出对话框一旦实例化,就会成为操作系统的域,而不是网页。

您可以通过发出 POST 或 GET 来绕过文件下载/上传对话框,其中包含您正在检索或发送到服务器的内容。

可以使用 AutoIt 或 Windows 自动化 API 等工具与其他对话框窗口进行交互。

来自 WebDriver FAQ:WebDriver 提供了处理多个窗口的能力。这是通过使用"WebDriver.switchTo().window()"方法切换到具有已知名称的窗口来完成的。如果名称未知,则可以使用"WebDriver.getWindowHandles()"获取已知窗口的列表。您可以将句柄传递给"switchTo().window()"。

完整的常见问题解答在这里。

来自思想工厂的示例

 String parentWindowHandle = browser.getWindowHandle(); // save the current window handle.
      WebDriver popup = null;
      Iterator<String> windowIterator = browser.getWindowHandles();
      while(windowIterator.hasNext()) { 
        String windowHandle = windowIterator.next(); 
        popup = browser.switchTo().window(windowHandle);
        if (popup.getTitle().equals("Google") {
          break;
        }
      }

下面是从 Java 转换为 C# 的示例(替换了已弃用的方法)

        String parentWindowHandle = _browser.CurrentWindowHandle; // save the current window handle.
        IWebDriver popup = null;
        var  windowIterator = _browser.WindowHandles;
        foreach (var windowHandle in windowIterator)
        {
            popup = _browser.SwitchTo().Window(windowHandle);
            if (popup.Title == "Google")
            {
                break;
            }
        }