使用 Java 机器人发送按键事件以从 Selenium WebDriver 中的浏览器打印内容

Sending KeyPress Events with Java Robot to print something from browser in Selenium WebDriver

我正在使用 Selenium WebDriver 来自动化 Web 浏览器,但我有一个测试用例,我需要在其中保存 pdf。受到这两个问题所用方法的启发question 1 question 2 我让 "Save As" 弹出一个 java 机器人对象并按下 control + s :

Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_S);
robot.keyRelease(KeyEvent.VK_S);
robot.keyRelease(KeyEvent.VK_CONTROL);

效果很好;但是,当我尝试在保存到框中键入一个位置并使用以下代码按回车键时:

robot.keyPress(KeyEvent.VK_P);
robot.keyRelease(KeyEvent.VK_P);
robot.keyPress(KeyEvent.VK_O);
robot.keyRelease(KeyEvent.VK_O);
robot.keyPress(KeyEvent.VK_C);
robot.keyRelease(KeyEvent.VK_C);
robot.keyPress(KeyEvent.VK_ENTER);
robot.keyRelease(KeyEvent.VK_ENTER);

它什么也没做。为什么我不能在保存到框中键入 POC 并在它明显具有焦点时使用相同的技术按回车键?

发生的事情是机器人移动速度对于浏览器来说太快了。我添加了一些 robot.delay(x)s 并且稍微更改了 keyPress 和 keyRelease 调用。这是工作代码:

Robot robot = new Robot();
robot.delay(3000);
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_S);
robot.keyRelease(KeyEvent.VK_S);
robot.keyRelease(KeyEvent.VK_CONTROL);
robot.delay(1000);
robot.keyPress(KeyEvent.VK_P);
robot.keyPress(KeyEvent.VK_O);
robot.keyPress(KeyEvent.VK_C);
robot.keyRelease(KeyEvent.VK_P);
robot.keyRelease(KeyEvent.VK_O);
robot.keyRelease(KeyEvent.VK_C);
robot.delay(50);
robot.keyPress(KeyEvent.VK_ENTER);
robot.keyRelease(KeyEvent.VK_ENTER);