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

如何快速获取Android/iOS任意应用的所有UI元素?

快速获取Android/iOS应用界面所有显示元素的方案

Android 平台实现

直接用By.className("*")无效是因为Android控件类名是具体的全限定类名,通配符*不被By.className解析。推荐用UIAutomator选择器,它是Android原生定位方式,速度远快于XPath:

// 匹配所有继承自android.view.View的UI元素
List<WebElement> allElements = driver.findElements(By.androidUIAutomator("new UiSelector().classNameMatches(\".*\")"));
// 过滤出可见元素
List<WebElement> visibleElements = allElements.stream()
    .filter(WebElement::isDisplayed)
    .collect(Collectors.toList());

classNameMatches(".*")用正则通配符匹配所有类名,UIAutomator直接调用系统API,性能比XPath提升明显。

iOS 平台实现

iOS的所有UI元素都属于XCUIElementType枚举,用By.className("XCUIElementTypeAny")就能匹配所有元素,这是iOS专属的快速定位方式:

// 匹配所有iOS UI元素
List<WebElement> allElements = driver.findElements(By.className("XCUIElementTypeAny"));
// 过滤可见元素
List<WebElement> visibleElements = allElements.stream()
    .filter(WebElement::isDisplayed)
    .collect(Collectors.toList());

XCUIElementTypeAny是iOS原生支持的通配符类型,Appium直接映射到系统元素查询接口,比XPath高效得多。

额外优化建议

  • Android可以在UIAutomator选择器里直接加可见性条件,减少后续过滤开销:
    List<WebElement> visibleElements = driver.findElements(By.androidUIAutomator("new UiSelector().classNameMatches(\".*\").enabled(true).visible(true)"));
    
  • iOS可用By.iOSClassChain做精准快速查询,直接匹配可见元素:
    List<WebElement> visibleElements = driver.findElements(By.iOSClassChain("**/*[visible=true]"));
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 06:31:20