移动测试Appium之API手册
移动测试Appium之API手册
前言
本文对Appium Python Client中webdriver.py代码进行分析说明。
笔者使用python3.6版本,安装在C:Python36目录下,在C:Python36Libsite-packagesappiumwebdriverwebdriver.py找到本文要分析的目标模块文件。
源码概要
我们先看一下webdriver.py中源码概要情况,如图:
从上图来看,整个模块分为两大块:
- 导入相关的基础模块或资源
- 从webdriver.Remote继承,定义和实现了Appium Python版本的客户端驱动webdriver类
由此我们可以清楚的得出以下几个结论:
- Appium Python的webdriver客户端是依赖selenium2中的webdriver的
- Appium-Python-Client定义和实现了针对android和ios移动设备专用的方法
- 只要是selenium2中定义的webdriver方法在移动设备端可用,那么在移动测试时,可以直接用
API说明
下面我们把上述的API以一个表格的方式进行说明,以便后续大家在使用appium进行自动化测试时使用,这些API是必须熟练掌握的。
def __init__(self,
command_executor='http://127.0.0.1:4444/wd/hub',
desired_capabilities=None,
browser_profile=None, proxy=None, keep_alive=False):
# 调用父类的__init__进行初始化
super(WebDriver, self).__init__(command_executor,
desired_capabilities,
browser_profile,
proxy,
keep_alive)
# 初始化command_executor
if self.command_executor is not None:
self._addCommands()
# 初始化错误处理器
self.error_handler = MobileErrorHandler()
# 切换至默认上下文
self._switch_to = MobileSwitchTo(self)
# 初始化默认定位方式
# add new method to the `find_by_*` pantheon
By.IOS_UIAUTOMATION = MobileBy.IOS_UIAUTOMATION
By.IOS_PREDICATE = MobileBy.IOS_PREDICATE
By.IOS_CLASS_CHAIN = MobileBy.IOS_CLASS_CHAIN
By.ANDROID_UIAUTOMATOR = MobileBy.ANDROID_UIAUTOMATOR
By.ACCESSIBILITY_ID = MobileBy.ACCESSIBILITY_ID
关键函数分析
在webdirver类中,主要定义了以下函数,本文只将常用的函数进行说明,其他的请自行查阅代码:
函数:contexts 参数:无 描述:返回当前会话所有的上下文 用法:driver.contexts
函数:current_context 参数:无 描述:返回当前会话中当前的上下文 用法:driver.current_context
函数:context 参数:无 描述:返回当前会话中当前的上下文 用法:driver.context
函数:find_element_by_ios_uiautomation 参数:uia_string 描述:通过元素名称查找一个ios元素 用法:driver.find_element_by_ios_uiautomation('.elements()[1].cells()[2]')
函数:find_elements_by_ios_uiautomation 参数:uia_string 描述:通过元素名查找N个ios元素 用法:driver.find_elements_by_ios_uiautomation('.elements()[1].cells()[2]')
函数:find_element_by_ios_predicate 参数:predicate_string 描述:通过一个谓词查找一个ios元素 用法:driver.find_element_by_ios_predicate('label == "myLabel"')
函数:find_elements_by_ios_predicate 参数:predicate_string 描述:通过一个谓词查找N个ios元素 用法:driver.find_elements_by_ios_predicate('label == "myLabel"')
函数:find_element_by_ios_class_chain 参数:class_chain_string 描述:通过class chain字符串查找一个ios元素 用法:driver.find_element_by_ios_class_chain
函数:find_elements_by_ios_class_chain 参数:class_chain_string 描述:通过class chain字符串查找N个ios元素 用法:driver.find_elements_by_ios_class_chain('XCUIElementTypeWindow[2]/XCUIElementTypeAny[-2]')
函数:find_element_by_android_uiautomator 参数:uia_string 描述:通过元素名称查找一个android元素 用法:driver.find_element_by_android_uiautomator('.elements()[1].cells()[2]')
函数:find_elements_by_android_uiautomator 参数:uia_string 描述:通过元素名称查找N个android元素 用法:driver.find_elements_by_android_uiautomator('.elements()[1].cells()[2]')
函数:find_element_by_accessibility_id 参数:id 描述:通过元素accessibility id查找一个元素 用法:driver.find_element_by_accessibility_id()
函数:find_elements_by_accessibility_id 参数:id 描述:通过元素accessibility id查找N个元素 用法:driver.find_elements_by_accessibility_id()
函数:create_web_element 参数:element_id 描述:使用指定的element id创建一个web元素
函数:scroll 参数:origin_el, destination_el 描述:从一个元素位置滚动到另一个元素位置 用法:driver.scroll(el1, el2)
函数:drag_and_drop 参数:origin_el, destination_el 描述:将一个元素从一个位置拖曳到另外一个位置 用法:driver.drag_and_drop(origin_el, destination_el)
函数:tap 参数:positions, duration 描述:点击屏幕指定位置,并在该位置停留duration指定的时长 用法:driver.tap([(100, 20), (100, 60), (100, 100)], 500)
函数:swipe 参数:start_x, start_y, end_x, end_y, duration=None 描述:从一个位置到另外一个位置滑动屏幕 用法:driver.swipe(100, 100, 100, 400)
函数:flick 参数:start_x, start_y, end_x, end_y 描述:从一个位置到另外一个位置快速滑动 用法:driver.flick(100, 100, 100, 400)
函数:pinch 参数:element=None, percent=200, steps=50 描述:捏 用法:driver.pinch(element)
函数:zoom 参数:element=None, percent=200, steps=50 描述:缩放屏幕 用法:driver.zoom(element)
函数:app_strings 参数:language=None, string_file=None 描述:获取应用字符串
函数:reset 参数:无 描述:重置设备当前的app 用法:driver.reset()
函数:hide_keyboard 参数:key_name=None, key=None, strategy=None 描述:隐藏键盘
函数:current_activity 参数:无 描述:获取设备当前app的activity 用法:driver.current_activity
函数:current_package 参数:无 描述:获取设备当前运行app的package 用法:driver.current_package
函数:set_value 参数:element, value 描述:给指定元素设置值 用法:driver.set_value(element, value)
函数:pull_file 参数:path 描述:从设备拉取文件 用法:driver.pull_file(path)
函数:push_file 参数:path, base64data 描述:以Base64编码方式向设备推送文件 用法:driver.push_file(path, base64data)
函数:background_app 参数:seconds 描述:将指定的app放在后端运行一段时间 用法:driver.background_app(seconds)
函数:is_app_installed 参数:bundle_id 描述:根据bundle id判断app是否已经安装 用法:driver.is_app_installed(bundle_id)
函数:install_app 参数:app_path 描述:安装app到设备 用法:driver.install_app(app_path)
函数:remove_app 参数:app_id 描述:卸载指定的app 用法:driver.remove_app(app_id)
函数:launch_app 参数:无 描述:启动desired capabilities指定的app 用法:driver.launch_app
函数:close_app 参数:无 描述:停止desired capabilities指定的app 用法:driver.close_app()
函数:start_activity 参数:app_package, app_activity, **opts 描述:启动指定参数的app, android专用
函数:lock 参数:seconds 描述:锁屏一段时间,ios专用 用法:driver.lock(5)
函数:shake 参数:无 描述:摇动设备 用法:driver.shake()
函数:open_notifications 参数:无 描述:打开通知,android专用,要求API level 18及以上 用法:driver.open_notifications()
函数:get_settings 参数:无 描述:获取当前appium服务端的设置 用法:driver.get_settings
函数:update_settings 参数:settings 描述:重设当前会话的设置,请参见 https://github.com/appium/appium/blob/master/docs/en/advanced-concepts/settings.md
函数:device_time 参数:无 描述:返回设备的日期时间 用法: driver.device_time
- 【Java学习笔记之十一】Java中常用的8大排序算法详解总结
- 浅谈zip格式处理逻辑漏洞
- C/C++中peek函数的原理及应用
- 洛谷 P1200 [USACO1.1]你的飞碟在这儿Your Ride Is He…【字符串+模拟】
- 洛谷 P1055 ISBN号码【字符串+模拟】
- 【Java学习笔记之十二】Java8增强的工具类:Arrays的用法整理总结
- 利用insert,update和delete注入获取数据
- 【机器学习笔记之二】决策树的python实现
- 【Java学习笔记之十三】初探Java面向对象的过程及代码实现
- 洛谷 P1308 统计单词数【字符串+模拟】
- 【Java学习笔记之十四】Java中this用法小节
- Codeforces 839E Mother of Dragons【__builtin_popcount()的使用】
- 【Java学习笔记之十五】Java中的static关键字解析
- Codeforces 839D Winter is here【数学:容斥原理】
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android 媒体开发之MediaPlayer状态机接口方法实例解析
- Android读取资源文件的方法
- Android 基于IntentService的文件下载的示例代码
- Android开发之底图局部加载移动的方法示例
- Ubuntu18.04下解决Qt出现qt.qpa.plugin:Could not load the Qt platform plugin “xcb“问题
- ExpandableListView实现手风琴效果
- 组复制性能 | 全方位认识 MySQL 8.0 Group Replication
- Android 中View.onDraw(Canvas canvas)的使用方法
- Android API编程之Assets文件操作示例
- Android自制精彩弹幕效果
- RollViewPager无限轮播使用方法详解
- ubuntu16.04 升级内核的方法步骤
- Android 列表倒计时的实现的示例代码(CountDownTimer)
- Android 控件设置阴影效果
- 解决VScode配置远程调试Linux程序的问题