『与善仁』Appium基础 — 18、APPium基础操作API

本文详细介绍了Appium在自动化测试中的基础操作,包括安装和卸载APP、判断APP是否已安装、关闭APP及驱动对象、发送文件到手机、获取屏幕元素结构、启动其他应用以及将应用置于后台运行。提供了相关的API使用示例,是理解Appium自动化测试的重要参考资料。
摘要由CSDN通过智能技术生成

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热启动的时候,就会常用到该命令。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值