有测试问题请微信联系作者,备注来意(点击此处添加)
240
一名普通的测试打工人;专注自动化测试技术研究、实践、总结、分享、交流。
用我8年+的经历,给大家带来更多实用的干货。
人若有志,就不会在半坡停止。

【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()

更多定位方法:https://www.cnblogs.com/upstudy/p/17995225

Appium Inspector工具

优点:

  • 可以校验定位表达式(如:XPATH表达式)
  • 可以检测元素id等是否唯一性(点击搜索按钮)
  • 可以模拟用户动作(如:点击,返回,滑动等操作)
  • 连接手机,比较稳定
  • 可以录制一系列操作,然后转换成代码

前置条件:已安装 Appium Server 和 Appium Inspector 这2个应用。(1.22.2版本后Server和Inspector是2个应用。)

  1. 启动Appium Server(Appium Server GUI应用),点击startService启动服务。或服务应用,dos窗口中输入appium进行启动服务
  2. 启动Appium Inspector(Appium Inspector应用),在Inspector界面的 Desired Capabilities 中配置启动参数(即代码中编写的cpas内容):

参数配置

  1. 主机和端口与appium server GUI一致,远程路径(Remote Path):/wd/hub
  2. 配置的参数为:
    {
      "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()
posted @ 2024-01-30 11:28  三叔测试笔记  阅读(510)  评论(0编辑  收藏  举报
返回顶部 跳转底部