如何使用Appium提取Android应用Activity中的所有字符串用于翻译校验?
Appium提取Android页面字符串实现多语言校验方案
可行性结论
可以通过Appium实现Android应用单个Activity内所有可见字符串的批量提取,完全能满足你自动化遍历校验多语言翻译效果的需求。
核心实现逻辑
- 首先通过Appium连接测试设备,启动目标应用后,调用
driver.page_source接口即可获取当前Activity渲染后的完整布局XML数据,所有已加载到UI层的文本内容(包括按钮文案、普通文本、输入框提示语、选中状态文本等)都会在XML节点的text属性中存储。 - 对拿到的XML数据做解析,遍历所有节点提取非空的
text属性值,去重后就能得到当前页面的全量可见字符串。 - 再搭配Activity自动遍历逻辑:可通过
adb shell dumpsys activity activities命令提前获取目标应用的全量Activity列表,编写自动化脚本逐个跳转进入每个Activity,重复提取字符串的操作,即可覆盖全应用所有页面。
参考实现代码(Python版本)
from appium import webdriver import xml.etree.ElementTree as ET # Appium 连接配置 desired_caps = { "platformName": "Android", "deviceName": "测试设备序列号", "appPackage": "目标应用包名", "appActivity": "应用启动页Activity", "noReset": True, "unicodeKeyboard": True, "resetKeyboard": True } driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps) # 提取当前页面所有非空可见字符串 def fetch_current_page_strings(): page_layout_xml = driver.page_source xml_root = ET.fromstring(page_layout_xml.encode('utf-8')) result = [] for node in xml_root.iter(): text_content = node.get('text') if text_content and text_content.strip(): result.append(text_content.strip()) # 去重后返回 return list(set(result))
优化建议
- 提取到的字符串可以和对应语言的
strings.xml资源文件内容做自动比对,快速标记出未翻译、翻译错误、漏适配的文案。 - 接口返回的动态文本不属于客户端内置翻译范畴,可单独做过滤或分类标注,避免误判。
- 可以在每个Activity提取字符串的同时保存当前页面截图,方便后续核验问题时快速定位上下文。
内容的提问来源于stack exchange,提问作者phenomenal
相关产品推荐
相关产品推荐

