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

Appium操作Windows桌面应用:sendKeys无法输入@字符问题

解决Appium Windows桌面应用sendKeys输入@变为G的问题

核心原因

这大概率是键盘布局不匹配导致的:Appium默认可能采用了非美式键盘布局,部分区域的键盘(如部分欧洲键盘)中@的输入组合与美式键盘不同,直接输入@字符时会被错误映射为G。

可行解决方案

方案1:用键盘组合键模拟输入@

放弃直接输入@字符,改用美式键盘的@输入快捷键(Shift+2)来模拟:

Actions action = new Actions(driver);
String emailPrefix = "Grady";
String emailSuffix = "gmail.com";

action.sendKeys(send, emailPrefix)
      // 模拟Shift+2输入@
      .keyDown(Keys.SHIFT)
      .sendKeys("2")
      .keyUp(Keys.SHIFT)
      .sendKeys(emailSuffix)
      .perform();

方案2:配置Appium会话的键盘布局

启动Windows Driver时,添加实验性功能配置,指定使用美式键盘布局:

DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability("app", "你的目标应用路径");
caps.setCapability("platformName", "Windows");
caps.setCapability("deviceName", "WindowsPC");
// 开启实验功能并指定美式键盘布局
caps.setCapability("ms:experimental-webdriver", true);
caps.setCapability("keyboardLayout", "US");

WindowsDriver driver = new WindowsDriver(new URL("http://127.0.0.1:4723"), caps);

方案3:借助剪贴板粘贴@字符

如果前两种方法无效,通过剪贴板绕过字符输入的映射问题:

// 将@写入系统剪贴板
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(new StringSelection("@"), null);

Actions action = new Actions(driver);
action.sendKeys(send, "Grady")
      // 模拟Ctrl+V粘贴@
      .keyDown(Keys.CONTROL)
      .sendKeys("v")
      .keyUp(Keys.CONTROL)
      .sendKeys("gmail.com")
      .perform();

方案4:拆分字符逐个输入

部分应用输入框可能对批量输入有自定义解析,尝试拆分字符逐个输入:

String email = "Grady@gmail.com";
WebElement send = driver.findElement(By.xpath("//Edit[starts-with(@ClassName,'BaseTextField_QMLTYPE')][@Name='Email']"));

Actions action = new Actions(driver);
for (char c : email.toCharArray()) {
    action.sendKeys(send, String.valueOf(c)).perform();
    // 可选:添加短延迟确保字符输入完成
    Thread.sleep(100);
}

内容的提问来源于stack exchange,提问作者Hemant Attri

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 05:03:12