【问题标题】:Handling OS Popups using Selenium Webdriver (Java)使用 Selenium Webdriver (Java) 处理操作系统弹出窗口
【发布时间】:2015-09-15 07:32:27
【问题描述】:

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

Internet Explorer

火狐

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

请让我知道 Selenium 或 Java 中是否有任何类似上述浏览器的操作系统弹出窗口。

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

【问题讨论】:

标签: java selenium selenium-webdriver popup popupwindow


【解决方案1】:

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

【讨论】:

  • 您能否详细说明使用 AutoIT(可能带有示例)来处理这些弹出窗口?
  • 假设您已通过上述链接了解 AutoIT 是什么。在这里考虑Example of Selenium+AutoIT
  • 很抱歉将您重定向到其他网站。我会给出我的代码,但我不擅长在 cmets 中编辑它;)。另外,该链接将提供更好的理解:) 另外,这只是一个示例。您会发现几篇博文提供了使用 AutoIT 的代码示例。
【解决方案2】:

您需要使用 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/

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

您需要使用 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);

希望对你有帮助:)

如果仍然遇到问题,请回复我:)

【讨论】:

  • 感谢您的回答。我无法尝试您的答案,因为我的 FF 浏览器有问题。一旦它被修复,我会告诉你它是否有效。同时,如果您知道任何可以帮助我在所有浏览器中处理这些弹出窗口的方法或 API,将会很有帮助
  • 使用上述配置文件初始化 firefox 后,它将在整个会话期间设置,因此您无需担心每次下载操作 :)
  • 没关系。我所说的“跨浏览器”是指适用于 IE、Chrome 和 Firefox 的解决方案。
  • Chrome 浏览器会是更好的方法,因为 Chrome 不会打开文件下载弹窗。但如果您需要多次下载,则应启用多次下载选项。
  • 我并不担心多次下载。我会直接告诉你 - 是否有任何方法来处理这些原生操作系统弹出窗口,与使用的浏览器类型无关?
【解决方案3】:

试试下面的代码。它对我有用:

        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);  

享受:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-09
    • 2013-10-24
    • 1970-01-01
    • 2015-06-29
    • 1970-01-01
    • 1970-01-01
    • 2012-07-16
    相关资源
    最近更新 更多