appium---appium 常见API

之前有一段时间学习过appium框架,这次趁机借着已报名参加的线上课程,重新认识了一遍appium框架,总能从中收获一点意外的小惊喜

我们都知道,appium的核心其实就是一个web服务器,它提供了一套REST的接口。它收到客户端的连接、监控命令,之后在移动设备上执行这些命令,最后把执行结果放在HTTP响应中返回给客户端。基于上述原理,appium框架提供了一系列的API供调用,可用python3 -m pydoc -b命令在本地打开API文档
   appium API 整体大致可归纳为:

整体大致情况
  • 控件定位
  • find_element_by_id(self, id_)
    通过元素的id定位,返回含有该属性的元素,在android上 app上即resource id
  • find_elements_by_id(self, id_)
    通过元素的id定位,返回含有该属性的所有元素
用法
driver. find_element_by_id(“id”)
driver. find_elements_by_id(“id”)
其中一个区别需要注意:
找不到元素时,find_element_*会抛出异常,而find_elements_*不会,以下其他定位方式同理
  • find_element_by_name(self, name)
    通过元素Name定位,返回含有该属性的元素,对于android,即text属性
  • find_elements_by_name(self, name)
    通过元素Name定位(元素的名称属性text),含有该属性的所有元素
用法
driver. find_element_by_name(“name”)
driver. find_elements_by_name(“name”)
  • find_element_by_xpath(self, xpath)
    通过Xpath定位,返回含有该属性的元素
  • find_elements_by_xpath(self, xpath)
    通过Xpath定位,返回含有该属性的所有元素
用法
driver. find_element_by_name(“Xpath”)
driver. find_elements_by_name(“Xpath”)
  • find_element_by_class_name(self,class_name)
    通过元素class name属性定位,返回包含该属性的元素
  • find_elements_by_class_name(self,class_name)
    通过元素class name属性定位,返回包含该属性的所有元素
用法 
driver. find_element_by_class_name(“android.widget.LinearLayout”)
driver. find_elements_by_class_name(“android.widget.LinearLayout”)
  • find_element_by_accessibility_id(self,accessibility_id)
  • find_elements_by_accessibility_id(self,accessibility_id)
    通过accessibility id定位,在android app上相当于content-description字段,而在ios app 上accessibility identifier字段
用法
 driver.find_element_by_accessibility_id()
 该字段存在的意义主要是为了一些有残障的人士准备的,方便他们使用程序
  • find_element_by_android_uiautomator(self,uiautomator)
    根据UIautomator定位元素,仅android
  • find_elements_by_android_uiautomator(self,uiautomator)
用法
driver.find_element_by_android_uiautomator('.elements()[1].cells()[2]')
driver.find_element_by_android_uiautomator('**new UiSelector()**.text("Custom View")').click() #根据text属性定位,并点击
text属性的方法
driver.find_element_by_android_uiautomator('new UiSelector().textContains("View")').click()        #textContains
driver.find_element_by_android_uiautomator('new UiSelector().textStartsWith("Custom")').click()    #textStartsWith
driver.find_element_by_android_uiautomator('new UiSelector().textMatches("^Custom.*")').click()    #textMatches
  • find_element_by_ios_uiautomation(self,uia_string)
  • find_elements_by_ios_uiautomation(self,uia_string)
    在iOS中通过uiautomation找到一个元素
用法
driver.find_element_by_ios_uiautomation('.elements()[1] .cells()[2]')
  • 动作操作
  • click(self) 点击
用法
element.click()
  • send_keys(self, *value)
    在元素中模拟输入(开启appium自带的输入法并配置了appium输入法后,即unicodeKeyboard、resetKeyboard,可以输入中英文)
用法
element.send_keys(“测试”)
  • clear(self) 清除输入的内容
用法
element.clear()
  • swipe(self, start_x, start_y, end_x, end_y, duration=None) 滑动
    主要用于缓慢滑动,从(start_x, start_y)点滑动到(end_x, end_y)点,可以自定义duration【毫秒】滑动时间
用法
driver.swipe(100,100,100,400)
  • flick(self, start_x, start_y, end_x, end_y) 快速滑动
    主要用于快速滑动,无duration,如View切换,按住(start_x, start_y)点后快速滑动至(end_x, end_y)点
用法
driver.flick(100,100,100,400)
  • shake(self) 摇一摇 (待尝试使用)
用法
driver.shake()
  • lock(self, seconds) 锁屏,ios仅有 (待尝试使用)
    锁屏一段时间 , iOS专有
    用法 
driver.lock()
  • scroll(self, origin_el, destination_el) 滚动
    从元素origin_el滚动至元素destination_el,只有iOS可以使用
用法
 driver.scroll(el1,el2)
  • drag_and_drop(self, origin_el, destination_el) 拖放
    将元素origin_el拖到目标元素destination_el
用法
driver.drag_and_drop(el1,el2)
  • zoom(self, element=None, percent=200, steps=50) 放大
    在元素上执行放大
用法
driver.zoom(element)#默认分成50步完成,放大量为200%
  • pinch(self, element=None, percent=200, steps=50) 缩小
    在元素上执行缩小
用法
driver. pinch (element)
  • tap(self, positions, duration=None) 点击
    模拟手指点击(最多五个手指),可设置按住时间长度(单位毫秒),positions参数为单位为元组的列表,如[(x1,y1),(x2,y2)]
用法
driver.tap([(300,500)],10)
  • keyevent(self, keycode, metastate=None) 发送按键码
    发送按键码(安卓仅有),常见的有:
    • KEYCODE_HOME (按键Home) : 3
    • KEYCODE_MENU (菜单键) : 82
    • KEYCODE_BACK (返回键) : 4`
用法
driver.keyevent(4) #返回
  • 获取设备及控件相关信息
    • get_window_size (self, windowHandle='current')
      获取当前设备的宽、高
用法
width=driver.get_window_size()['width']
height=driver.get_window_size()['height']
  • location
    获取元素的左上角坐标
用法
x=element.location['x']
y=element.location['y']
  • size
    获取元素的宽、高
用法
width=element.size['width']
height=element.size['height']
  • current_activity
    获取设备当前的activity值
用法
driver.current_activity
  • context (平时暂时没用到,待研究)
    获取当前会话的当前上下文
用法
driver.context
  • app_strings(self, language=None, string_file=None)
    对于Android,获取app的strings.xml文件内容,ios待试
driver.app_strings()
  • 其他操作
  • wait_activity(self, activity, timeout, interval=1) 等待指定activity的出现
    等待指定activity的出现,返回true or false,默认是轮询间隔是1s,需要值得注意的是这里的参数是current_activity打印出来的值,即不包含包名
用法
driver.wait_activity(activity,timeout,interval)
  • quit(self) 退出
    退出脚本运行,并关闭每个相关的窗口连接
用法
driver.quit()
  • background_app(self, seconds) 后台运行
    把app放置于后台运行,设置时间seconds,单位s,相当于一段时间后重启app,而不是home将app放置后台
用法
driver.background_app(3)
  • save_screenshot(self, filename) 截图
    截图,filename参数为路径,包含文件名称
用法
driver.save_screenshot('/Screenshots/foo.png')

结语
   以上各种方法仅代表个人在日常测试中经常使用或者尝试去用的方法,实际上,appium 提供的API还有很多,以后遇到再继续说。另外,在编写自动化脚本的时候通常会对原始的方法进行一定程度的封装

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335

推荐阅读更多精彩内容