Appium初识
一、 Appium工作原理
基本工作流程如下:
- Appium提供了一套web服务,Appium起一个Server(4723端口),用于与脚本client通信。
- server接收web driver(即appium client)标准请求,解析请求内容,调用对应的框架响应操作。
- Appium Server把请求转发给Android中设备上的间件Bootstrap.jar,Bootstrap接收appium的命令(4724端口),底层通过调用UiAutomator命令执行操作。
- 同时由Bootstrap将执行结果返回给appium server。
原理图:

两个端口:
- 4723: appium server与自动化脚本client的通信
- 4724: Appium server于手机设备通信
二、Appium优点
- 跨平台
- 跨应用
- 跨架构:支持Native和Webview两种架构
- 跨语言:不限制脚本编写语言
- 其他:不依赖源码、不需要重新签名、不限制测试框架和平台(eg:TESTNG,JTEST)
三、用例编写流程
1、启动appium server;
2、init driver;
DesiredCapabilities设置:app、device、platformName、deviceName、udid、超时等
3、用例执行:模拟用户进行UI操作;
4、测试完成:
1. 卸载app:removeapp
2. driver退出:driver.quit()
四、常用API之元素定位
Appium元素定位方式依赖于Selenium,因此,Selenium的定位方式,Appium都支持,也支持Android和iOS原生的定位方式。
元素定位方法:
| 方法 | 含义 |
|---|---|
| findElementById | 元素的ID属性 |
| findElementsByName | 元素的name属性 |
| findElementByTagName | 元素的标签名 |
| findElementsByClassName | 元素的class属性 |
| findElementByCssSelector | Selenium最强大的定位方法,比xpath速度快,但比xpath难上手 |
| findElementByXPath | 什么是Xpath |
| findElementByCssSelector | Selenium 最强大的定位方法,比 xpath 速度快,但比 xpath 难上手 |
| findElementsByLinkText | 链接元素的全部显示文字 |
| findElementByPartialLinkText | 链接元素的部分显示文字 |
| AccessibilityId | Appium中用于替代name定位方式,Android-主要使用元素的content-desc属性;iOS-使用元素的label或name |
| findElementByAndroidUIAutomator(new UiSelector().text(text)) | 通过文本查找 |
Android常用方法:id、className、xpath、AndroidUIAutomator、AccessibilityId.
(一)AndroidUIAutomator支持的元素定位属性
index(int index)
text(String text)
resourceId(String id)
className(String className)
packageName(String packageName)
description(String desc)
checked(boolean val)
clickable(boolean val)
enabled(boolean val)
longClickable(boolean val)
password(boolean val)
selected(boolean val)
instance(int val)
特点:元素的所有属性都可以用做定位,功能非常强大且速度很快。
(二)xpath元素定位
1.使用绝对路径
driver.findElementByXPath("className/className/className/className");
2.使用相对路径
driver.findElementByXPath("//className");
3.使用元素的索引
driver.findElementByXPath("//className[index]");
4.通过元素的属性定位
driver.findElementByXPath("//className[@label='XXX'][@isVisible='1']");
五、常用API之driver支持操作
//元素操作
webElement.click();
webElement.sendkeys();
//文件传输
driver.pushFile(remotePath, file);
driver.pullFile(remotePath);
//启动activity
driver.startActivity(activity);
//APP操作
driver.installApp(appPath);
driver.resetApp();
driver.launchApp();
driver.closeApp();
driver.removeApp(bundleId);
六、常用API之断言
Assert.assertTrue(boolean);
Assert.assertFalse(boolean);
Assert.assertSame(expected, actual);
Assert.assertEquals(expected, actual);
AndroidDriverWait:等待XXX元素出现
原理参考:https://blog.csdn.net/jffhy2017/article/details/69220719
Appium初识的更多相关文章
- pyadb关于python操作adb的资料
3.最后adb命令由于是android的原生操作命令,支持实现的功能非常多.这里举几个pyapp里实现的功能例子:获取,修改手机当前使用的输入法(adb shell ime list),获取当前手机界 ...
- 篇2 安卓app自动化测试-初识python调用appium
篇2 安卓app自动化测试-初识python调用appium --lamecho辣么丑 1.1概要 大家好!我是lamecho(辣么丑),上一篇也是<安卓app自动化测 ...
- Appium+python自动化(八)- 初识琵琶女Appium(千呼万唤始出来,犹抱琵琶半遮面)- 下(超详解)
简介 通过上一篇宏哥给各位小伙伴们的引荐,大家移动对这位美女有了深刻的认识,而且她那高超的技艺和婀娜的身姿久久地浮现在你的脑海里,是不是这样呢???不要害羞直接告诉宏哥:是,就对了.宏哥要的就是这个 ...
- Appium+python自动化(七)- 初识琵琶女Appium(千呼万唤始出来,犹抱琵琶半遮面)- 上(超详解)
简介 “千呼万唤始出来,犹抱琵琶半遮面”,经过前边的各项准备工作,终于才把appium这位琵琶女请出来.那么下边就由宏哥给各位看官.小伙伴们和童鞋们来引荐这位美女(帅哥).这一篇主要是对前边的内容做一 ...
- appium封装显示等待Wait类和ExpectedCondition接口
此文已由作者夏鹏授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 使用WebDriver做Web自动化的时候,org.openqa.selenium.support.ui中提供 ...
- Appium移动自动化框架
引言:Appium 是一个移动端自动化测试开源工具,可以针对不同的平台用一套API来编写测试用例.本文对Appium自动化测试框架的功能进行了概括. 本文选自<软件自动化测试开发>. Ap ...
- appium+robotframework环境搭建
appium+robotframework环境搭建步骤(Windows系统的appium自动化测试,只适用于测试安卓机:ios机需要在mac搭建appium环境后测试) 搭建步骤,共分为3部分: 一. ...
- Android动画效果之初识Property Animation(属性动画)
前言: 前面两篇介绍了Android的Tween Animation(补间动画) Android动画效果之Tween Animation(补间动画).Frame Animation(逐帧动画)Andr ...
- 初识Hadoop
第一部分: 初识Hadoop 一. 谁说大象不能跳舞 业务数据越来越多,用关系型数据库来存储和处理数据越来越感觉吃力,一个查询或者一个导出,要执行很长 ...
随机推荐
- LeetCode:145_Binary Tree Postorder Traversal | 二叉树后序遍历 | Hard
题目:Binary Tree Postorder Traversal 二叉树的后序遍历,题目要求是采用非递归的方式,这个在上数据结构的课时已经很清楚了,二叉树的非递归遍历不管采用何种方式,都需要用到栈 ...
- Python模拟微博登陆,亲测有效
今天想做一个微博爬个人页面的工具,满足一些不可告人的秘密.那么首先就要做那件必做之事!模拟登陆-- 代码是参考了:https://www.douban.com/note/201767245/ 我对代码 ...
- Spring Boot + Spring Cloud 构建微服务系统(六):熔断监控集群(Turbine)
Spring Cloud Turbine 上一章我们集成了Hystrix Dashboard,使用Hystrix Dashboard可以看到单个应用内的服务信息,显然这是不够的,我们还需要一个工具能让 ...
- hashCode()方法和equal()方法的区别
本文参考地址:http://www.cnblogs.com/zgq0/p/9000801.html hashCode()方法和equal()方法的作用其实一样,在Java里都是用来对比两个对象是否相等 ...
- Mysql的变量一览
Server System Variables(系统变量) MySQL系统变量(system variables)是指MySQL实例的各种系统变量,实际上是一些系统参数,用于初始化或设定数据库对系统资 ...
- spring-boot-2.0.3源码篇 - 国际化
前言 针对spring boot,网上已有很多优质的系列教程,我就不再班门弄斧了(实际上是担心没别人写的好,哈哈哈!).但是还是想蹭蹭spring boot的热度,即使不考虑微服务,spring bo ...
- Struts2学习(五)———— s标签和国际化
一.s标签 在struts-2.3.15.1/docs/WW/docs/tag-reference.html下,就有着struts2所有标签的参考文献,只能看看其中比较常用的标签.其他的以后遇到了在看 ...
- .Net Core中使用Quartz.Net
一.介绍 Quartz.Net是根据Java的Quartz用C#改写而来,最新的版本是3.0.6,源码在https://github.com/quartznet/quartznet.主要作用是做一些周 ...
- SPI Flash(W25Q16DV) 基本操作
读取厂家\设备 ID 发送 90H 指令,再发送 00h 的地址,然后接收即可. 代码如下: void SPIFlashReadID(int *pMID, int *pDID) { SPIFlash_ ...
- IDEA操作技巧与Tomcat集成
一.Tomcat Tomcat是基于Java的一个开放源代码.运行servlet和JSP Web应用的Web应用软件容器.Tomcat是Apache软件基金会(Apache Software Foun ...