You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Selenium Actions类sendKeys下方向键操作在所有浏览器中均失效

问题相关截图

问题根因

右键点击后发送下方向键无响应,核心问题有两个:

  • 浏览器原生右键菜单弹出后,默认焦点不会自动落在菜单选项上,此时向页面元素或全局发送按键事件,菜单根本接收不到,自然不会有反应
  • 靠方向键选择右键菜单选项的逻辑本身兼容性极差:不同浏览器、同一浏览器不同语言版本、不同版本号下,「在新窗口打开链接」的菜单位置都可能变化,只要选项顺序变了,按固定次数方向键的逻辑就会直接失效。
推荐实现方案

优先使用快捷键点击的方式绕开右键菜单,完全规避焦点、菜单顺序的问题,跨浏览器跨系统稳定性最高。

方案1:修饰键+点击链接(生产级脚本首选)

Windows/Linux系统下Ctrl+点击链接、Mac系统下Command+点击链接是浏览器通用的「新窗口打开链接」快捷键,不需要操作右键菜单,不会出现焦点丢失问题。
Java实现代码:

import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.interactions.Actions;
import java.util.Set;

public class OpenLinkNewWindow {
    public static void main(String[] args) throws InterruptedException {
        WebDriver driver = new ChromeDriver();
        driver.get("https://www.google.com");
        // 定位页面上的「关于」链接
        WebElement aboutLink = driver.findElement(By.linkText("关于"));
        // 保存当前窗口句柄,后续切换窗口用
        String originWindowHandle = driver.getWindowHandle();

        Actions actions = new Actions(driver);
        // 自动适配系统的修饰键
        Keys modifier = System.getProperty("os.name").toLowerCase().contains("mac") 
                ? Keys.COMMAND : Keys.CONTROL;
        // 按住修饰键点击链接,再松开修饰键,触发新窗口打开
        actions.keyDown(modifier)
                .click(aboutLink)
                .keyUp(modifier)
                .perform();

        // 切换到新打开的窗口
        Set<String> allHandles = driver.getWindowHandles();
        for (String handle : allHandles) {
            if (!handle.equals(originWindowHandle)) {
                driver.switchTo().window(handle);
                break;
            }
        }

        // 后续可在新窗口执行测试逻辑
        System.out.println("当前新窗口标题:" + driver.getTitle());
        
        // 测试结束可按需切回原窗口、关闭驱动
        // driver.switchTo().window(originWindowHandle);
        // driver.quit();
    }
}

方案2:强制操作右键菜单(仅临时调试用,不推荐)

如果必须模拟右键选菜单的操作,需要在右键后加短暂等待等菜单渲染完成,再发送按键,注意需要根据自己测试的浏览器版本调整方向键按压次数:

Actions actions = new Actions(driver);
// 右键点击目标链接
actions.contextClick(aboutLink).perform();
// 等待100ms等右键菜单渲染、获取焦点
Thread.sleep(100);
// 中文Chrome下「在新窗口打开」是右键后第二个选项,按1次下方向键后回车即可选中
actions.sendKeys(Keys.ARROW_DOWN)
        .sendKeys(Keys.ENTER)
        .perform();

该方案稳定性极差,浏览器更新、菜单语言变更、自定义菜单顺序都会导致逻辑失效,正式自动化脚本不要使用。


内容的提问来源于stack exchange,提问作者revathi Subramanian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 07:24:28