【APP自动化基础】APP元素定位工具
appium做移动端自动化测试,定位元素工具
- uiautomatorviewer
- Appium Inspector
- weditor
前置条件:已连接真机或手机模拟器,adb devices有显示连接的手机列表。
uiautomatorviewer
uiautomatorviewer 是android-sdk自带的一个元素定位工具,目录 D:\xxx\android-sdk-windows\tools 。 双击启动 uiautomatorviewer.bat
缺点:
- 不能校验我们写的定位表达式是否正确定位到控件(类似浏览器上的F12)
- 连接不够稳定
- 不能模拟用户动作
界面一共有四个区域:
上方区域,4个按钮从左至右功能分别是:
- 打开已经保存的布局
- 获取详细布局 ---把全部布局呈现出来
- 获取简洁布局 ---只呈现有用的控件布局
- 保存布局 ---点击保存,将存储两个文件,一个是图片文件,一个是.uix文件(XML布局结构)
截图区(左下),显示当前手机屏幕显示的布局图片
布局区(右上),用XML树的形式,显示界面的控件布局
控件属性区(右下),当爱布局区点击某一控件时,将在这里显示控件的属性
元素定位:
鼠标点击要定位的元素,右下角区域可看到元素对应的属性。
text: 文本
resource-id: com.oppo.reader:id/IDBookListItem
class: android.widget.TextView
xpath: //android.widget.TextView[@resource-id='com.oppo.reader:id/IDBookListItem']
元素定位方法
appium的webdriver提供了 11 种元素定位方法,在selenium的基础上扩展了三个,可以在pycharm里面输入driver.find_element_by然后会自动匹配出来。
多出的三种是:
driver.find_element_by_accessibility_id()
driver.find_element_by_android_uiautomator()
driver.find_element_by_ios_uiautomation()
Appium Inspector工具
优点:
- 可以校验定位表达式(如:XPATH表达式)
- 可以检测元素id等是否唯一性(点击搜索按钮)
- 可以模拟用户动作(如:点击,返回,滑动等操作)
- 连接手机,比较稳定
- 可以录制一系列操作,然后转换成代码
前置条件:已安装 Appium Server 和 Appium Inspector 这2个应用。(1.22.2版本后Server和Inspector是2个应用。)
- 启动Appium Server(Appium Server GUI应用),点击startService启动服务。或服务应用,dos窗口中输入appium进行启动服务
- 启动Appium Inspector(Appium Inspector应用),在Inspector界面的 Desired Capabilities 中配置启动参数(即代码中编写的cpas内容):
参数配置
- 主机和端口与appium server GUI一致,远程路径(Remote Path):/wd/hub
- 配置的参数为:
{
"platformName": "Android", //平台
"appium:platformVersion": "9", //android系统版本
"appium:deviceName": "小米", //设备名称随便写
"appium:automationName": "UiAutomator2" //可选,使用的自动化工具,没有默认Appium。
}
- automationName:使用哪种自动化引擎。Appium(默认),或用于Android的UiAutomator2、Espresso或UiAutoator1,或用于iOS的XCUITest或Instruments,或用于使用You.i引擎构建的应用程序的YouiEngine
- 如果启动报一些安全异常,可在配置参数中添加参数 "appium:ignoreHiddenApiPolicyError": true 用于忽略安全异常(权限拒绝警报,并允许从Appium 1.18.0+开始继续会话创建过程。当Appium试图放松隐藏的API策略时,会发生错误,尽管一些带有定制固件的设备拒绝了这样的请求。默认为false。)
首次启动会安装这些应用:Appium Setting(io.appium.setting)、io.appium.uiautomator2.server(io.appium.uiautomator2.server)、io.appium.uiautomator2.server.test(io.appium.uiautomator2.server.test)。
可以看到App Source中一层一层嵌套很多层内容,这个是xml格式代码,跟html树型结构类似。xml和html区别:
- html是用来展示内页,xml格式展示的是安卓页面,
- xml中的标签名称是可以随便命名的,而html中每个标签名称是固定好的,作用也是固定好的
Appium Inspector定位工具界面功能介绍
1. Selecte Elements:根据元素定位;用来识别元素
2. Swipe By Coordinates:根据坐标滑动页面;如果inspector界面没有展示全部,可以通过上滑展示到底部
3. Tap By Coordinates:根据坐标点击操作;inspector界面点击某个元素,可以跳转到该元素的界面,且app同步跳转
4. Back:返回
5. Refresh Source & Screenshot:刷新界面与截图
6. Start Recording:录制按钮,能自动生成自动化脚本
7. Search for element:在App Source中搜索元素
8. Quit Session & Close Inspector:退出会话或结束
9. Source:源代码显示区域
10. Commands:
11. Actions:
12. Session Information:会话信息
13. Toggle Attributes:切换属性
14. Copy XML Source to Clipboard:复制XML源代码
15. Download Source as .XML File:将源下载为.XML文件
16. Selected Element:被选中元素信息显示
Selected Element: 选中的元素对应的属性信息,这个就是我们查找定位元素的关键信息
安卓的源码结构:
- index:索引
- package:包
- class:类,对应于html的tagname
- text:文本
- content-desc:内容描述
- resource-id:元素ID,不一定唯一。
- checkable:可选
- checked:选中
- enabled:可用
- focusable:可获得焦点
- focused:获得焦点
- scrollable:可滚动
- long-clickable:可长点击
- password:隐藏明文(密文显示)
- selected:选中
- bounds:界面(起始点坐标/终止点坐标) --边界坐标值,[300,1500][600,1600],类似于html的盒模型。
- displayed 是不是可以显示
元素布局和控件:
- imageview 存放图片 ==> tagname (<android.view.imageview>)
- textview 文本标签
- layout 用来布局 相当于html中的div
- button 按钮
- checkbox 多选框
- switch 开关(如手机中设置的开关,蓝牙、wifi等开关)
- ratingbar 评分条
- seekbar 拖动条(音量条)
- toast 弹出
- webview 显示网页,类似iframe,在一个网页中嵌套另一个网页
- 原生空间里面套网页
- 其他组件很多
元素定位注意项:
- id属性:几乎每个元素都有id属性。优先使用id,id不是唯一的 (appium inspect 元素搜索)
- 每个元素的属性都是固定的
- class属性:指的不是web当中的class,而是指的是组件类型(ImageView,TextView 标签名称)
- text属性:app中编写xpath表达式://[@text='']或//[contains(@text='')] --html中编写xpath表达式://[text()='']或//[contains(text(),'')]
- resource-id:com.lemon.lemonban:id/navigation_my(一般来说,元素中都会有resource-id,但在app当中不一定是唯一的,可以重复的)
- 如果resource-id不唯一,尝试定位父级元素
- xpath:组合使用id和其他属性(text,索引)
如何搜索元素:
点击某个元素后,复制id,点击【搜索元素】按钮-->选择定位策略id,粘贴id,点击【查找】按钮 -->选中返回的元素,点击【点击元素】按钮,可以操作跳转到对应页面 (同样使用xpath表达式也可以查找到元素并进行点击)
weditor
weditor是基于浏览器技术的UI查看器,直接在浏览器打开。
- 缺点:不能和appium同时打开(可以跟airtest一块使用)
安装weditor库(weditor是python的第三方库):
pip install -U weditor # 该命令会安装uiautomator2和Facebook-wda两个库,分别支持Android和ios的app
如果安装报错,可指定版本:pip install weditor==0.6.4
安装完成后查看版本:pip list | findstr weditor
第一次连接时需要在手机上安装工具
python -m uiautomator2 init # 执行该命令会自动向手机安装 ATX 和 com.github.uiautomator.test 这2个工具(注意看手机上点击安装)
启动weditor服务
python -m weditor # 此时会在浏览器中自动访问 http://localhost:17310/ 可看到设备的当前停留页面
重点提醒:
选择设备后方的输入框中一定要输入连接电脑的设备名称(adb devices显示的设备号),不然会一直报错 Local server not started, start with $ python -m weditor
weditor使用
左边选中元素,中间选择操作(工具提供了Tap(点击)、Send Keys(输入)操作),右边就会生成代码,如下:
import uiautomator2 as u2
d = u2.connect()
d.implicitly_wait(60)
d.app_stop_all()
d(resourceId="com.android.systemui:id/clearAnimView").click()
d(description="第2屏").click()
d(resourceId="com.miui.home:id/icon_icon", description="微信").click()
d(resourceId="com.tencent.mm:id/f30", text="发现").click()
d(resourceId="android:id/title", text="视频号").click()
进群交流、获取更多干货, 请关注微信公众号:
> > > 咨询交流、进群,请加微信,备注来意:sanshu1318 (←点击获取二维码)
> > > 学习路线+测试实用干货精选汇总:
https://www.cnblogs.com/upstudy/p/15859768.html
> > > 【自动化测试实战】python+requests+Pytest+Excel+Allure,测试都在学的热门技术:
https://www.cnblogs.com/upstudy/p/15921045.html
> > > 【热门测试技术,建议收藏备用】项目实战、简历、笔试题、面试题、职业规划:
https://www.cnblogs.com/upstudy/p/15901367.html
> > > 声明:如有侵权,请联系删除。
============================= 升职加薪 ==========================
更多干货,正在挤时间不断更新中,敬请关注+期待。