iOS端Selenium SendKeys调用左箭头键出表情,如何移动光标?
iOS Selenium SendKeys 光标左移失效,出现击掌表情的解决方法
问题描述
在iOS移动应用自动化测试中,调用Selenium的SendKeys()方法尝试向左移动光标时,文本框内会出现击掌表情,而非预期的光标移动。相关代码如下:
string libelle = "/XCUIElementTypeApplication/XCUIElementTypeWindow[1]/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther[2]/XCUIElementTypeOther[2]/XCUIElementTypeOther[2]/XCUIElementTypeOther[2]/XCUIElementTypeTextField"; Outil.Driver.FindElementByXPath(libelle).SendKeys(Keys.ArrowLeft)
目前可以正常使用SendKeys()输入字符串和Keys.Enter键,示例代码:
Outil.Driver.FindElementByXPath(libelle).SendKeys("Example" + Keys.Enter)
尝试以下代码后,仍得到相同的击掌表情:
Outil.Driver.FindElementByXPath(libelle).SendKeys(Keys.Left); Outil.Driver.FindElementByXPath(libelle).SendKeys("\ue012");
解决方案
1. 使用Appium专属API执行编辑器操作(推荐)
iOS的XCUI框架对Selenium原生Keys的支持存在局限性,改用Appium提供的mobile: performEditorAction脚本指令,直接调用系统编辑器的光标移动动作:
using OpenQA.Selenium.Appium.iOS; using System.Collections.Generic; var iosDriver = Outil.Driver as IOSDriver<IOSElement>; var element = iosDriver.FindElementByXPath(libelle); // 先确保文本框获得焦点 element.Click(); // 执行向左移动光标的编辑器动作 iosDriver.ExecuteScript("mobile: performEditorAction", new Dictionary<string, object> { { "action", "moveLeft" } });
2. 通过设置文本选中范围定位光标
如果上述方法无效,可以通过设置文本框的选中范围,间接将光标定位到目标位置:
using OpenQA.Selenium.Appium.iOS; using System.Collections.Generic; var iosDriver = Outil.Driver as IOSDriver<IOSElement>; var element = iosDriver.FindElementByXPath(libelle) as IOSElement; string currentText = element.Text; // 将光标移动到倒数第1个字符的左侧(可根据需求调整start和end值) iosDriver.ExecuteScript("mobile: setSelection", new Dictionary<string, object> { { "element", element.Id }, { "start", currentText.Length - 1 }, { "end", currentText.Length - 1 } });
3. 检查测试设备输入法设置
确保测试设备使用系统默认英文输入法,第三方输入法可能会将特殊按键指令错误映射为表情符号,导致Keys.ArrowLeft被解析成击掌表情。
内容的提问来源于stack exchange,提问作者Evangeline Drink
相关产品推荐
相关产品推荐

