【问题标题】:Selenium Chrome Driver send key press combinations to windowSelenium Chrome 驱动程序将按键组合发送到窗口
【发布时间】:2016-04-10 07:16:19
【问题描述】:

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

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

我的代码如下:

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

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

感谢任何帮助!

【问题讨论】:

    标签: java selenium selenium-chromedriver


    【解决方案1】:

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

    Cmd-R 的 Selenium Actions 类的使用在我的 Mac 上的 Firefox (45) 中有效,但仅在前台运行时才有效 - 似乎不行完全在 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);
    

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

    【讨论】:

    • 感谢您的帮助。 1.为了让机器人正常工作,我当前的焦点窗口必须是Chrome驱动程序窗口。 2.我的意思不是刷新页面,而是执行组合键(仍然很高兴知道)。 3、有没有Selenium的方式来做上面的操作?
    • 是的。也许我应该澄清一下,这是更喜欢 JavaScript 方法的另一个原因,假设您真的只想重新加载页面,而 Cmd-R 只是一个示例。
    • 有没有 Selenium 的方式来实现它?
    • 感谢您指出 Actions 在 Chrome 驱动程序中不起作用。我希望我能早几个小时问这个问题。
    猜你喜欢
    • 2022-10-19
    • 2017-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-06
    • 2018-07-15
    • 2015-11-13
    相关资源
    最近更新 更多