文章目录
- 前言
- 一、Appium介绍和安装
- 二、python代码功能实现
- 2.1 hello appium 参数详解
- 2.2 在脚本内启动其他app
- 2.3 获取app的包名和界面名
- 2.4 关闭app和驱动对象
- 2.5 安装和卸载以及是否安装app
- 2.6 将应用置于后台
- 总结
前言
一、Appium介绍和安装
(1)Appium介绍
Appium是一个移动端的自动化框架,可用于测试原生应用,移动网页应用和混合型应用,且是跨平台的。可用于iOS和Android操作系统。原生的应用是指用android或iOS的sdk编写的应用,移动网页应用是指网页应用,类似于ios中safari应用或者Chrome应用或者类浏览器的应用。混合应用是指一种包裹webview的应用,原生应用于网页内容交互性的应用。
重要的是Appium是跨平台的,何为跨平台,意思就是可以针对不同的平台用一套api来编写测试脚本。
(2)Appium自动化测试环境搭建
我们使用Appium和python来进行自动化测试,需要安装两个东西,一个是Appium的客户端,一个是Appium-python库。这两个需要安装的东西在加上手机就可以进行自动化测试,它们之间的关系是: python代码->Appium-python库-→> Appium ->手机。
(3)Appium客户端安装
Appium桌面客户端安装方式:
1.运行appium-desktop-Setup-1.6.2.exe,默认安装即可
2.启动客户端,按图片步骤1->2->3->4设置
启动成功展示如下:
(4)Appium-python库安装命令行安装(需要联网)
pip3 insta11 Appium-python-client.
二、python代码功能实现
2.1 hello appium 参数详解
(1)应用场景:
在做app自动化的时候,我们肯定是针对某个产品、某个软件进行测试,那么我们一定是先让模拟器或真机帮我们打开这款软件才可以。所以接下来要学的就是如何打开某个应用程序。(2)需求:
使用以下步骤可以打开模拟器中的《设置》应用程序
(3)实现步骤:
1.打开手机模拟器
2.打开appium工具
3.创建一个python项目,取名为hello_appium
4.创建一个demo.py文件
5.将下面代码直接复制,并运行即可
from appium import webdriver desired_caps = dicto 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 = webdriver.Remote('http:/ /loca7host:4723/wd/hub', desired_caps) driver.quit()
注意点:
这段代码实际上配置了一些启动应用程序的相关参数。之后的其他项目也需要用到这个参数,可能有些参数配置的内容不同。为了方便我们后期课程会将这段代码叫做"前置代码"。
参数详解:
(1)应用场景
如果后期项目不是测试《设置》应用程序,而是测试《短信》应用程序那么怎么打开《短信》应用程序呢?如果后期项目测试的模拟器或手机不再是5.1的版本,而是6.1的版本呢?
相关配置的信息在学习之后都可以进行修改。
(2)参数解释
#导模块
from appium import webdriver
#创建一个字典,包装相应的启动参数
desired_caps = dicto
#需要连接的手机的平台(不限制大小写)
desired_caps["platformName "] ='Android'
# 需要连接的手机的版本号(比如5.2.1的版本可以填写5.2.1或5.2或5 ,以此类推)
desired_caps['platformversion"] = "5.1'
#需要连接的手机的设备号(andoird平台下,可以随便写,但是不能不写)
desired_caps[ " deviceName'] = '192.168.56.101:5555 "
#需要启动的程序的包名
desired_caps[ ' apppackage'] = 'com.android.settings"
#需要启动的程序的界面名
desired_caps[ " appActivity'] = ".settings'
#连接appium服务器
driver = webdriver.Remote( 'http:/ /loca1host:4723/wd/hub', desired_caps)
#退出
driver.quit()
2.2 在脚本内启动其他app
(1)应用场景
如果一个应用需要跳转到另外一个应用,就可以使用这个api进行应用的跳转,就像我们通过外卖应用下订单之后会跳转到支付应用一样。
(2)方法名和参数
#脚本内启动其他app
#参数:
#appPackage:要打开的程序的包名
#appActivity:要打开的程序的界面名
driver.start_activity(apppackage(包名),appActivity(界面名))
(3)示例
打开《设置》应用程序,等待三秒后跳转到《短信》应用程序
代码实现:
1.前置代码: 打开《设置》应用程序
from appium import webdriver
desired_caps = dicto
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 = webdriver.Remote('http:/ /loca7host:4723/wd/hub', desired_caps)2.等待三秒后跳转到《短信》应用程序
time.sleep(2)
driver.start_activity( ' com.android.mms ', '.ui.conversationList')
driver.quit()
2.3 获取app的包名和界面名
(1)应用场景
当我们从一个应用跳转到另外一个应用的时候,想输出其包名、界面名或者想在报告中展现对应信息,我们就可以调用这个属性来进行获取.
(2)属性名
#获取包名
driver.current_package
#获取界面名
driver.current_activity
(3)示例
打开《设置》应用程序后输出当前的包名和界面名。
代码实现:
1.前置代码: 打开《设置》应用程序
from appium import webdriver
desired_caps = dicto
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 = webdriver.Remote('http:/ /loca7host:4723/wd/hub', desired_caps)2.输出当前的包名和界面名
#打印当前应用设置包名
print(drive.current_package)
#打印当前应用设置界面名
print(driver.current_activity)
输出结果:
2.4 关闭app和驱动对象
(1)应用场景
有的时候我们需要关闭某个应用程序后,再打开新的应用。
(2)方法名
#关闭当前操作的app,不会关闭驱动对象
driver.close_app()
#关闭驱动对象,同时关闭所有关联的****app
driver.quit()
(3)示例
打开《设置》,使用close_app()方法关闭,再尝试使用quit()方法,最后打印当前程序的包名,观察区别
代码实现:
1.前置代码: 打开《设置》应用程序
from appium import webdriver
desired_caps = dicto
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 = webdriver.Remote('http:/ /loca7host:4723/wd/hub', desired_caps)2.使用close_app()方法关闭,再尝试使用quit()方法
(1)close_app()方法关闭
drive.close_app()
print(drive.current_package)
**(2)**使用quit()方法
drive.quit()
print(drive.current_package)
3.输出当前的包名和界面名
(1)close_app()方法关闭
依然会输出包名
**(2)**使用quit()方法关闭
不会输出包名,会报错,查找不到驱动对象
2.5 安装和卸载以及是否安装app
(1)应用场景
一些应用市场的软件可能会有一个按钮,如果某一个程序已经安装则卸载,如果没有安装则安装。
(2)方法名
#安装app
#参数:
#app_path: apk路径
driver.install_app(app_path)
#卸载app
#参数:
#app_id:应用程序包名
driver.remove_app(app_id)
#判断app是否已经安装
#参数:
#app_id:应用程序包名
#返回值:
#布尔类型,True为安装,Fa1se为没有安装
driver.is_app_installed(app_id)
(3)示例
如果《安智市场》已经安装,则卸载《安智市场》,如果没有则安装
代码实现:
1.前置代码: 打开《设置》应用程序
from appium import webdriver
desired_caps = dicto
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 = webdriver.Remote('http:/ /loca7host:4723/wd/hub', desired_caps)2.判断软件是否安装,安装了则卸载,未安装则安装。
if driver.is_app_installed("cn.goapk.market"):
#软件安装了则卸载
driver.remove_app("cn.goapk.market")
else:
#软件未安装了则安装
driver.install_app(" /users/Yoson/Desktop/anzhishichang.apk")
#退出driver
driver.quit()
2.6 将应用置于后台
(1)应用场景
银行类app会在进入后台一定时间后,如果再回到前台也页面会重新输入密码,如果需要自动化测试这种功能,可以使用这个api进行测试
(2)方法名
# app放置到后台一定时间后再回到前台,模拟热启动
#参数:
#seconds:后台停留多少秒
driver.background_app(seconds)
(3)示例
打开《设置》应用,进入后台5秒,再回到前台
代码实现:
1.前置代码: 打开《设置》应用程序
from appium import webdriver
desired_caps = dicto
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 = webdriver.Remote('http:/ /loca7host:4723/wd/hub', desired_caps)
2.进入后台5秒,再回到前台
driver.background_app(5)
time.sleep(3)
drive.quit()
注意点:
热启动:表示进入后台回到前台。关机再开这种切断电源的行为可以叫做""冷启动"