转载:https://www.jianshu.com/p/b41d63f92b0d
下面是一些Python脚本中操作app的用法: 检查app安装情况(返回true/false), driver.is_app_installed(package_name) 安装app driver.install_app("x:/xxx.apk") 卸载app driver.remove_app(package_name) 打开通知栏 driver.open_notifications() 关闭app driver.close_app() 启动app driver.launch_app() 锁定屏幕x秒(不是很好用,锁定后屏幕无法解锁,导致无法后续,本人未找到解锁的方法) driver.lock(X) 模拟摇晃设备 driver.shake 重置应用 driver.resetApp() 检查是否存在某个activity(未找到则返回异常) driver.find_element_by_id(activity) 获取当前的activity: activity = self.driver.current_activity print(u"当前的activity是:", activity) 等待activity启动直到x秒超时,每隔y秒扫描一次 driver.wait_activity(activity, x, y) 将app置于后台运行x s(注意:测试发现置于后台数秒后变为前台时,将是重新启动app,进入首页,而不是切入后台时的界面) driver.background_app(x) 打印可用的输入法 IME_LISE = driver.available_ime_engines print(IME_LISE) 检查设备是否有输入法服务活动,返回True/False driver.is_ime_active() 激活安卓设备中的指定输入法(设备可用输入法可以从“available_ime_engines”获取)") driver.activate_ime_engine(IME_LISE[-1]) 退出键盘 driver.hide_keyboard()
Appium 客户端的操作
**锁定解锁屏幕 **
driver.lock(5)
将把当前应用放到后台 5 秒
driver.background_app(5)
收起键盘
driver.hide_keyboard()
启动 ACTIVITY
在当前应用中打开一个 activity 或者启动一个新应用并打开一个 activity 。 只能在 Android 上使用
driver.start_activity('com.example.android.apis', '.Foo')
打开下拉通知栏 只能在 Android 上使用
driver.open_notifications()
检查应用是否已经安装
driver.is_app_installed('com.example.android.apis')
安装应用
driver.install_app('path/to/my.apk')
删除应用
driver.remove_app('com.example.android.apis')
摇晃 (SHAKE)
driver.shake()
关闭应用
driver.close_app()
启动 (LAUNCH)
根据服务关键字 (desired capabilities) 启动会话 (session) 。请注意这必须在设定 autoLaunch=false 关键字时才能生效。
这不是用于启动指定的 app/activities ————你可以使用 start_activity 做到这个效果
————这是用来继续进行使用了 autoLaunch=false 关键字时的初始化 (Launch) 流程的
driver.launch_app()
应用重置(相当于卸载重装应用)
driver.reset()
列出所有的可用上下文 (CONTEXT)
context 可以理解为 可进入的窗口 。例如,对于原生应用,可用的 context 和默认 context 均为 NATIVE_APP
driver.contexts
列出当前上下文
driver.current_context
获取当前页面的源码(可以辅助元素定位)
driver.page_source
截图屏幕图片
driver.get_screenshot_as_file(r'E:imgimg1.png') # 截取整个屏幕
获取应用程序的字符串 (APP STRINGS)
driver.app_strings
给设备发送一个按键事件(KEY EVENT)(只限安卓)
driver.keyevent(176)
键盘事件的key 码
https://developer.android.com/reference/android/view/KeyEvent.html
获取当前 activity。只能在 Android 上使用
driver.current_activity
模拟用户滑动(SWIPE)
driver.swipe(start=75, starty=500, endx=75, endy=0, duration=800)
捏屏幕(PINCH) (双指往内移动来缩小屏幕)
driver.pinch(element=el)
放大 (ZOOM)屏幕 (双指往外移动来放大屏幕)
driver.zoom(element=el)
滑动 (SCROLL)到某个元素。从一个元素滚动到另一个元素
driver.scroll(originalEl, destinationEl ) # originalEl - 要滚动的元素 destinationEl - 要滚动到的元素
设置元素的值
driver.set_value(element=el,Val) # 设置 el 元素的值
推送文件到设备中去(PUSH FILE),推送文件需要转换为'base64'
data = "some data for the file"
path = "/data/local/tmp/file.txt"
driver.push_file(path, data.encode('base64'))
获取/设置 appium 的服务器设置。
current_settings = driver.get_settings()
driver.update_settings({"someSetting": True})
多个点点击(最多五个点)
driver.tap([(100, 20), (100, 60), (100,100)], 500) # list 中的元组放 5 个点,500 表示按下 500ms
#在控件上执行press 按操作。
press(WebElement el)
#在坐标为(x,y)的点执行press 操作
press(int x, int y)
#在控件el 的左上角的x 坐标偏移x 单位,y左边偏移y 单位的坐标上执行press 操作。
press(WebElement el, int x, int y)
#释放操作,代表该系列动作的一个结束标志。
release()
#以el 为目标,从另一个点移动到该目标上
moveTo(WebElement el)
#以 (x,y) 点 为 目 标 , 从 另 一 个 点 移 动 到 该 目 标 上
moveTo(intx,inty)
# 以控件el 的左上角为基准,x 轴向右移动x 单位,y 轴向下移动y 单位。以该点为目标,从另一个点移动到该点上。
moveTo(WebElement el, int x, int y)
# 在控件的中心点上敲击一下
tap(WebElement el)
#在(x,y)点轻击一下
tap(int x, int y)
#以控件el 的左上角为基准,x轴向右移动x 单位,y轴向下移动y 单位。在该点上轻击。
tap(WebElement el, int x, int y)
#代表一个空操作,等待一段时间
waitAction()
#等待ms 秒
waitAction(int ms)
#控件长按
longPress(WebElement el)
#点 长 按
longPress(intx,inty)
#偏移点长按
longPress(WebElement el, int x, int y)
#取消执行该动作
cancel()
#执行该动作
perform()