如何使用selenium Web驱动程序处理Windows下载对话框

时间:2013-03-08 06:54:28

标签: selenium-webdriver

我正在使用硒网络驱动程序(非硒RC)。我需要通过单击链接下载xml文件。我做了一些谷歌搜索,我在一些答案中找到了使用AutoIT来处理与操作系统相关的对话框。

但是有没有其他选择使用selenium来处理这个而不使用AutoIT工具。

请提出一些想法。

3 个答案:

答案 0 :(得分:0)

您可以更具体地了解您使用的是哪种浏览器。如果它是firefox,你可以更好地控制文件下载。包括firefox在内的任何其他浏览器都可以使用机器人类。这可用于执行单击“确定”按钮进行下载。如果它的chorme然后文件下载自动发生没有任何干预。

答案 1 :(得分:0)

对于最新版本的Firefox(编写时),这些是我需要避免下载框的参数。请注意,您需要指定一个可以写入的目录,如第三个语句中所示:

FirefoxProfile profile = new FirefoxProfile();
profile.setPreference( "browser.download.folderList", 2 );
profile.setPreference( "browser.download.dir", <YOUR DOWNLOAD PATH> );
profile.setPreference( "plugin.disable_full_page_plugin_for_types", "application/pdf" );
profile.setPreference(
                    "browser.helperApps.neverAsk.saveToDisk",   
    "application/csv,text/csv,application/pdfss, application/excel" );
profile.setPreference( "browser.download.manager.showWhenStarting", false );
profile.setPreference( "pdfjs.disabled", true );

请注意,较新版本的Firefox需要使用pdfjs的最后一行,而不是之前的版本。更多信息Here

答案 2 :(得分:0)

我在项目中面临Authentication Proxy弹出问题。所以我尝试了以下解决方案,它工作正常。 当我们在安装环境中运行来自Selenium Web驱动程序的脚本后,需要进行安装以处理身份验证代理。

首先,你需要知道以下细节,

  • network.proxy.autoconfig_url(例如:“http://example.com/abc.pac”)
  • network.proxy.http(例如:abc-proxy.com)
  • network.proxy.http_port(例如:8080)

    private static WebDriver initFirefoxDriver(String appURL)  
    {
    
        System.out.println("Launching Firefox browser..");
    
        FirefoxProfile firefoxProfile = new FirefoxProfile();
        firefoxProfile.setPreference("network.proxy.type", 1);
        firefoxProfile.setPreference("network.proxy.autoconfig_url", "http://example.com/abc.pac");
        firefoxProfile.setPreference("network.proxy.http", " abc-proxy.com");
        firefoxProfile.setPreference("network.proxy.http_port", 8080);
    
    
        WebDriver driver = new FirefoxDriver(firefoxProfile);
        driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
        driver.manage().window().maximize();
        driver.navigate().to(appURL);
        //driver.get(appURL); 
        return driver;
    }