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
    作者:AmyZYX  
出处:http://www.cnblogs.com/amyzhu/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
出处:http://www.cnblogs.com/amyzhu/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号