2012-05-14 38 views

回答

2

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

Full FAQ here。

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; 
      } 
     } 
2

否,不存在 - 至少不本身。

WebDriver只与网页交互。弹出对话框一旦实例化,就成为操作系统的域而不是网页。

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

您可以使用诸如AutoIt或Windows自动化API之类的工具与其他对话窗口进行交互。

3

对于一个弹出窗口的对话框,您可以使用警报追赶:

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