python appium api pc_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还有很多,以后遇到再继续说。另外,在编写自动化脚本的时候通常会对原始的方法进行一定程度的封装

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值