Appium SendKeys输入表情符号显示为��的问题求助
问题:Appium C#向Android文本框输入表情符号出现乱码
我开发了一个WinForms应用,已通过NuGet安装最新稳定版Appium,尝试向Android文本框输入表情符号时,实际输出始终为“��”。
代码示例
using OpenQA.Selenium.Appium.Android; using OpenQA.Selenium.Appium.Enums; using OpenQA.Selenium.Appium; using System.Windows.Forms; using System; var appiumOptions = new AppiumOptions(); appiumOptions.AddAdditionalCapability(MobileCapabilityType.PlatformName, "Android"); appiumOptions.AddAdditionalCapability(MobileCapabilityType.DeviceName, "1234"); appiumOptions.AddAdditionalCapability(MobileCapabilityType.AutomationName, "UiAutomator2"); var driver = new AndroidDriver<AndroidElement>(new Uri("http://127.0.0.1:4723/wd/hub"), appiumOptions); AndroidElement messageBox = driver.FindElementById("com.app:id/simple_text"); messageBox.SendKeys("😊");
请求差异对比
- C#程序发送的请求:
[HTTP] {"text":"😊","value":["�","�"]} - Appium会话管理器发送的请求:
[HTTP] {"value":["😊"],"text":"😊"}
已知使用Selenium WebDriver可正常输入,但非最优方案,寻求解决办法。
解决办法
1. 用SetValue替代SendKeys
SendKeys会将表情符号拆分为UTF-16代理对,导致value数组被拆分,而SetValue可直接传递完整的表情字符串:
// 替换原SendKeys代码 messageBox.SetValue("😊");
2. 使用Actions类模拟输入
通过Actions构建输入动作,规避字符拆分问题:
var actions = new OpenQA.Selenium.Interactions.Actions(driver); actions.SendKeys(messageBox, "😊").Perform();
3. 手动构造合规HTTP请求(兜底方案)
若上述方法无效,可直接调用Appium REST API,构造符合要求的请求格式:
using System.Net.Http; using System.Text.Json; var elementId = messageBox.Id; var requestBody = new { value = new[] { "😊" }, text = "😊" }; var json = JsonSerializer.Serialize(requestBody); using var client = new HttpClient(); await client.PostAsync( $"http://127.0.0.1:4723/wd/hub/session/{driver.SessionId}/element/{elementId}/value", new StringContent(json, System.Text.Encoding.UTF8, "application/json") );
4. 匹配Appium客户端与服务端版本
检查NuGet安装的Appium.WebDriver版本是否与Appium服务端版本兼容,部分版本存在字符编码处理bug,可尝试降级或升级到匹配的稳定版本。
内容的提问来源于stack exchange,提问作者maddo7
相关产品推荐
相关产品推荐

