'Not able to upload file using robot class and Sendkeys

I am not able to upload file using robot class and sendkeys.

Below is the code that I tried

package garbage;

import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.KeyEvent;
import java.io.IOException;
import java.util.List;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;

public class imageupload {

    static WebDriver driver;
    static String baseURL="http://elance.wetwaresoft.com/account/register";


    public static void main(String[] args) throws AWTException, InterruptedException, IOException 
    {
        driver=new FirefoxDriver();
        driver.get(baseURL);
        WebElement btn=driver.findElement(By.xpath("//*[@class='fileupload-new']"));
        btn.click();
        System.out.println("Going in Robot class");
        Runtime.getRuntime().exec("notepad");
        Robot r=new Robot();
        r.delay(1000);
        r.keyPress(KeyEvent.VK_ENTER); 
        r.keyPress(KeyEvent.VK_D);
        r.keyPress(KeyEvent.VK_SHIFT);
        r.keyPress(KeyEvent.VK_SEMICOLON);
        r.keyRelease(KeyEvent.VK_SHIFT);
        r.keyPress(KeyEvent.VK_BACK_SLASH);
        r.keyPress(KeyEvent.VK_A);
        r.keyPress(KeyEvent.VK_DOWN);
        r.keyPress(KeyEvent.VK_ENTER);
        System.out.println("File uploaded");
    }
}

When I am executing my robot class code in notepad then it types the path but when I execute this in a window popup then it is not typing anything.

How can I upload file using robot and sendkeys?



Solution 1:[1]

I've separated file upalod logic using Robot into separate class, and made methods static. In method fileAttachmentUsingRobot to pass path to image you want to be uploaded, i.e full system path to image.

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.awt.*;
import java.awt.datatransfer.StringSelection;
import java.awt.event.KeyEvent;

/**
 * Created by ypolshchykau on 30.01.2015.
 */
public class FileAttacherRobotImplementation {
    public final static Logger log = LoggerFactory.getLogger(FileAttacherRobotImplementation.class);

    /**
     * this method implements file attachment using Robot mechanism
     *
     * @param filePathToImage
     */

    public static void fileAttachmentUsingRobot(String filePathToImage) {
        Robot robot = null;
        try {
            robot = new Robot();
        } catch (AWTException e) {
            e.printStackTrace();
        }
        setClipboardData(filePathToImage);
        robot.delay(1000);

        robot.keyPress(KeyEvent.VK_CONTROL);
        robot.keyPress(KeyEvent.VK_V);
        robot.keyRelease(KeyEvent.VK_V);
        robot.keyRelease(KeyEvent.VK_CONTROL);
        robot.keyPress(KeyEvent.VK_ENTER);
        robot.keyRelease(KeyEvent.VK_ENTER);
    }

    /**
     * method for copying file in order to attach file in File open window
     *
     * @param str
     */
    public static void setClipboardData(String str) {
        StringSelection stringSelection = new StringSelection(str);
        Toolkit.getDefaultToolkit().getSystemClipboard().setContents(stringSelection, null);
    }

}

Hope this helps you.

Solution 2:[2]

String file = "C:\\Users\\KT System\\Downloads\\sample1.xlsx";
     StringSelection stringselection = new StringSelection(file);
    
 Toolkit.getDefaultToolkit().getSystemClipboard().setContents(stringselection, null);
     
     Robot robot = new Robot();
     Thread.sleep(2000);
     robot.keyPress(KeyEvent.VK_CONTROL);
     Thread.sleep(2000);
     robot.keyPress(KeyEvent.VK_V);
     Thread.sleep(2000);
     robot.keyRelease(KeyEvent.VK_CONTROL);
     Thread.sleep(2000);
     robot.keyRelease(KeyEvent.VK_V);
     Thread.sleep(2000);
     robot.keyPress(KeyEvent.VK_ENTER);
     Thread.sleep(2000);
     robot.keyRelease(KeyEvent.VK_ENTER);

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 eugene.polschikov
Solution 2 Roshan Ali _rehaan