Selenium WebDriver在Chrome中无法执行SHIFT+m键盘操作求助
解决Mac上Selenium Actions类执行SHIFT+m无响应的问题
可能的原因及对应方案
1. 未确保目标元素获得焦点
键盘操作需要作用于已激活的元素,否则事件会被忽略。先通过点击或其他方式聚焦目标元素:
// 定位需要操作的元素(比如页面编辑器、输入框) WebElement target = driver.findElement(By.cssSelector("your-target-selector")); target.click(); // 激活元素 // 执行SHIFT+m快捷键 Actions actions = new Actions(driver); actions.sendKeys(Keys.chord(Keys.SHIFT, "m")).perform();
2. Actions类调用方式错误
Actions是构建器模式,分步调用时需保留动作链的引用,否则操作不会被加入执行队列:
// 正确写法1:链式调用 new Actions(driver).sendKeys(Keys.chord(Keys.SHIFT, "m")).perform(); // 正确写法2:保留动作链引用 Actions actions = new Actions(driver); actions = actions.sendKeys(Keys.SHIFT, "m"); // 接收返回的新Actions实例 actions.build().perform();
3. Mac ARM架构驱动兼容性问题
确保使用的浏览器驱动(如ChromeDriver)是适配Apple Silicon的arm64版本,且版本与浏览器完全匹配。避免使用x86架构的驱动,否则会出现各种异常或无响应。
4. 改用Robot类替代(全局键盘事件)
如果Actions类始终无效,可尝试Robot类发送原生键盘事件,但需注意权限设置:
try { // 确保浏览器处于前台 driver.switchTo().window(driver.getWindowHandle()); Robot robot = new Robot(); // 模拟SHIFT+m的按下与释放 robot.keyPress(KeyEvent.VK_SHIFT); robot.keyPress(KeyEvent.VK_M); robot.keyRelease(KeyEvent.VK_M); robot.keyRelease(KeyEvent.VK_SHIFT); } catch (AWTException e) { e.printStackTrace(); }
注意:使用Robot类前,需在Mac系统设置的「隐私与安全性」->「辅助功能」中,添加你的IDE或终端应用,允许其控制电脑,否则会抛出权限异常。
内容的提问来源于stack exchange,提问作者Abhishek Aggarwal
相关产品推荐
相关产品推荐

