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
相关产品推荐
相关产品推荐

