使用Selenium Webdriver(Java)处理OS弹出窗口

时间:2015-09-15 07:32:27

标签: java selenium selenium-webdriver popup popupwindow

报告应用程序有一个Export to Excel链接,点击后会打开一个类似于下图所示的操作系统弹出窗口。

Internet Explorer

Export OS Popup

火狐

enter image description here

我需要点击Save As(IE)或Save File(FF)按钮,然后在'另存为'中提供我需要的路径。弹出窗口并保存文件。我了解driver.getWindowHandle()功能,但我无法使用此方法处理操作系统弹出窗口。

如果Selenium或Java中有任何浏览器在上述任何浏览器中处理操作系统弹出窗口,请告诉我。

编辑:我认为this question的答案仅限于Firefox。我正在寻找的是处理这种本地操作系统弹出窗口的解决方案,适用于所有浏览器(至少在IE,Chrome和Firefox中)

3 个答案:

答案 0 :(得分:0)

您需要使用Firefox分析来克服此问题: -

        FirefoxProfile pro=new FirefoxProfile();

        pro.setPreference("browser.downLoad.folderList", 0);

        pro.setPreference("browser.helperApps.neverAsk.saveToDisk", "Applications/zip");

        WebDriver driver=new FirefoxDriver(pro);
  • browser.download.folderList控制下载的默认文件夹 档案到。 0表示桌面; 1表示系统默认 下载位置; 2表示自定义文件夹。

  • browser.download.dir包含
    的自定义目标文件夹 下载。如果是browser.download.folderList,则激活它 设为2。

  • browser.helperApps.neverAsk.saveToDisk存储以逗号分隔的列表 MIME类型保存到磁盘而不询问使用什么来打开 文件

下面是chrome多重下载选项的代码: -

    ChromeOptions options = new ChromeOptions();
    Map<String, Object> prefs = new HashMap<String, Object>();
    prefs.put("profile.default_content_settings.popups", 0);
    prefs.put("download.default_directory", getClass().getResource("/data/input").toString().replace("%20", " ").replace("file:","").replaceFirst("/", ""));
    options.setExperimentalOption("prefs", prefs);

    options.addArguments("--test-type");
    capabilities.setCapability(ChromeOptions.CAPABILITY, options);

对于IE,请参阅: -

http://9to5it.com/internet-explorer-disable-do-you-want-to-open-or-save-this-file-prompt/

您也可以使用Robot类的java,但它可以锁定您的屏幕

您需要使用ROBOT类来触发ENTER Action事件。在java中,如果要激活任何事件,则必须使用Robot类以编程方式键入或触发ENTER和ESCAPE等事件。

// Create object of Robot class
Robot object=new Robot();

// Press Enter
object.keyPress(KeyEvent.VK_ENTER);

// Release Enter
object.keyRelease(KeyEvent.VK_ENTER);

希望它会对你有所帮助:)。

如果仍然面临问题,请回复我:)

答案 1 :(得分:0)

我认为上述答案仅在我们必须在本地计算机上保存文件/下载文件时才有用。操作系统的本机对话框(如“另存为”,“打开”)不受selenium Web驱动程序的控制。 我使用 AutoIT (仅适用于Windows操作系统)来处理特定于Windows的弹出窗口。 您可以参考AutoIT进行初步了解。 因此,在此处,当您单击任何将处理进一步操作系统特定操作的Web元素时调用autoIT脚本,例如保存文件,浏览要上载的文件等。

答案 2 :(得分:0)

尝试以下代码。它对我有用:

        FirefoxProfile profile = new FirefoxProfile();

        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", "C:\\SampleExcel");
        driver = new FirefoxDriver(profile);  

享受:)