(appium+python)UI自动化_03_元素定位工具
前言
在UI自动化过程中,需要对手机app上的元素进行定位,然后进一步编写自动化脚本操作app。定位元素首先需要定位工具来辅助查看页面元素。小编常用的定位工具有2种,分别是uiautomatorviewer、appium inspector。
uiautomatorviewer 是Android sdk 自带的定位工具,元素层级展示清晰,但是定位不到内嵌H5页元素。appium inspector是appium上自带的定位功能,元素层级展示不够清晰,查看元素不够方便,但是可以定位到内嵌H5页元素。
一、uiautomatorviewer定位
前提:已安装配置android sdk环境
1,打开uiautomatorviewer定位工具
点击android sdk->tools->uiautomatorviewer
2,usb连接手机
(1)打开手机开发者模式、usb调试功能
(2)手机usb连接电脑
(3)验证连接成功
mac打开终端(windows打开命令行工具)->输入指令“adb devices”->显示设备号即连接成功
3,刷新页面,查看元素
(1)点击左上角刷新页面
(2) 点击页面,右侧查看元素
鼠标点击左侧页面元素,右侧可查看元素层级关系和元素id、class等属性详情
二、appium inspector定位
前提:已安装appium客户端版本
1,启动appium服务
2,打开Inspector Session
3,配置连接信息
连接配置如下:
{ "platformName": "Android", "deviceName": "emulator-5554", "platformVersion": "6.0.1", "appPackage": "com.taobao.taobao", "appActivity": "com.taobao.tao.welcome.Welcome", "noReset": "Ture" }
字段释义:
'platformName': 操作平台
'deviceName': 设备名称
'platformVersion':系统版本号
'appPackage': apk包名
'appActivity':apk activity
'noReset': 在此会话之前不要重置应用程序状态,即非初始化。参数值:true, false
更多参数信息可参考:https://www.cnblogs.com/D666/p/9165086.html
4,连接手机
点击“Stsrt Session”,连接手机app
5,刷新页面,查看元素
总结:
uiautomatorviewer 使用方便,usb连接手机即可使用。元素层级展示清晰,但是定位不到内嵌H5页元素,不过一般内嵌H5页可以找前端要地址在浏览器调试下定位,所以推荐使用uiautomatorviewer进行定位。appium inspector初次使用相对繁琐,需配置连接属性,并且元素层级展示不够清晰,查看元素不够方便,但是可以定位到内嵌H5页元素。故:
首要推荐使用:uiautomatorviewer工具定位
特殊情况使用:appium inspector工具定位(uiautomatorviewer工具报错情况下、app页为内嵌H5页)
原文地址:https://www.cnblogs.com/mini-monkey/p/11819549.html
- [原创]在msmq3.0中使用http协议发送消息
- 微信小程序开发探索之路
- 前端周记 2017 年终总结
- asp.net mvc中的路径选择
- MVC中实现加载更多
- 在ASP.NET MVC 中获取当前URL、controller、action
- [转自Scott]ASP.NET MVC框架(第四部分): 处理表单编辑和提交场景
- MVC前台Post/Get异步获得数据时参数的取值问题
- IQueryable与foreach的困惑?
- ModalPopupExtender用法示例
- MVC中局部视图的使用
- MVC发布后项目存在于根目录中的子目录中时的css与js、图片路径问题
- ORM中的继承关系映射全解——单表继承体系、一实体一具体表、一实体一扩展表、接口映射
- View与Control间的数据交互
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- django实战(三)--删除和批量删除
- 【python实现卷积神经网络】定义训练和测试过程
- 最短路径算法java
- django实战(四)--修改数据
- Shiro框架学习笔记(三)与web集成之后进行简单的身份验证
- 【python实现卷积神经网络】卷积层Conv2D实现(带stride、padding)
- reduce学习笔记
- 【python实现卷积神经网络】开始训练
- django实战(五)--增加数据
- 实战django(一)--(你也能看懂的)注册与登录(带前端模板)
- 【python-leetcode23-多路归并】合并k个排序链表
- 实战django(二)--登录实现记住我
- org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.gong.mybatis.da
- 【python-leetcode378-二分查找】有序矩阵中的第k小元素
- 使用cookie来记录用户登录次数,为何次数不更新