Appium初识

笛里谁知壮士心,沙头空照征人骨。这篇文章主要讲述Appium初识相关的知识,希望能为你提供帮助。
一、 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。
原理图:
Appium初识

文章图片

两个端口:
  • 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");

【Appium初识】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

    推荐阅读