java - Selenium Chrome 驱动程序将按键组合发送到窗口

标签 java selenium selenium-chromedriver

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

我实际上对将 key 发送到任何特定的网络元素不感兴趣。 例如,我想执行command+R(在Mac OS上重新加载)。 (重载只是举例说明,并非我的最终目的)

我的代码如下:

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

我花了几个小时搜索并尝试但没有成功。

感谢任何帮助!

最佳答案

WebDriver spec is element-focussed ,并且没有定义任何将按键发送到窗口、屏幕、浏览器镶边的方法 - 仅发送到元素。

使用 Selenium Actions 类进行 Cmd-R 可以在我的 Mac 上的 Firefox (45) 中运行,但仅当在前台 - 在 Chrome 中似乎根本没有。据推测,这归因于远程键盘实现的实现差异,最好不要依赖它。

<小时/>

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

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

但是,JavaScript 不允许您“仅发送 key ”。

<小时/>

唯一的其他方法是通过 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);

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

关于java - Selenium Chrome 驱动程序将按键组合发送到窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36522781/

相关文章:

.net - 从 Selenium WebDriver 运行 chrome 扩展

java - MySQL 从两个不同主机中的另一个数据库中的一个数据库插入

python - 无法点击元素 : ElementClickInterceptedException in Splinter/Selenium

python - 在 Heroku 上使用 Python selenium 运行 ChromeDriver

python - EGL 驱动程序消息(错误)eglQueryDeviceAttribEXT : Bad attribute

java - 我如何在表单 selenium 上上传文件

java - 将自定义 View 放入另一个 View 中

java - ExpressionLanguage (EL) 未按预期工作

java - 世博会弹出的应用程序因 java.net.ConnectException 崩溃

java - 无法启动 Internet Explorer ---Selenium