【问题标题】:Handle a popup in selenium webdriver using c#使用 c# 在 selenium webdriver 中处理弹出窗口
【发布时间】:2013-12-25 11:43:24
【问题描述】:

当我单击页面上的按钮时,会显示一个弹出窗口。这不是窗口弹出窗口。它是应用程序弹出窗口。我在应用程序中得到的弹出窗口类似于我在图像中显示的带有 X 按钮的弹出窗口。现在如何将驱动程序控件移至弹出窗口,然后单击弹出窗口上可用的关闭按钮,然后将控件移回原始页面..

我必须使用 Selenium WebDriver 和 C# 来做到这一点。

【问题讨论】:

  • 它是一个简单的 HTML,你需要找到那个元素并按下 close span 或者是什么。
  • 哦..我认为它应该像一个新窗口一样处理..无论如何..会检查并让你知道这是否可行

标签: c# selenium selenium-webdriver


【解决方案1】:

您需要执行以下操作...

  • 遍历窗口并找到所需的窗口
  • 切换到窗口
  • 在当前窗口中找到按钮并点击

这里是 C# 中的示例代码

foreach (string handle in browser.WindowHandles) 
        {
            IWebDriver popup = driver.SwitchTo().Window(handle);

            if (popup.Title.Contains("popup title")) 
            {
              break;
            }
        }

IWebElement closeButton = driver.FindElement(By.Id("closeButton"));
closeButton.Click();

【讨论】:

  • 该方法适用于像 Chrome 这样的普通 WebDriver,但它不适用于 PhantomJS,因为 WindowHandles 会引发异常。我使用 PhantomJS 是因为我想从一个无法访问桌面的进程中运行我的代码。
【解决方案2】:

新的弹出消息也有一个 id 或类名..
首先获取该弹出窗口的类名或 id,然后选择关闭按钮的 xpath(可能我们会找到类名)并单击它。

【讨论】:

    【解决方案3】:

    您展示的示例不是弹出窗口,而是一个简单的 DHTML 窗口。 要访问您提供的示例的 X,您可以使用:driver.findElementBy(By.id("profile-tooltip-closebtn")).click()

    【讨论】:

      【解决方案4】:

      你可以试试

      driver.switchTo().frame(0);
      

      【讨论】: