Подтвердить что ты не робот

Как изменить местоположение загрузки файла в Webdriver при использовании драйвера chrome driver/firefox

Я пытаюсь сохранить изображение, используя опцию save в отдельной папке. Я нашел способ, с помощью которого я могу щелкнуть правой кнопкой мыши по изображению, которое я хочу сохранить, используя параметр "Сохранить как". Но проблема, в которой я застрял, - это получить окно os, которое спрашивает, где сохранить файл, я не могу отправить нужное место, потому что я не знаю, как это сделать. Я рассмотрел подобные вопросы, заданные на этом форуме, но не помог до сих пор.

Код -

Для Firefox -

public class practice {

 public void pic() throws AWTException{
     WebDriver driver;

     //Proxy Setting     
        FirefoxProfile profile = new FirefoxProfile();
        profile.setAssumeUntrustedCertificateIssuer(false);
        profile.setEnableNativeEvents(false);
        profile.setPreference("network.proxy.type", 1);
        profile.setPreference("network.proxy.http", "localHost");
        profile.setPreference("newtwork.proxy.http_port",3128);

        //Download setting
        profile.setPreference("browser.download.folderlist", 2);
        profile.setPreference("browser.helperapps.neverAsk.saveToDisk","jpeg");
        profile.setPreference("browser.download.dir", "C:\\Users\\Admin\\Desktop\\ScreenShot\\pic.jpeg");
        driver = new FirefoxDriver(profile);

        driver.navigate().to("http://stackoverflow.com/users/2675355/shantanu");
        driver.findElement(By.xpath("//*[@id='large-user-info']/div[1]/div[1]/a/div/img"));
        Actions action = new Actions(driver);
        action.moveToElement(driver.findElement(By.xpath("//*[@id='large-user-info']/div[1]/div[1]/a/div/img"))).perform();
        action.contextClick().perform();
        Robot robo = new Robot();
        robo.keyPress(KeyEvent.VK_V);
        robo.keyRelease(KeyEvent.VK_V);
    // Here i am getting the os window but don't know how to send the desired location
    }//method   
}//class

Для хром-

public class practice {
   public void s() throws AWTException{
        WebDriver driver;   
        System.setProperty("webdriver.chrome.driver","C:\\Users\\Admin\\Desktop\\chromedriver.exe");
        driver = new ChromeDriver();
        driver.navigate().to("http://stackoverflow.com/users/2675355/shantanu");
        driver.findElement(By.xpath("//*[@id='large-user-info']/div[1]/div[1]/a/div/img"));
        Actions action = new Actions(driver);
        action.moveToElement(driver.findElement(By.xpath("//*[@id='large-user-info']/div[1]/div[1]/a/div/img"))).perform();
        action.contextClick().perform();
        Robot robo = new Robot();
        robo.keyPress(KeyEvent.VK_V);
        robo.keyRelease(KeyEvent.VK_V);
        // Here i am getting the os window but don't know how to send the desired location
   }
 }

This is the pop up window where i am stuck

4b9b3361

Ответ 1

В коде есть две вещи.

Для Firefox: Вам нужно установить

profile.setPreference("browser.download.dir", "C:\\Users\\Admin\\Desktop\\ScreenShot\\");

не

profile.setPreference("browser.download.dir", "C:\\Users\\Admin\\Desktop\\ScreenShot\\pic.jpeg");

Во-вторых, вы устанавливаете параметр browser.download.folderlist, он browser.download.folderList (L caps в списке каталогов).

Как только вы достигнете этого, вы можете использовать свой класс Robot для выполнения желаемых операций.

Для Chromedriver выполните следующие действия:

String downloadFilepath = "/path/to/download";
HashMap<String, Object> chromePrefs = new HashMap<String, Object>();
chromePrefs.put("profile.default_content_settings.popups", 0);
chromePrefs.put("download.default_directory", downloadFilepath);
ChromeOptions options = new ChromeOptions();
options.setExperimentalOption("prefs", chromePrefs);
DesiredCapabilities cap = DesiredCapabilities.chrome();
cap.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
cap.setCapability(ChromeOptions.CAPABILITY, options);
WebDriver driver = new ChromeDriver(cap);

Надеюсь, это поможет.:)

Ответ 2

Я потратил много времени, чтобы исследовать, как загрузить pdf файл в браузере Firefox, без появления всплывающего окна Save As. Это может помочь кому-то.

После некоторого локального расследования, как загрузить файл pdf в firefox без всплывающего окна Save As, я нашел минимальное требуемое предпочтение в профиле Firefox:

profile.setPreference("pdfjs.disabled", true);
profile.setPreference("browser.helperApps.neverAsk.saveToDisk", "application/pdf");

Конечно, вы можете добавить дополнительные настройки.

Он работает в версиях Firefox 45-46.

Ответ 3

Для браузера Chrome:

Даже вы можете отключить диалог Windows (Save As Dialogue) со следующим фрагментом кода. Вам нужно сделать следующие настройки в настройках хромированных рекордов:

  • отключите приглашение загрузки, если оно отображается
  • установить каталог по умолчанию для загрузки файла
  • Если включен плагин просмотра PDF, который открывает файл PDF в браузере, вы можете отключить его, чтобы загрузка могла автоматически запускаться.
  • Принять любой сертификат в браузере

    String downloadFilepath = "/path/to/download/directory/";
    Map<String, Object> preferences = new Hashtable<String, Object>();
    preferences.put("profile.default_content_settings.popups", 0);
    preferences.put("download.prompt_for_download", "false");
    preferences.put("download.default_directory", downloadFilepath);
    
    // disable flash and the PDF viewer
    preferences.put("plugins.plugins_disabled", new String[]{
        "Adobe Flash Player", "Chrome PDF Viewer"});
    
    ChromeOptions options = new ChromeOptions();
    options.setExperimentalOption("prefs", preferences);
    
    DesiredCapabilities capabilities = DesiredCapabilities.chrome();
    capabilities.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
    capabilities.setCapability(ChromeOptions.CAPABILITY, options);
    driver = new ChromeDriver(capabilities);
    

Ответ 4

Наверное, это не лучшее решение, но вы можете попробовать использовать sikuli api для подтверждения сохранения для окна, который появляется.

В поле "Сохранить как окно" находится окно ОС.

Ответ 5

Вы частично ответили на свой вопрос:

проблема, в которой я застреваю, - это получить окно os

Selenium - это инструмент браузера - os window не является браузером! Вам нужно будет использовать что-то еще. В зависимости от ваших потребностей есть много вариантов: Sikuli, Robot, AutoIt,...

Ответ 6

Используйте тот же класс робота и нажмите "Enter", чтобы выбрать "Сохранить" в диалоговом окне Windows.

robo.keyPress(KeyEvent.VK_ENTER); robo.keyRelease(KeyEvent.VK_ENTER);

если вам нужно переименовать его, скопируйте имя файла в буфер обмена и пройдите, как показано ниже

StringSelection file = new StringSelection("D:\\image.jpg");
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(file, null);

Robot rb = new Robot();

rb.setAutoDelay(2000); // Similar to thread.sleep

rb.keyPress(KeyEvent.VK_CONTROL);
rb.keyPress(KeyEvent.VK_V);

rb.keyRelease(KeyEvent.VK_CONTROL);
rb.keyRelease(KeyEvent.VK_V);

rb.setAutoDelay(2000);

rb.keyPress(KeyEvent.VK_ENTER);
rb.keyRelease(KeyEvent.VK_ENTER);