我需要在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();
}
我花了几个小时搜索,试着没有运气。
感谢任何帮助!
答案 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);
这种“盲目”将键组合发送到当时屏幕上的任何窗口/组件,因此如果您的浏览器窗口已被隐藏或最小化,则无法使用。