Java robot key press, mouse move and click
In this post tested with Java 8(this scripts are good for automations and testing purposes):
- Mouse Left, Middle and Right click
- Mouse move to coordinates - x and y with Java robot
- Robot - mouse double click
- Java robot type string - simulate user typing/input
- Java Robot press enter
- Java Robot press tab
- Java Robot Copy CTRL + C
- Java Robot Paste CTRL + V
- Java Robot Paste text string
- press two keys simulating copy and paste
- typing letters using java robot
- full code example and class
Java has several ways to simulate user inputs. Most popular is by using:
java.awt.Robot;
No additional dependencies or libraries are required. It is very useful when you want to test desktop or even web application. You can simulated user behavior by using this simple methods.
Mouse Left, Middle and Right click
Select mouse button and press it several times:
public static void clickMouse(String button,Robot r, int number){
int mouse;
switch (button) {
case "left": mouse = InputEvent.BUTTON1_MASK;break;
case "right": mouse = InputEvent.BUTTON3_MASK;break;
case "middle": mouse = InputEvent.BUTTON2_MASK;break;
default: mouse = InputEvent.BUTTON1_MASK;break;
}
for(int i =0;i<number;i++){
r.mousePress(mouse);
r.delay(1000);
r.mouseRelease(mouse);
r.delay(1000);
}
}
Java Robot move mouse at coordinates
Move the mouse pointer at specific coordinates in pixels. In this example x - 600 and y - 500.
ro = new Robot();
moveMouse(ro, 600,500);
public static void moveMouse(Robot r, int X, int Y){
r.mouseMove(X, Y);
}
Java Robot mouse double click
Press mouse left button twice:
public static void doubleClickMouse(Robot r){
r.mousePress(InputEvent.BUTTON1_MASK);
r.mouseRelease(InputEvent.BUTTON1_MASK);
r.delay(1000);
r.mousePress(InputEvent.BUTTON1_MASK);
r.mouseRelease(InputEvent.BUTTON1_MASK);
}
Java Robot press enter
Press keyboard enter once:
public static void pressEnter(Robot r){
r.delay(1000);
r.keyPress(KeyEvent.VK_ENTER);
r.delay(1000);
}
Java Robot press tab
Press keyboard enter tab once:
public static void pressTab(Robot r){
r.delay(1000);
r.keyPress(KeyEvent.VK_TAB);
r.delay(1000);
}
Java Robot Copy CTRL + C
Simulate copy from keyboard input:
public static void copy(Robot r){
r.keyPress(KeyEvent.VK_CONTROL);
r.keyPress(KeyEvent.VK_C);
r.delay(1000);
r.keyRelease(KeyEvent.VK_CONTROL);
r.keyRelease(KeyEvent.VK_C);
}
Java Robot Paste CTRL + V
Simulate paste:
public static void paste(Robot r){
r.keyPress(KeyEvent.VK_CONTROL);
r.keyPress(KeyEvent.VK_V);
r.delay(1000);
r.keyRelease(KeyEvent.VK_CONTROL);
r.keyRelease(KeyEvent.VK_V);
}
Java Robot Paste text string
Paste any given string as simulation of clipboard paste:
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.StringSelection;
public static void pasteText(String text, Robot r){
StringSelection stringSelection = new StringSelection(text);
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
clipboard.setContents(stringSelection, stringSelection);
//Paste attached file paste
r.keyPress(KeyEvent.VK_CONTROL);
r.keyPress(KeyEvent.VK_V);
r.keyRelease(KeyEvent.VK_CONTROL);
r.keyRelease(KeyEvent.VK_V);
Java Robot Select All CTRL + A
Select all text by CTRL + A
public static void selectAll(Robot r){
//Select all
r.keyPress(KeyEvent.VK_CONTROL);
r.keyPress(KeyEvent.VK_A);
r.delay(1000);
r.keyRelease(KeyEvent.VK_CONTROL);
r.keyRelease(KeyEvent.VK_A);
}
Java Robot type any letter
You can simulate typing by this two methods. This one is doing button press and the next one has all letters and special buttons of the keyboard.
public static void pressButton(Robot r, String button, int number){
for(int i =0;i<number;i++){
r.delay(1000); //set the delay
type(r, button);
r.delay(1000); //set the delay
type(r, button);
}
}
public static void type(Robot r, String character) {
switch (character) {
//letters
case "a": r.keyPress(KeyEvent.VK_A); break;
case "b": r.keyPress(KeyEvent.VK_B); break;
case "c": r.keyPress(KeyEvent.VK_C); break;
case "d": r.keyPress(KeyEvent.VK_D); break;
case "e": r.keyPress(KeyEvent.VK_E); break;
case "f": r.keyPress(KeyEvent.VK_F); break;
case "g": r.keyPress(KeyEvent.VK_G); break;
case "h": r.keyPress(KeyEvent.VK_H); break;
case "i": r.keyPress(KeyEvent.VK_I); break;
case "j": r.keyPress(KeyEvent.VK_J); break;
case "k": r.keyPress(KeyEvent.VK_K); break;
case "l": r.keyPress(KeyEvent.VK_L); break;
case "m": r.keyPress(KeyEvent.VK_M); break;
case "n": r.keyPress(KeyEvent.VK_N); break;
case "o": r.keyPress(KeyEvent.VK_O); break;
case "p": r.keyPress(KeyEvent.VK_P); break;
case "q": r.keyPress(KeyEvent.VK_Q); break;
case "r": r.keyPress(KeyEvent.VK_R); break;
case "s": r.keyPress(KeyEvent.VK_S); break;
case "t": r.keyPress(KeyEvent.VK_T); break;
case "u": r.keyPress(KeyEvent.VK_U); break;
case "v": r.keyPress(KeyEvent.VK_V); break;
case "w": r.keyPress(KeyEvent.VK_W); break;
case "x": r.keyPress(KeyEvent.VK_X); break;
case "y": r.keyPress(KeyEvent.VK_Y); break;
case "z": r.keyPress(KeyEvent.VK_Z); break;
//special
case "alt": r.keyPress(KeyEvent.VK_ALT); break;
case "tab": r.keyPress(KeyEvent.VK_TAB); break;
case "enter": r.keyPress(KeyEvent.VK_ENTER); break;
case "shift": r.keyPress(KeyEvent.VK_SHIFT); break;
case "windows": r.keyPress(KeyEvent.VK_WINDOWS); break;
case "control": r.keyPress(KeyEvent.VK_CONTROL); break;
case "open_bracket": r.keyPress(KeyEvent.VK_OPEN_BRACKET); break;//[
case "escape": r.keyPress(KeyEvent.VK_ESCAPE); break;//[
default:
throw new IllegalArgumentException("Cannot type character " + character);
}
}
Java Robot the code
Class which shows the usages of this methods. This will help you to automate your tests by key pressing, mouse clicks and moves. Feel free to comment below:
package robot;
import java.awt.*;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.StringSelection;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
public class RobotTest {
public static void main(String[] args) {
Robot ro;
{
try {
ro = new Robot();
moveMouse(ro, 600,500);
doubleClickMouse(ro);
clickMouse("right", ro, 1);
pressEnter(ro);
} catch (AWTException e) {
e.printStackTrace();
}
}
}
//
// Move mouse at coordinates
//
public static void moveMouse(Robot r, int X, int Y){
r.mouseMove(X, Y);
}
//
// Click mouse button twice
//
public static void doubleClickMouse(Robot r){
r.mousePress(InputEvent.BUTTON1_MASK);
r.mouseRelease(InputEvent.BUTTON1_MASK);
r.delay(1000);
r.mousePress(InputEvent.BUTTON1_MASK);
r.mouseRelease(InputEvent.BUTTON1_MASK);
}
//
// Click mouse buttons n - times
//
public static void clickMouse(String button,Robot r, int number){
int mouse;
switch (button) {
case "left": mouse = InputEvent.BUTTON1_MASK;break;
case "right": mouse = InputEvent.BUTTON3_MASK;break;
case "middle": mouse = InputEvent.BUTTON2_MASK;break;
default: mouse = InputEvent.BUTTON1_MASK;break;
}
for(int i =0;i<number;i++){
r.mousePress(mouse);
r.delay(1000);
r.mouseRelease(mouse);
r.delay(1000);
}
}
//
// Press Enter
//
public static void pressEnter(Robot r){
r.delay(1000);
r.keyPress(KeyEvent.VK_ENTER);
r.delay(1000);
}
//
// Press Tab
//
public static void pressTab(Robot r){
r.delay(1000);
r.keyPress(KeyEvent.VK_TAB);
r.delay(1000);
}
//
// Copy CTRL + C
//
public static void copy(Robot r){
r.keyPress(KeyEvent.VK_CONTROL);
r.keyPress(KeyEvent.VK_C);
r.delay(1000);
r.keyRelease(KeyEvent.VK_CONTROL);
r.keyRelease(KeyEvent.VK_C);
}
//
// Paste CTRL + V
//
public static void paste(Robot r){
r.keyPress(KeyEvent.VK_CONTROL);
r.keyPress(KeyEvent.VK_V);
r.delay(1000);
r.keyRelease(KeyEvent.VK_CONTROL);
r.keyRelease(KeyEvent.VK_V);
}
//
// Paste CTRL + V
//
public static void pasteText(String text, Robot r){
StringSelection stringSelection = new StringSelection(text);
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
clipboard.setContents(stringSelection, stringSelection);
//Paste attached file paste
r.keyPress(KeyEvent.VK_CONTROL);
r.keyPress(KeyEvent.VK_V);
r.keyRelease(KeyEvent.VK_CONTROL);
r.keyRelease(KeyEvent.VK_V);
}
//
// Select All CTRL + A
//
public static void selectAll(Robot r){
//Select all
r.keyPress(KeyEvent.VK_CONTROL);
r.keyPress(KeyEvent.VK_A);
r.delay(1000);
r.keyRelease(KeyEvent.VK_CONTROL);
r.keyRelease(KeyEvent.VK_A);
}
//
// Select press buttons
//
public static void pressButton(Robot r, String button, int number){
for(int i =0;i<number;i++){
r.delay(1000); //set the delay
type(r, button);
r.delay(1000); //set the delay
type(r, button);
}
}
public static void type(Robot r, String character) {
switch (character) {
//letters
case "a": r.keyPress(KeyEvent.VK_A); break;
case "b": r.keyPress(KeyEvent.VK_B); break;
case "c": r.keyPress(KeyEvent.VK_C); break;
case "d": r.keyPress(KeyEvent.VK_D); break;
case "e": r.keyPress(KeyEvent.VK_E); break;
case "f": r.keyPress(KeyEvent.VK_F); break;
case "g": r.keyPress(KeyEvent.VK_G); break;
case "h": r.keyPress(KeyEvent.VK_H); break;
case "i": r.keyPress(KeyEvent.VK_I); break;
case "j": r.keyPress(KeyEvent.VK_J); break;
case "k": r.keyPress(KeyEvent.VK_K); break;
case "l": r.keyPress(KeyEvent.VK_L); break;
case "m": r.keyPress(KeyEvent.VK_M); break;
case "n": r.keyPress(KeyEvent.VK_N); break;
case "o": r.keyPress(KeyEvent.VK_O); break;
case "p": r.keyPress(KeyEvent.VK_P); break;
case "q": r.keyPress(KeyEvent.VK_Q); break;
case "r": r.keyPress(KeyEvent.VK_R); break;
case "s": r.keyPress(KeyEvent.VK_S); break;
case "t": r.keyPress(KeyEvent.VK_T); break;
case "u": r.keyPress(KeyEvent.VK_U); break;
case "v": r.keyPress(KeyEvent.VK_V); break;
case "w": r.keyPress(KeyEvent.VK_W); break;
case "x": r.keyPress(KeyEvent.VK_X); break;
case "y": r.keyPress(KeyEvent.VK_Y); break;
case "z": r.keyPress(KeyEvent.VK_Z); break;
//special
case "alt": r.keyPress(KeyEvent.VK_ALT); break;
case "tab": r.keyPress(KeyEvent.VK_TAB); break;
case "enter": r.keyPress(KeyEvent.VK_ENTER); break;
case "shift": r.keyPress(KeyEvent.VK_SHIFT); break;
case "windows": r.keyPress(KeyEvent.VK_WINDOWS); break;
case "control": r.keyPress(KeyEvent.VK_CONTROL); break;
case "open_bracket": r.keyPress(KeyEvent.VK_OPEN_BRACKET); break;//[
case "escape": r.keyPress(KeyEvent.VK_ESCAPE); break;//[
default:
throw new IllegalArgumentException("Cannot type character " + character);
}
}
}