【问题标题】:How to change the default download directory with IE (Internet Explorer 11)如何使用 IE (Internet Explorer 11) 更改默认下载目录
【发布时间】:2016-07-14 11:05:09
【问题描述】:

在这篇文章中,我看到了为 Chrome 和 Firefox 设置下载目录的解决方案 how to change file download location in Webdriver while using chrome driver/firefox driver

这些对我来说是完美的(接受的答案是),但是四处搜索我找不到任何关于使用 Internet Explorer 11 执行此操作的信息。有人知道我在哪里可以找到这些信息吗?

【问题讨论】:

    标签: java selenium selenium-webdriver selenium-grid


    【解决方案1】:

    据 Jim Evans 的this answer 所说,这是不可能的:

    Internet Explorer 不使用配置文件。这是一个限制 浏览器本身,而不是 IE 驱动程序。因此,没有办法 通过 Internet 自动将文件下载到指定位置 探险家。

    还有:

    据我所知,Microsoft Edge 之间没有区别 和 Internet Explorer 关于使用“配置文件”。简介是 仍与 Windows 中的登录用户帐户绑定。

    所以,从某种意义上说,目录已经被指定了。关键是你不能通过 WebDriver 覆盖它。

    【讨论】:

    • 谢谢安德鲁!不是我希望的消息,但没关系。很高兴知道。
    【解决方案2】:

    无法通过驱动程序,但您可以使用此注册表项定义位置:

    HKCU\Software\Microsoft\Internet Explorer\Main\Default Download Directory
    

    【讨论】:

    • 感谢弗洛伦特!我将探索这种方法,但是我对这种方法对我的工作没有太大的信心。
    • 请注意,还有一种方法可以设置 IE11 以自动将文件下载到特定位置,但这不是您的问题。
    • 你好,有没有通过 JavaScript 来定义这个?我试图找到一种通过 Java 更新注册表项的方法,但没有找到任何东西。谢谢!
    【解决方案3】:

    我正在通过更改 REGEDIT 来更改默认目录。

    String path = "\"C:\\Test\"";
    String cmd1 = "REG ADD \"HKEY_CURRENT_USER\\Software\\Microsoft\\Internet Explorer\\Main\" /F /V \"Default Download Directory\" /T REG_SZ /D "+ path;
    
    try {
        Runtime.getRuntime().exec(cmd1);
    } catch (Exception e) {
        System.out.println("Coulnd't change the registry for default directory for IE");
    }
    

    【讨论】:

    • 我正在寻找类似的东西,但这给了我一堆语法错误
    【解决方案4】:
    package auto.Selenium;
    
    import java.awt.AWTException;
    import java.awt.Robot;
    import java.awt.Toolkit;
    import java.awt.datatransfer.Clipboard;
    import java.awt.datatransfer.StringSelection;
    import java.awt.event.KeyEvent;
    import java.util.concurrent.TimeUnit;
    
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.ie.InternetExplorerDriver;
    import org.openqa.selenium.remote.DesiredCapabilities;
    import org.testng.annotations.Test;
    
    public class SetDownloadPath {
    
        Robot r;
    
        @Test
        public void setPath() {
    
            System.setProperty("webdriver.ie.driver",
                    "C:\\Users\\drivers\\IEDriverServer_x64_3.14.0\\IEDriverServer.exe");
            DesiredCapabilities capabilities = DesiredCapabilities.internetExplorer();
            capabilities.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, true);
            capabilities.setCapability("requireWindowFocus", true);
            capabilities.setCapability("nativeEvents", false);
            capabilities.setCapability("unexpectedAlertBehaviour", "accept");
            capabilities.setCapability("ignoreProtectedModeSetting", true);
            capabilities.setCapability("disable-popup-blocking", true);
            capabilities.setCapability("enablePersistentHover", true);
            capabilities.setCapability("ignoreZoomSetting", true);
            capabilities.setCapability("EnableNativeEvents", false);
            capabilities.setCapability(InternetExplorerDriver.IGNORE_ZOOM_SETTING, true);
            capabilities.setCapability(InternetExplorerDriver.NATIVE_EVENTS, false);
    
            WebDriver driver = new InternetExplorerDriver();
            driver.manage().window().maximize();
            driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
            driver.manage().deleteAllCookies();
            driver.get("file:///C:\\Users\\ToBeSaved.pdf");
            String defaultPath = "C:\\Users\\DefaultSavedLocation";
            StringSelection stringSelection = new StringSelection(defaultPath);
            Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
            clipboard.setContents(stringSelection, stringSelection);
    
            try {
                Thread.sleep(4000);
                r = new Robot();
    
                // Open the Pop Up
                r.keyPress(KeyEvent.VK_CONTROL);
                r.keyPress(KeyEvent.VK_SHIFT);
                r.keyPress(KeyEvent.VK_S);
                r.keyRelease(KeyEvent.VK_S);
                r.keyRelease(KeyEvent.VK_SHIFT);
                r.keyRelease(KeyEvent.VK_CONTROL);
                Thread.sleep(4000);
                // Reach to the URL bar
                for (int i = 0; i < 6; i++) {
                    r.keyPress(KeyEvent.VK_TAB);
                    r.keyRelease(KeyEvent.VK_TAB);
                }
                // Paste the copied default ULR
                r.keyPress(KeyEvent.VK_ENTER);
                Thread.sleep(4000);
                r.keyPress(KeyEvent.VK_CONTROL);
                r.keyPress(KeyEvent.VK_V);
                r.keyRelease(KeyEvent.VK_V);
                r.keyRelease(KeyEvent.VK_CONTROL);
                // Save the file
                for (int i = 0; i < 5; i++) {
                    Thread.sleep(2000);
                    r.keyPress(KeyEvent.VK_ENTER);
                }
    
            } catch (AWTException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
    

    【讨论】:

    • 虽然这段代码 sn-p 可以解决问题,但including an explanation 确实有助于提高帖子的质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。
    猜你喜欢
    • 1970-01-01
    • 2016-04-29
    • 2022-01-23
    • 2016-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-17
    • 1970-01-01
    相关资源
    最近更新 更多