Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Не срабатывает Java Robot на FireFox (Webdriver + Java)


(Funker) #1

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

Не срабатывает Robot если использовать FF для прогонки теста. Если я беру IE или Chome то Robot срабатывает.

  Для примера взял hotfile.com для наглядности.  Я пробовал на разных сайтах где нужно загрузить было файл FF всегда у меня не срабатывал. Срабатывал IE или  Chrome.

На данном примере IE не работает (проблемы с локатором).

И так возвращаюсь к вопросу почему не работает Java Robot в FF? Может, есть у кого какие мысли. Может можно как-то фокус передать, тогда почему работает на других браузерах если IE и можно было бы понять, натывное приложение но Chrome ведь нет?

import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.KeyEvent;
import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class UploadFile {

    /**
     * @param args
     * @throws InterruptedException
     */
    public static void main(String[] args) throws InterruptedException {

            System.setProperty("webdriver.chrome.driver", ".\\lib\\chromedriver.exe");
            WebDriver driver = new ChromeDriver();
      
         //WebDriver driver = new FirefoxDriver();
           driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
        
        driver.get("http://hotfile.com/");
        driver.findElement(By.name("uploads[]")).click();
        
        //Alternative, but if this path is absent? We have only button
        //driver.findElement(By.name("uploads[]")).sendKeys("C:\\1.jpg");

            Thread.sleep(3000);
        // Print File path C:\1.jpg
            
        try {
             Robot robot = new Robot();
                  //robot.delay(3000);
                 robot.keyPress(KeyEvent.VK_C);
                 robot.keyPress(KeyEvent.VK_SHIFT);
                robot.keyPress(KeyEvent.VK_SEMICOLON);
                robot.keyRelease(KeyEvent.VK_SEMICOLON);
                robot.keyRelease(KeyEvent.VK_SHIFT);
                robot.keyPress(KeyEvent.VK_BACK_SLASH);
                robot.keyPress(KeyEvent.VK_1);
                robot.keyPress(KeyEvent.VK_PERIOD);
                robot.keyPress(KeyEvent.VK_J);
                robot.keyPress(KeyEvent.VK_P);
                robot.keyPress(KeyEvent.VK_G);
                robot.delay(2000);
                robot.keyPress(KeyEvent.VK_ENTER);
             }
                  catch (AWTException e) {
                          e.printStackTrace();
                          System.out.println(e.toString());
                      }
    }
}


WebDriver features: Работа с Upload popup (Windows native окно) при помощи Selenium Web Driver
(Mykhailo Poliarush) #2

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

поэтому код у вас работает, просто FirefoxDriver работает не так

я вам рекомендую настроить автоматическое сохранения файла и не париться с этим вопросом.


(Funker) #3

я вам рекомендую настроить автоматическое сохранения файла и не париться с этим вопросом.

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

Спасибо


(Mykhailo Poliarush) #4

для начала надо создать профиль http://support.mozilla.org/en-US/kb/profile-manager-create-and-remove-firefox-profiles

потом надо его настроить и сохранить 

а потом надо его подключить при запуске ФФ 

http://code.google.com/p/selenium/wiki/DesiredCapabilities

http://code.google.com/p/selenium/wiki/TipsAndTricks

 


(Funker) #5

если честно, то я не понял зачем создавать профайл для FF

Я создал его, вставил перед основным кодом, все разно не работает на FF

привожу сам код ниже

ProfilesIni allProfiles = new ProfilesIni();
FirefoxProfile profile = allProfiles.getProfile("webdriverprofile");
//profile.setEnableNativeEvents(true); // и так и так пробовал, никак не работает
profile.setPreference("foo.bar", 23);
      
WebDriver driver = new FirefoxDriver(profile);


(Mykhailo Poliarush) #6

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

например вот так вот 

 

   FirefoxProfile firefoxProfile = new FirefoxProfile();
firefoxProfile.setPreference("browser.download.folderList",2);
firefoxProfile.setPreference("browser.download.manager.showWhenStarting",false);
firefoxProfile.setPreference("browser.download.dir","c:\\downloads");
firefoxProfile.setPreference("browser.helperApps.neverAsk.saveToDisk","text/csv");

WebDriver driver = new FirefoxDriver(firefoxProfile);

driver.navigate().to("http://www.myfile.com/hey.csv");</code></pre>