一、 Appium工作原理

基本工作流程如下:

  1. Appium提供了一套web服务,Appium起一个Server(4723端口),用于与脚本client通信。
  2. server接收web driver(即appium client)标准请求,解析请求内容,调用对应的框架响应操作。
  3. Appium Server把请求转发给Android中设备上的间件Bootstrap.jar,Bootstrap接收appium的命令(4724端口),底层通过调用UiAutomator命令执行操作。
  4. 同时由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

最新文章

  1. 如何解决结果由block返回情况下的同步问题(转)
  2. Android M Permission 学习笔记
  3. iOS10新特性之CallKit开发详解:锁屏接听和来电识别
  4. eclips引入Java源代码
  5. Zooming MKMapView to fit annotation pins
  6. memcpy与memmove区别
  7. Java实现微信菜单json字符串拼接
  8. c语言学习之基础知识点介绍(一):输出语句和变量简单介绍
  9. hdu Fibonacci
  10. 使用MVC写模式jsp连接到数据库操作
  11. 如何编写入门级redis客户端
  12. 再次精读《javascript高级程序设计第3版》学习笔记(1)
  13. 【配置阿里云 I】申请配置阿里云服务器,并部署IIS和开发环境,项目上线经验
  14. WPF中反转3D列表项
  15. Bootstrap-全局样式的文本颜色和背景颜色
  16. 将hibernate框架融入到spring框架中
  17. Java动态调用类中方法
  18. 【刷题】BZOJ 3295 [Cqoi2011]动态逆序对
  19. C#.NET常见问题(FAQ)-程序不包含适合于入口点的静态“Main”方法怎么办
  20. win10中xshell的ssh链接virtualBox中的centos7

热门文章

  1. Spring Boot国际化开发实战
  2. 【leetcode】20.有效的括号
  3. 测试工具之RobotFramework关键字和快捷键
  4. .net core内部分享ppt
  5. JAVA中的糕富帅技术——反射(一)
  6. Spring Boot + Spring Cloud 实现权限管理系统 后端篇(十四):项目打包部署
  7. jQuery检查复选框是否被选
  8. 深度学习之PyTorch实战(3)——实战手写数字识别
  9. linux 双网卡桥接,实现网卡流量镜像与转发
  10. 基于xlua和mvvm的unity框架