gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 02:58:35 25 4
gpt4 key购买 nike

我需要在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com