【发布时间】:2012-05-22 09:05:03
【问题描述】:
是否支持在 c# 中使用弹出对话框(特别是文件下载)?
【问题讨论】:
标签: c# selenium dialog webdriver
是否支持在 c# 中使用弹出对话框(特别是文件下载)?
【问题讨论】:
标签: c# selenium dialog webdriver
对于弹出窗口对话框,您可以使用警报来捕捉:
IAlert alert = driver.SwitchTo().Alert();
alert.Accept();
【讨论】:
不,没有 - 至少不是原生的。
WebDriver 只与网页交互。弹出对话框一旦被实例化,就会成为操作系统的域而不是网页。
您可以通过使用您正在检索或发送到服务器的内容发出 POST 或 GET 来绕过文件下载/上传对话框。
您可以使用 AutoIt 或 Windows 自动化 API 等工具与其他对话框窗口进行交互。
【讨论】:
来自 WebDriver 常见问题解答:WebDriver 提供了处理多个窗口的能力。这是通过使用“WebDriver.switchTo().window()”方法切换到具有已知名称的窗口来完成的。如果名称未知,您可以使用“WebDriver.getWindowHandles()”获取已知窗口的列表。您可以将句柄传递给“switchTo().window()”。
完整的FAQ在这里。
Example 来自 Thoughtworks
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;
}
}
【讨论】: