首页 > 其他分享 >appium元素定位工具

appium元素定位工具

时间:2022-11-08 18:49:05浏览次数:40  
标签:定位 appium 元素 Appium weditor 点击 id

appium做移动端自动化测试,定位元素可用的工具有2种:

  • uiautomatorviewer
  • Appium Inspector
  • weditor

前置条件:已连接真机或手机模拟器,adb devices有显示连接的手机列表。

1. uiautomatorviewer  

  uiautomatorviewer 是android-sdk自带的一个元素定位工具,目录 E:\AutoTools\android-sdk-windows\tools 。 双击启动 uiautomatorviewer.bat

界面一共有四个区域: 

1)上方区域,4个按钮从左至右功能分别是:

  • 打开已经保存的布局,
  • 获取详细布局,     --把全部布局呈现出来
  • 获取简洁布局,     --只呈现有用的控件布局
  • 保存布局。       --点击保存,将存储两个文件,一个是图片文件,一个是.uix文件(XML布局结构) 

2)截图区(左下),显示当前手机屏幕显示的布局图片 

3)布局区(右上),用XML树的形式,显示界面的控件布局 

4)控件属性区(右下),当爱布局区点击某一控件时,将在这里显示控件的属性

 

元素定位:

鼠标点击要定位的元素,右下角区域可看到元素对应的属性。

text:              WLAN传书

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

 

2. Appium Inspector

优点:可直接查看xpath路径;可以检测元素id等是否唯一性(点击搜索按钮);可在页面点击直接跳转,不用先真机操作再刷新页面;

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

1.  启动 Appium Server(Appium Server GUI应用),点击startService启动服务。

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。)
  • 参数参考:http://appium.io/docs/en/writing-running-appium/caps/index.html

设置完成后,点击”Start Session ”即可自动启动已连接的android虚拟机或真机的app,并能在Inspector工具上显示app界面,如下图:

首次启动会安装这些应用: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表达式也可以查找到元素并进行点击)

   

3. weditor

  weditor是基于浏览器技术的UI查看器,直接在浏览器打开。

  缺点:不能和appium同时打开(可以跟airtest一块使用)

 1)安装weditor库(weditor是python的第三方库):

  pip install -U weditor  # 该命令会安装uiautomator2和Facebook-wda两个库,分别支持Android和ios的app

  如果安装报错,可指定版本:pip install weditor==0.6.4

   安装完成后查看版本: pip list | findstr weditor

2)第一次连接时需要在手机上安装工具

  python -m uiautomator2 init  # 执行该命令会自动向手机安装 ATX 和 com.github.uiautomator.test 这2个工具(注意看手机上点击安装)

3)启动weditor服务

  python -m weditor  # 此时会在浏览器中自动访问 http://localhost:17310/ 可看到设备的当前停留页面

 重点提醒:选择设备后方的输入框中一定要输入连接电脑的设备名称(adb devices显示的设备号),不然会一直报错 Local server not started, start with $ python -m 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()

 

标签:定位,appium,元素,Appium,weditor,点击,id
From: https://www.cnblogs.com/rider-zhou/p/16797724.html

相关文章

  • 10 个CSS实现元素居中的方法汇总
    英文|https://javascript.plainenglish.io/10-css-tricks-you-should-know-for-centering-elements-61092d35b659翻译|杨小爱在前端开发工程师的日常生活中,使用CSS使......
  • 203. 移除链表元素
    203.移除链表元素给你一个链表的头节点head和一个整数val,请你删除链表中所有满足Node.val==val的节点,并返回新的头节点。示例1:输入:head=[1,2,6,3,4,5,......
  • 元素等待之---隐式等待
    元素等待之---隐式等待fromseleniumimportwebdriver#导入找不到元素抛出异常说所需要的类fromselenium.common.exceptionsimportNoSuchElementExceptionfromtim......
  • [Appium] driver失效,报错:Session Identified by is unknown
    selenium.common.exceptions.InvalidSessionIdException:Message:Thesessionidentifiedby25030467-b3ad-4f74-a6ce-10f8ffab97c3isnotknownStacktrace:io.appium.......
  • 为什么我不推荐使用for..in迭代数组元素
    for-in语句的目的是枚举对象属性。该语句将在原型链中上升,还会枚举继承的属性,这有时是不希望的。此外,规范不保证迭代的顺序,这意味着如果您想“迭代”一个数组对象,使用此语句......
  • 基于IMU和GPS数据融合的自车定位 (卡尔曼)
    如果想深入了解IMU和GPS融合原理,可以看看这篇文章: 重读经典《Quaternionkinematicsfortheerror-stateKalmanfilter》,这也是Coursera课程关于这一项目的参考文献。......
  • HTML-head元素
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><!--下面这些标签可用在head部分:<base>,<link>,<meta>,<script>,<style>,......
  • Javascript(笔记24) - DOM基本操作 - 遍历元素节点树的方法
    Javascript(笔记24)-DOM基本操作-遍历元素节点树的方法上一节讨论了遍历节点,这一节讨论遍历元素节点,毕竟元素节点才是我们操作最为频繁的。使用方法跟遍历节点的非常相......
  • flex布局 元素被挤压(点文一排,点被挤压)
    flex布局元素被挤压(点文一排,点被挤压)原因是flex布局,元素默认的flex-shrink为1,即空间不够时,按比例缩放。另一个值是0即不缩放  html代码<divclassName='r......
  • 野花--利用伪元素画线
    有的时候我们可能希望的border线要小于元素本身,就无法使用border来画线,我们可以直接利用伪元素画细线li{&::before{position:abso......