appium手机APP自动化定位元素
目录
1 什么事手机app自动化,作用和特点
2 自动化原理:
3 定位元素
根据ID
根据CLASS NAME
根据ACCESSIBILITY ID
Xpath
1 什么事手机app自动化,作用和特点
Appium
是一个移动 App (手机应用)自动化工具。
手机APP 自动化有什么用?
自动化完成一些重复性的任务(比如微信客服机器人)
爬虫(就是通过手机自动化爬取信息。)
自动化测试(很多企业里面有这样的需求)
Appium
自动化方案的特点:
开源免费
支持多个平台 IOS (苹果)、安卓 App 的自动化都支持。
支持多种类型的自动化
支持 苹果、安卓 应用 原生界面 的自动化
支持 应用 内嵌 WebView 的自动化
支持 手机浏览器 中的 web网站自动化
支持 flutter 应用的自动化
支持多种编程语言
像 Selenium 一样, 可以用多种编程语言 调用它 开发自动化程序。
2 自动化原理:
我们先来看一下Appium自动化的原理图:
和Selenium 原理图很像。因为 Appium自动化架构就是借鉴的Selenium。
这幅图, 包含了 3个主体部分 : 自动化程序、Appium Server、移动设备
自动化程序
自动化程序是由我们来开发的,实现具体的 手机自动化 功能。
要发出具体的指令控制手机,也需要使用 客户端库。
和Selenium一样,Appium 组织 也提供了多种编程语言的客户端库,包括 java,python,js, ruby等,方便不同编程语言的开发者使用。
我们需要安装好客户端库,调用这些库,就可以发出自动化指令给手机。
Appium Server
Appium Server 是 Appium 组织开发的程序,它负责管理手机自动化环境,并且转发 自动化程序的控制指令 给 手机,并且转发 手机给 自动化程序的响应消息。
手机设备
我们这里说的手机设备,其实不仅仅是手机,包括所有 苹果、安卓的移动设备,比如:手机、平板、智能手表等,简称: 手机
当然手机上也包含了 我们要自动化控制的 手机应用APP。
手机设备为什么能 接收并且处理自动化指令呢?
因为,Appium Server 会在手机上 安装一个 自动化代理程序, 代理程序会等待自动化指令,并且执行自动化指令
比如:要模拟用户点击界面按钮,Appium 自动化系统的流程是这样的:
自动化程序 调用客户端库相应的函数, 发送
点击元素
的指令(封装在HTTP消息里)给 Appium ServerAppium Server 再转发这个指令给 手机上的自动化代理
手机上的自动化代理 接收到 指令后,调用手机平台的自动化库,执行点击操作,返回点击成功的结果给 Appium Server
Appium Server 转发给 自动化程序
自动化程序了解到本操作成功后,继续后面的自动化流程
其中,自动化代理控制,使用的什么库来实现自动化的呢?
如果测试的是苹果手机, 用的是苹果的 XCUITest 框架 (IOS9.3版本以后)
如果测试的是安卓手机,用的是安卓的 UIAutomator 框架 (Android4.2以后)
这些自动化框架提供了在手机设备上运行的库,可以让程序调用这些库,像人一样自动化操控设备和APP,比如:点击、滑动,模拟各种按键消息等
3 定位元素
Appium是基于Selenium的,所以 和 Selenium 代码 定位元素的 基本规则相同:
find_element_by_XXX
方法,返回符合条件的第一个元素,找不到抛出异常find_elements_by_XXX
方法,返回符合条件的所有元素的列表,找不到返回空列表通过
WebDriver
对象调用这样的方法,查找范围是整个界面通过
WebElement
对象调用这样的方法,查找范围是该节点的子节点
根据ID
在Selenium Web自动化教程里,我们说过,如果能根据ID选择定位元素,最好根据ID,因为通常来说ID是唯一的,所以根据ID选择 效率高。
在安卓应用自动化的时候,同样可以根据ID查找。
但是这个ID ,是安卓应用元素的 resource-id
属性
使用如下代码
from appium.webdriver.common.appiumby import AppiumBydriver.find_element(AppiumBy.ID, 'expand_search')
根据CLASS NAME
安卓界面元素的 class属性 其实就是根据元素的类型,类似web里面的tagname, 所以通常不是唯一的。
通常,我们根据class 属性来选择元素, 是要选择多个而不是一个。
当然如果你确定 要查找的 界面元素的类型 在当前界面中只有一个,就可以根据class 来唯一选择。
使用如下代码
from appium.webdriver.common.appiumby import AppiumBydriver.find_element(AppiumBy.CLASS_NAME, 'android.widget.TextView')
根据ACCESSIBILITY ID
元素的 content-desc 属性是用来描述该元素的作用的。
如果要查询的界面元素有 content-desc属性,我们可以通过它来定位选择元素。
使用如下代码
from appium.webdriver.common.appiumby import AppiumBydriver.find_element(AppiumBy.ACCESSIBILITY_ID, '找人')
Xpath
Appium 也支持通过 Xpath选择元素。
但是其可靠性和性能不如 Selenium Web自动化。因为Web自动化对Xpath的支持是由浏览器实现的,而Appium Xpath的支持是 Appium Server实现的。
毕竟,浏览器产品的成熟度比Appium要高很多。
当然,Xpath是标准语法,所以这里表达式的语法规则和 以前学习的Selenium里面Xpath的语法是一样的,比如
from appium.webdriver.common.appiumby import AppiumBydriver.find_element(AppiumBy.XPATH, '//ele1/ele2[@attr="value"]')
注意:
selenium自动化中, xpath表达式中每个节点名是html的tagname。
但是在appium中, xpath表达式中 每个节点名 是元素的class属性值。
比如:要选择所有的文本节点,就使用如下代码
driver.find_element(AppiumBy.XPATH, '//android.widget.TextView')
appium手机APP自动化定位元素相关推荐
- python+appium手机APP自动化基础篇3-找元素定位(anroid)
1. 定位工具 前言,在环境搭建已经安装anroid-sdk,里面就自带有元素定位的工具.找到uiautomatorviewer.bat文件,位置在D:\android-sdk-windows\too ...
- Appium 手机 App 自动化代码说明_启动微信app
#coding=utf-8 from appium import webdriver desired_caps = { 'platformName': 'Android', 'platformVers ...
- 手机APP自动化 Appium教程
Appium原理与安装 Appium 是一个移动 App (手机应用)自动化工具. 手机APP 自动化有什么用? 自动化完成一些重复性的任务 比如微信客服机器人 爬虫 自动化测试 Appium 自动化 ...
- Appium+Python appium启动夜神模拟器定位元素(三)
① 目的 使用appium启动夜神模拟器定位元素 ② 环境 Python+Appium+Android模拟器 ③配置启动项 1.platformName:Android //设备型号 2.platfo ...
- Appium移动端自动化测试之元素定位(三)
1.name定位 driver.find_element_by_id('com.shanjian.originaldesign:id/edit_Tel').send_keys('15817252876 ...
- 手机APP自动化之uiautomator2 +python3 UI自动化
题记: 之前一直用APPium直到用安卓9.0 发现uiautomatorviewer不支持安卓 9.0,点击截屏按钮 一直报错,百度很久解决方法都不可以,偶然间看见有人推荐:uiautomator ...
- Python+Appium自动化测试-通过坐标定位元素
在使用appium做app自动化测试的过程中,可能会遇到元素的属性值不是唯一的情况,导致不能通过find_element_bi_xx()方法定位元素,这个时候我们就可以通过坐标来定位元素. 1,通过绝 ...
- 手机app自动化操作工具airtest之入门篇
airtest自动化测试工具 airtest是网易开发的一款自动化测试工具,主要用于游戏自动化开发和测试,目前支持对windows应用.手机app等,同时支持录制操作,甚至达到无需代码编写即可完成测试 ...
- APP自动化测试定位元素位置
一,ID定位方法 如下图所示,使用uiautomator2 工具定位7的位置,只需要获取此位置的resource_id 信息即可 如果有resource-id属性就取resource-id值,有id属 ...
最新文章
- VS2017中C++无法将参数1从const char [8] 转换为char[]
- 简单linux蠕虫,清除Linux系统上的蠕虫程序Ramen
- 2016年第七届蓝桥杯 - 国赛 - C/C++大学B组 - D. 机器人塔
- 登录过gnome主题后无法再登录xfce主题
- mysql版本 hibernate_Mysql 不同版本 说明
- python基础入门(5)之运算符
- 机器学习中基本线性代数
- Video和Audio标签的使用
- Egret 之 消除游戏 开发 PART 6 Egret elimination game development PART 6
- XP系统下如何把FAT32转换成NTFS格式的?
- 田忌赛马博弈矩阵分析
- [含lw+源码等]微信小程序在线考试管理系统+后台管理系统[包运行成功]
- 计算机count是什么函数,2010年职称计算机考试:计数函数COUNT
- 波特率dlm_第6讲 串行通信16550.ppt
- python 拼多多_python 拼多多_拼多多2018校招编程题汇总 Python实现
- HP Cloud Recovery Tool
- 前程无忧简历泄露事件再被曝光,公司理念是“不赚钱的东西不做”
- 思博伦Spirent TestCenter _如何使用抓包过滤功能抓取特定的帧_双极未来
- Ubuntu 14.04 smba服务器的配置——亲测方便可用
- G1垃圾回收器学习笔记