Selenium Web驱动程序中使用C#的弹出窗口句柄

时间:2015-03-13 01:01:07

标签: c# selenium selenium-webdriver

我有一个"文件导出"链接,当我点击它时,它正在打开一个新的子窗口,其中包含"打开文件","保存文件"等选项。和确定或取消按钮。当我手动完成步骤并点击回车键时,它可以正常工作并保存文件,但是当我自动化时,没有任何反应。

这是我的代码:

 //Click Export link
 driver.FindElement(By.Id("ReportViewer1_ctl01_ctl05_ctl01")).Click();
 //Switch to popup window
 driver.SwitchTo().Window(Driver.Instance.WindowHandles.Last());
 //Click Enter to accept save option
 driver.SwitchTo().ActiveElement().SendKeys(Keys.Enter);
 //Close child window
 driver.Close();
 //Switch back to Parent window
 driver.SwitchTo().Window(Driver.Instance.WindowHandles.First());

问题是窗口卡在父窗口中,我无法发送"输入"到弹出窗口

3 个答案:

答案 0 :(得分:2)

由于文件下载不是浏览器的原生文件,因此无法使用Selenium进行处理。请记住,Selenium只是一种自动化浏览器的工具。但是,您可以通过设置个人资料来处理此问题。

FirefoxProfile profile = new FirefoxProfile();
WebDriver driver = new FirefoxDriver(profile); 

profile.setPreference("browser.helperApps.neverAsk.saveToDisk" , "application/octet-stream;application/csv;text/csv;application/vnd.ms-excel;"); 
profile.setPreference("browser.helperApps.alwaysAsk.force", false);
profile.setPreference("browser.download.manager.showWhenStarting",false);
profile.setPreference("browser.download.folderList", 2); 
profile.setPreference("browser.download.dir","e:\\SampleExcel"); 

请参阅this

答案 1 :(得分:0)

问题解决了! 如果任何人有使用selenium Webdriver下载文件的问题,这就是解决方案。

    [TestClass]
public class UnitTest1
{
    [TestMethod]
    public void FileDownload()
    {
        FirefoxProfile profile = new FirefoxProfile();
        profile.SetPreference("browser.helperApps.neverAsk.saveToDisk", "application/octet-stream");
        IWebDriver driver = new FirefoxDriver(profile);
        driver.Navigate().GoToUrl("http://www.joomla.org/download.html");
        Thread.Sleep(3000);
        driver.FindElement(By.Id("latest")).Click();
        driver.Close();
    }
}

答案 2 :(得分:-2)

这可以通过使用AutoIT脚本

来完成