Midscene.js,是一款大语言模型(LLM)驱动的安卓APP自动化测试工具,它支持通过自然语言来控制手机。并宣称
AI 驱动的 Android 自动化时代已经到来!
什么是XPath
XPath(XML Path Language)是一种用于在XML文档中定位和选择节点的查询语言(于1999年作为W3C标准推出XPath 1.0)。
- 所以,xpath 是一种语言,它可以用来查询 XML 中元素。
- 举个例子,假设有一个XML文档如下:
<bookstore> <book> <title>XML入门</title> <author>张三</author> <price>45</price> </book> <book> <title>JavaScript指南</title> <author>李四</author> <price>60</price> </book> </bookstore>
使用XPath表达式//book/title
,可以提取所有book
元素下的title
元素,结果为:
<title>XML入门</title>
<title>JavaScript指南</title>
前AI时代通过Xpath去访问页面元素
step1. 用adb 命令获得被测试页面的ui布局(一个xml文件)
# 1. 生成XML布局文件(默认保存到设备/sdcard/ui.xml)
adb shell uiautomator dump /sdcard/ui.xml# 2. 将文件拉取到本地
adb pull /sdcard/ui.xml# 3. 查看布局文件内容(可用文本编辑器或浏览器打开)
cat ui.xml # 或使用支持XML高亮的编辑器
step2.使用xpath查询ui.xml中的元素并操作它
假设ui.xml如下图,你可以使用如下代码,点击Settings文本框
element = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.XPATH, '//android.widget.TextView[@text="Settings"]')) ) element.click()
由于xpath可以通过父子关系来定位节点,所以即便该节点没有text或id属性,也可以通过父子关系被定位到。可以说,只要这个元素在布局文件中(当前页面的DOM树),就可以用xpath定位到(复杂布局通过父子关系定位节点可能会有性能问题)。
AI时代多模态大模型通过页面截图和元素坐标来访问元素
这种通过视觉来定位元素的方式,使得UI自动化不再依赖于Xpath,和前端技术栈(native,react等)。
如何通过页面截图和元素坐标来访问元素?以下是Midscene.js的建议
但是,凡事有利必有弊
把页面截图给大模型api,通常会导致token数量明显增加,说白了就是有费钱的风险。对于个人开发者或者小公司,需要关注一下这个点。