使用Appium注解获取多个EditText元素返回空的问题求助
解决Appium获取EditText元素列表返回空的问题
1. 修正注解用法
原代码使用[FindsByAndroidUIAutomator]注解定义列表字段时无法正确匹配多个元素,需改用针对多平台的标准定位注解写法,同时确保字段类型为List<IMobileElement<AppiumWebElement>>:
[AndroidFindBy(UIAutomator = "className(\"android.widget.EditText\")")] [iOSFindBy(Accessibility = "")] public List<IMobileElement<AppiumWebElement>> PhoneFields;
若需通过FindAll包裹多平台规则,也可使用以下写法:
[FindAll(FindBy = new[] { new AndroidFindByAttribute { UIAutomator = "className(\"android.widget.EditText\")" }, new IOSFindByAttribute { Accessibility = "" } })] public List<IMobileElement<AppiumWebElement>> PhoneFields;
2. 确保元素完成加载
单个元素能找到但列表为空,可能是部分元素未渲染完成。可添加显式等待,确保目标元素全部加载:
// 等待页面中所有EditText元素加载完成 var wait = new WebDriverWait(Driver, TimeSpan.FromSeconds(10)); wait.Until(d => d.FindElements(By.ClassName("android.widget.EditText")).Count == 9); // 之后再访问元素列表 var editTextList = PhoneFields;
3. 检查应用上下文
如果页面包含WebView,需确认当前处于原生应用上下文(而非Web上下文),可通过以下代码切换:
// 获取所有可用上下文 var contexts = Driver.Contexts; // 切换到原生应用上下文(名称通常包含"NATIVE_APP") Driver.Context = contexts.First(c => c.Contains("NATIVE_APP"));
内容的提问来源于stack exchange,提问作者Maciek Maciek
相关产品推荐
相关产品推荐

