appium的客户端(WebDriver)提供的接口按作用分为:
1、系统操作
2、获取和操作控件信息
3、控件查找
4、手势操作
1、系统操作 (driver. api)
❤ driver.set_network_connection(self, bundle_id)------------- 设置网络。
❤ 》is_app_install(APP_PACKAGE)------------- 判断应用程序是否安装
//print(driver.is_app_installed('cn.goapk.market')) 返回结果为True(已安装) / False(未安装)
❤ 》driver.install_app(APK_PATH)------------- 将app_path路径的应用安装到实际上,此处的app_path指PC端path,需要包含目录和文件名。
driver.installApp("path/to/my.apk");
driver.installApp("D:\\android\\apk\\ContactManager.apk");
❤ 》driver.remove_app(APP_PACKAGE) ----------------移除app
❤ 》重启app(先关闭再启动) 不需要入参
driver.closeApp(); # 关闭当前操作的app,不会关闭驱动对象,相当于按home键将应用置于后台,可以通过launchApp()再次启动。
driver.launchApp(); #启动app,重新启动应用也是一个测试点,该方法需要配合closeApp()使用的。
❤ resetApp() --------------重置当前被测程序到出始化状态。该方法不需要入参。
❤ driver.quit() ------------- # 关闭驱动对象,同时关闭所有关联的app (用例的最后使用)
❤ current_activity(self)------------- 获取当前正在显示的Activity信息
❤ driver.start_activity(appPackage,appActivity) ------------------脚本内启动其他app,启动后需要数据线重新连接,不然报错其中一个进程在运行
//driver.start_activity('com.android.mms', '.ui.ConversationList')
❤ shake(self)------------- 模拟晃动手机事件
❤ background_app(self, seconds)------------- 将被测应用程序放到后台运行一段事件,seconds为持续的秒数
❤ get_screenshot_as_file(self, filename)------------- 将手机屏幕截图并保存电脑上的文件,filename为文件的路径和名称。
❤ get_window_size(self)------------- 获取手机的分辨率。一般配合swipe使用。driver.get_window_size()[‘width’];driver.get_window_size()[‘height’]
❤ print(driver.page_source)------------- 返回当前页面的文档结构,判断特定的元素是否存在
❤ 》pull_file(self, path)------------- 拉取手机上的一个文件,并以Base64格式编码返回文件数据,path为手机上的文件路径
// import base64
// data = driver.pull_file('/sdcard/test.txt') # 返回数据为base64编码
// print(str(base64.b64decode(data), 'utf-8')) # base64解码
❤ 》push_file (self, path, base64data)---------将一个Base64格式编码的数据推送到手机,path为手机上的文件路径,base64data为要推送的数据
// import base64
// data = str(base64.b64encode('推送内容'.encode('utf-8')), 'utf-8')
// driver.push_file('/sdcard/推送文件名称.txt', data)
2、获取控件信息 、操作控件( driver. api)
❤ 》 text ------------- element.text 获取控件的文本信息
if driver.find_element_by_id('com.iflytek.smartsq:id/home_menu_home_txt').text == '首页':
print('判断结果:当前为首页')
else:
print('判断结果:当前非首页')
❤ send_keys(self,*value) -------------模拟键盘输入到控件中
❤ is_selected(self) -------------判断控件是否被选中, 如选中返回true
❤ 》 click(self)------------- element.click 点击控件
❤ clear(self) ------------- element.clear 清空文本控件的内容
❤ get_attribute(self,name) -------------element.get_attribute(“enabled”) 获取控件的enabled属性。相当于is_enabled()
❤ is_enabled(self) -------------判断控件是否可用,如可用返回true
❤ is_displayed(self) ------------- 判断控件是否显示,如显示返回true
3、控件查找 ( driver. api) ,然后.click等操作
WebDriver支持ID、Xpath、Class Name、Accessbility id和UIAutomator来查找控件
》通过id定位元素
语法
find_element_by_id(self,id_)
find_elements_by_id(self,id_)(返回list)
通过控件的resource id查找
举例
driver.find_element_by_id("com.thinkive.future.dev.standard:id/iv_quotation_futures_search").click() --如果需要点击操作的话。
通过xpath定位元素
语法
find_element_by_xpath(self,xpath)
find_elements_by_xpath(self,xpath)(返回list)
通过xpath查找控件
举例
driver.find_element_by_xpath(@resource_id, "com.thinkive.future.dev.standard:id/iv_quotation_futures_search"
通过class name定位元素
语法
find_element_by_class_name(self,name)
find_elements_by_class_name(self,name)(返回list)
在Native App测试中,参数Nname表示控件的类型,如android.view.Text
在网页测试中,参数Name指代网页element的属性类名。如<div class='test-demo'>...</div.>
举例
driver.find_element_by_class("android.view.Text")
通过Text定位元素
语法
find_element_by_name(self,name)
find_elements_by_name(self,name)(返回list)
name表示text,在appium 1.5.0中废弃了该语法。但是WebDriver实际上是支持的
举例
driver.find_element_by_class("登录")
通过Content Description定位元素
语法
find_element_by_accessibility_id(self,id)
find_elements_by_accessibility_id(self,id)(返回list)
accessibility_id指Native App控件的Content Description
举例
driver.find_element_by_accessibility_id("请登录")
通过UIAutomator定位元素
语法
find_element_by_android_uiautomator(self, uia_string)
uia_string通过java语言编写,
举例
self.device.find_element_by_android_uiautomator('text(\"列表\")')
driver.find_element_by_android_uiautomator('new UiSelector().text("18513199586")').clear()
4、手势操作 ( driver. api)
滑动操作
语法
swipe(self,start_x, start_y, end_x, end_y, duration=None)
从A点移动到B点
duration为滑动动作执行事件,单位为毫秒
APP的坐标,左上角值最小(0,0),右下角值最大
举例
点击屏幕
语法
tap(self,positions,duration=None)
点击屏幕上的位置,最多支持五个手指同时点击
duration为滑动动作执行事件,单位为毫秒。如果该参数不提供,则认为是点击操作;如果该参数指定,则认为是长按
positions是一个列表,每一个列表项是一个二元组,值分别是屏幕上坐标的X和Y
举例
driver.tap([(537,1856)], 500)
driver.tap([(100,20),(100,60),(100,100)],500)
缩小操作
语法
flick(self,element=None, precent=200, step=50)
在某控件上执行缩小操作,默认缩放比例为200%
step表示缩小动作分多少步完成,默认50
举例
driver.flick(element)
放大操作
语法
zoom(self,element=None, precent=200, step=50)
在某控件上执行缩小操作,默认缩放比例为200%
step表示缩小动作分多少步完成,默认50
举例
driver.zoom(element)
滚动操作
语法
scroll(self, origin_el, destination_el)
从origin_el控件滚动到destination_el控件
参数必须是控件,而不是控件信息
举例
拖曳操作
语法
drag_and_drop(self, origin_el, destination_el)
把origin_el控件拖曳到destination_el的位置
举例
close_app(self)如果Desired Capabilities指定的应用程序正在运行,则关闭该程序