Selenium Chrome Driver将按键组合发送到窗口

时间:2016-04-09 21:13:27

标签: java selenium selenium-chromedriver

我需要在Selenium Chrome驱动程序上执行按键组合。 该操作不是将测试发送到文本框或单击按钮。

我实际上并不想将密钥发送到任何特定的网络元素。 例如,我想执行命令+ R(在Mac OS上重新加载)。 (重新加载只是解释的一个例子,而不是我的最终目标)

我的代码如下:

public static void keyPressCombnaiton() {
    Actions action = new Actions(browser);
    action.keyDown(Keys.COMMAND)
          .sendKeys("r")
          .keyUp(Keys.COMMAND)
          .build()
          .perform();
}

我花了几个小时搜索,试着没有运气。

感谢任何帮助!

1 个答案:

答案 0 :(得分:2)

WebDriver spec is element-focussed,并没有定义任何方法将密钥发送到窗口,屏幕,浏览器chrome - 仅限于元素。

对于 Cmd - R 的Selenium Actions类在Firefox(45)中的Mac上运行,但只有在前台运行时 - 在Chrome中看似根本没有。据推测,这取决于远程键盘实现的实现差异,最好不要依赖它。

请求页面重新加载的最有效方式和非平台特定方式是使用JavaScript:

((JavascriptExecutor) driver).executeScript("document.location.reload(true)");

但是,JavaScript不允许您“只发送密钥”。

唯一的另一种方法是通过Java AWT Robot类:

Robot robot = new java.awt.Robot();
robot.keyPress(KeyEvent.VK_META);  // See: http://stackoverflow.com/a/15419192/954442
robot.keyPress(KeyEvent.VK_R);
robot.keyRelease(KeyEvent.VK_R);
robot.keyRelease(KeyEvent.VK_META);

这种“盲目”将键组合发送到当时屏幕上的任何窗口/组件,因此如果您的浏览器窗口已被隐藏或最小化,则无法使用。