『与善仁』Appium基础 — 16、APPium基础操作API
2021-12-04 11:24
791 查看
[toc]
1、前置代码
一个脚本中必须要编写的内容,写在前置代码中:
# server 启动参数 desired_caps = {} desired_caps['platformName'] = 'Android' desired_caps['platformVersion'] = '5.1' desired_caps['deviceName'] = '192.168.56.101:5555' desired_caps['appPackage'] = 'com.android.settings' desired_caps['appActivity'] = '.Settings' # 声明driver对象 driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
2、安装和卸载APP
(1)把电脑中的APK安装包,安装到手机上。
安装方法:
driver.install_app(app_path) 参数: app_path:脚本机器中APK文件路径
(2)卸载手机上已安装的APP。
卸载方法:
driver.remove_app(app_id) 参数: app_id:需要卸载的app包名
(3)演示练习
# 1.导入appium import time from appium import webdriver # 2.创建Desired capabilities对象,添加启动参数 desired_caps = { "platformName": "Android", # 系统名称 "platformVersion": "7.1.2", # 系统版本 "deviceName": "127.0.0.1:21503", # 设备名称 "appPackage": "com.microvirt.launcher2", # APP包名 "appActivity": "com.microvirt.launcher.Launcher" # APP启动名 } # 3.启动APP # 声明手机驱动对象(实例化webdriver) # 第一个参数为appium服务的地址,需要启动appium服务。 # 第二个参数为Desired capabilities对象 # 我们就先传入这两个参数就可以了。 driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps) # 4.操作APP # 脚本机器中APK文件路径,注意前边要加一个r,不然解析地址时可能会报错。 app_path = r'C:\Users\L\Desktop\com.taobao.taobao_V9.15.0.apk' # 安装apk driver.install_app(app_path) time.sleep(5) # 要知道即将卸载的app的包名 app_id = "com.taobao.taobao" # 卸载APP driver.remove_app(app_id) # 5.关闭APP time.sleep(3) driver.quit()
说明:
一般这两个命令很少使用,即使用命令安装
apk软件,一般我们也推荐使用adb命令。就不用把安装APP的代码写入脚本中,即使写入脚本,最终执行也是adb命令。如果公司的测试机充裕,我们就把APP的安装包放入手机,直接手动安装了。一般用到这两个命令是在一个脚本要去测试多个APP的时候,会用到这两个命令,在测试时把这几个APP先安装上,测试完成之后在卸载APP。但是这种情况也基本上不多,一般情况APP都单独测试。
3、判断APP是否已安装
使用的API:
driver.is_app_installed(bundle_id) 参数: bundle_id: 传⼊app包名,返回结果为True(已安装) / False(未安装)
示例:
# 1.导入appium import time from appium import webdriver # 2.创建Desired capabilities对象,添加启动参数 desired_caps = { "platformName": "Android", # 系统名称 "platformVersion": "7.1.2", # 系统版本 "deviceName": "127.0.0.1:21503", # 设备名称 "appPackage": "com.microvirt.launcher2", # APP包名 "appActivity": "com.microvirt.launcher.Launcher" # APP启动名 } # 3.启动APP driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps) # 4.操作APP # 脚本机器中APK⽂件路径 app_path = r'C:\Users\L\Desktop\com.taobao.taobao_V9.15.0.apk' # 安装apk driver.install_app(app_path) time.sleep(5) # 要知道即将卸载的APP的包名 bundle_id = "com.taobao.taobao" result = driver.is_app_installed(bundle_id) # 结果是result=true print(result) # 5.关闭APP time.sleep(3) driver.quit()
提示:一般我们用眼看APP是否安装就可以了,脚本中明确需要的时候再写。
4、关闭APP软件和关闭驱动对象
关闭APP软件和关闭驱动对象的区别:
driver.close_app()
闭当前操作的APP,不会关闭驱动对象。
driver.quit()
关闭驱动对象,同时关闭所有关联的APP。
5、发送文件到手机和获取手机中的文件
(1)发送文件到手机
代码片段:
# 导入base64库 import base64 # 将文件转换成二进制文件 with open(file_path,'rb') as fp: data = str(base64.b64encode(fp.read()),'utf-8') # print(data) # 将转换格式的文件发送到手机 driver.push_file(path, data)
参数说明:
file_path
:需要上传的文件路径。path
:手机设备上的路径(例如:/sdcard/a.txt
)data
:文件内数据,要求base64
编码。
说明:
Python3.x中字符都为unicode编码,需要先导入base64库进行编码和解码,先把文件转成base64格式的二进制文件,然后进行文件传递到手机,因为设备之间传递是二进制的。
(2)从手机中拉取文件
代码片段:
import base64 # 返回数据为base64编码的数据 data = driver.pull_file(path) # base64解码 with open('a.txt','wb') as fp: fp.write(base64.b64decode(data))
参数:
path:手机设备上的路径例如:
/sdcard/a.txt
(3)示例:
# 1.导入appium import time from appium import webdriver import base64 # 2.创建Desired capabilities对象,添加启动参数 desired_caps = { "platformName": "Android", # 系统名称 "platformVersion": "7.1.2", # 系统版本 "deviceName": "127.0.0.1:21503", # 设备名称 "appPackage": "com.cyanogenmod.filemanager", # APP包名 "appActivity": ".activities.NavigationActivity" # APP启动名 } # 3.启动APP # 声明手机驱动对象(实例化webdriver) # 第一个参数为appium服务的地址,需要启动appium服务。 # 第二个参数为Desired capabilities对象 # 我们就先传入这两个参数就可以了。 driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps) # 4.操作APP # 4.1 发送文件到手机 file_path = r'C:\Users\L\Desktop\test.txt' # 将文件转换成二进制文件 with open(file_path, 'rb') as fp: data = str(base64.b64encode(fp.read()), 'utf-8') # print(data) # 将转换格式的文件发送到手机 path = r'/sdcard/test.txt' driver.push_file(path, data) # 4.2 从手机中拉取文件到电脑上 # 手机中文件的路径 path_app = '/sdcard/test.txt' # 返回数据为base64编码的数据 data = driver.pull_file(path_app) print(data) # base64解码 with open('test.txt', 'wb') as fp: fp.write(base64.b64decode(data)) # 提示:该文件会拉取到脚本文件所在的目录中 # 5.关闭APP time.sleep(5) driver.quit()
6、获取当前屏幕内元素结构(重点)
(也就是获取当前屏幕的源码)
使用的API:
driver.page_source 作用: 返回当前页面的文档结构,可以为后续判断特定的元素是否存在提供前提。
示例:
# 1.导入appium import time from appium import webdriver # 2.创建Desired capabilities对象,添加启动参数 desired_caps = { "platformName": "Android", # 系统名称 "platformVersion": "7.1.2", # 系统版本 "deviceName": "127.0.0.1:21503", # 设备名称 "appPackage": "com.android.settings", # APP包名 "appActivity": ".Settings" # APP启动名 } # 3.启动APP driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps) # 4.操作APP # 获取当前页面源码 # 只是设置首页中的页面源码 source = driver.page_source # # print(source) # 将APP的页面源码保存到一个文件中 with open("source.txt", "w", encoding="UTF-8") as fp: fp.write(source) # 5.关闭APP time.sleep(3) driver.quit()
7、脚本内启动其他APP
使用的API:
driver.start_activity(appPackage,appActivity) # 提示:appPackage,appActivity为所要启动APP的包名和启动名
示例:
# 从管理app页面中打开文件管理器app # 1.导入appium import time from appium import webdriver # 2.创建Desired capabilities对象,添加启动参数 desired_caps = { "platformName": "Android", # 系统名称 "platformVersion": "7.1.2", # 系统版本 "deviceName": "127.0.0.1:21503", # 设备名称 "appPackage": "com.android.settings", # APP包名 "appActivity": ".Settings" # APP启动名 } # 3.启动APP driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps) # 4.操作APP # 从设置APP页面启动文件管理器APP time.sleep(3) # 先用adb命令获取文件管理器的包名和启动名 # com.cyanogenmod.filemanager/.activities.NavigationActivity driver.start_activity("com.cyanogenmod.filemanager", ".activities.NavigationActivity") # 5.关闭APP time.sleep(3) driver.quit()
8、将应用程序置于后台运行(重点)
使用的API:
# 将应用置于后台运行(秒) driver.background_app()
示例:
# 1.导入appium import time from appium import webdriver # 2.创建Desired capabilities对象,添加启动参数 desired_caps = { "platformName": "Android", # 系统名称 "platformVersion": "7.1.2", # 系统版本 "deviceName": "127.0.0.1:21503", # 设备名称 "appPackage": "com.android.settings", # APP包名 "appActivity": ".Settings" # APP启动名 } # 3.启动APP driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps) # 4.操作APP time.sleep(3) # 将设置APP置于后台运行 # 将应用在后台运行5秒,返回前台 driver.background_app(5) # 提示:测试前最好把设备中所有后台运行的APP都关闭掉。 # 5.关闭APP time.sleep(3) driver.quit()
提示:在测试APP热启动的时候,就会常用到该命令。
相关文章推荐
- 『心善渊』Selenium3.0基础 — 3、使用Selenium操作浏览器对象的基础API
- 谷歌地图开发经验分享系列之二:Google Map API基础对象操作和用法(Map类和LatLng类)
- 『与善仁』Appium基础 — 11、补充:Desired Capabilities参数介绍
- JavaSe基础XX16——API对象-String
- 『与善仁』Appium基础 — 4、常用ADB命令(一)
- 『与善仁』Appium基础 — 12、Appium的安装详解
- 『与善仁』Appium基础 — 13、补充:node.js介绍
- Spark 结构化API——基础操作
- Nexus基础:使用Api进行操作
- python+opencv-图像处理开发基础-基础操作API
- Python全栈(一)基础之16.文件操作
- 【API】文件操作编程基础-CreateFile、WriteFile、SetFilePointer
- 我的Appium学习记录——Python IOS appium& selenium 自动化基础操作
- 嵌入式Linux基础知识6(ubuntu16 下操作目录,出现Permission denied的解决办法)
- 『与善仁』Appium基础 — 14、Appium测试环境搭建
- 『与善仁』Appium基础 — 15、使用Appium的第一个Demo
- appium基础操作方法--滑动操作(上滑、下滑、左右滑动)--JAVA篇
- Java常用基础操作API
- JavaSe基础XX16——API对象-StringBuffer类
- 『与善仁』Appium基础 — 1、Android系统的测试环境搭建