移动自动化测试-Appium基础操作API

Appium自动化测试框架

学习目标:

1.能够安装Appium桌面客户端
2.能够安装Appium-python库

Appium介绍:

Appium是一个移动端的自动化测试框架,可用于测试原生应用,移动网页应用和混合型应用,且是垮平台的,可用于Android和IOS操作系统。
重要的是Appium是跨平台的,可以针对不同的平台用一套api来编写脚本

Appium自动化测试环境搭建:

1.Appium桌面客户端安装方式
2.Appium-python库安装

Hello Appium

学习目标:

​ 1.能够使用appium启动任意应用程序
​ 2.能够了解"前置代码"中各项参数的含义

一、快速体验
应用场景:

在做app自动化的时候,我们肯定是针对某个产品。某个软件进行测试,那么我们一定是先让模拟器或真机帮我们打开着款软件才可以,所以下来要学的就是如何打开某浩哥应用程序。

需求:

使用一下步骤打开模拟器中的《设置》应用程序:

​ 1.打开手机模拟器
​ 2.打开Appium
​ 3.创建一个python项目,取名为hello_appium
​ 4.创建一个demo.py文件
​ 5.将一下代码直接复制,并运行

from appium import webdriver
import time

desired_caps = dict()
#平台的名字,大小写无所谓,不能乱写
desired_caps['platformName'] = 'Android'
#平台的版本(5.4.3可以写5.4.3,5.4,5都是可以的)
desired_caps['platformVersion'] = '5.1'
#设备的名字,对于安卓来说可以随便写,IOS要和设备一致
desired_caps['deviceName'] = '127.0.0.1:62001'
#要打开的应用程序
desired_caps['appPackage'] = 'com.android.settings'
#要打开的界面
desired_caps['appActivity'] = '.Settings'

#连接appium服务
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)

time.sleep(5)
driver.quit()
二、参数详解
应用场景:

更改配置信息

Appium基础操作API

1.1 在脚本内启动其他app
应用场景:

如果一个应用需要跳转到另一个应用,就可以使用这个api进行应用的跳转,就像我们通过外卖应用下订单后会跳转到支付应用一样

方法和参数:
#脚本内启动其他app
#参数
#	appPackage:要打开的程序包名
#	appActivity:要打开的程序的界面名
driver.start_activity(appPackage,appActivity)
1.2 获取app的包名和界面名
应用场景:

当我们从一个应用跳转到另一个应用时,想输出其包名、界面名,或者想在报告中展现对应信息,我们就可以调用这个属性来进行获取

属性名:
#获取包名
driver.current_package
#获取界面名
driver.current_activity
示例

打开《设置》应用程序输出当前的包名和界面名

from appium import webdriver
import time

desired_caps = dict()
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '5.1'
desired_caps['deviceName'] = '127.0.0.1:62001'
desired_caps['appPackage'] = 'com.android.settings'
desired_caps['appActivity'] = '.Settings'

driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)

time.sleep(5)

#打印当前包名
print(driver.current_package)

#打印当前界面名
print(driver.current_activity)

driver.quit()
1.3 关闭app和驱动对象
应用场景:

有的时候我们需要关闭某个应用程序后,再打开新的应用,那么如何关闭应用程序?

方法名:
#关闭当前操作的app,不会关闭驱动对象
driver.close_app()
#关闭驱动对象,同时关闭所有关联的app
driver.quit()
示例:

打开《设置》,使用close_app()方法关闭,再尝试使用quit()方法,最后打印当前程序的包名,观察区别

from appium import webdriver
import time

desired_caps = dict()
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '5.1'
desired_caps['deviceName'] = '127.0.0.1:62001'
desired_caps['appPackage'] = 'com.android.settings'
desired_caps['appActivity'] = '.Settings'

driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)

time.sleep(3)

#关闭应用程序
driver.close_app()

# 关闭驱动对象
driver.quit()
1.4 安卓和卸载以及是否安装app
应用场景:

一些应用市场的软件可能会有一个按钮,如果某一个程序已经安装则卸载,如果没有安装则安装

方法名:
#安装app
#参数:
#	app_path:apk路径
driver.install_app(app_path)

#卸载app
#参数
#	app_id:应用程序包名
driver.remove_app(app_id)

#判断app是否已经安装
#参数:
#	app_id:应用程序包名
#返回值:
#布尔类型,True为安装,False为没有安装
driver.is_app_installed(app_id)
示例:

如果《慕课网》已经安装,则卸载,如果没有则安装

from appium import webdriver
import time

desired_caps = dict()
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '5.1'
desired_caps['deviceName'] = '127.0.0.1:62001'
desired_caps['appPackage'] = 'com.android.settings'
desired_caps['appActivity'] = '.Settings'

driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)

time.sleep(3)

if driver.is_app_installed('cn.com.open.mooc'):
    driver.remove_app('cn.com.open.mooc')
else:
    driver.install_app("C:\\Users\\admin\\Desktop\\william\\imooc7.3.710102001android.apk")
    time.sleep(5)


1.5 将应用置于后台
应用场景;

银行类app会在进入后台一定时间后,如果再回到前台页面,会重新输入密码,如果要测试这种功能,可以使用这个api进行测试

方法
#app放置到后台一定时间后再回到前台,模拟热启动
#参数:
#	seconds:后台停留多少秒
driver.background_app(seconds)
示例

打开《设置》应用,进入后台5秒,再回到前台

from appium import webdriver
import time

desired_caps = dict()
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '5.1'
desired_caps['deviceName'] = '127.0.0.1:62001'
desired_caps['appPackage'] = 'com.android.settings'
desired_caps['appActivity'] = '.Settings'

driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)

time.sleep(3)

driver.background_app(5)

time.sleep(3)

注意点:

热启动:表示进入后台回到前台,关机再开这种切断电源的行为可以叫做“冷启动”

热门文章

暂无图片
编程学习 ·

oracle创建索引语句

oracle : 单索引 create index 索引名称 on table(column)删除索引 drop index 索引名称复合索引 create index WBSINDEX ON project_info(wbs,is_delete)查询某张表中所有索引 select * from ALL_INDEXS where table_name = project_info查询某张表加了索引的列 select * from…
暂无图片
编程学习 ·

坚强奋斗的后浪们,后浪们的逆风翻盘之路。

逆风5.4日B站播出了后浪,视频伴随着激情澎湃的音乐、华丽无比的台词、精英人士的代言,可以说很振奋人心。但是观看后,网上却有着两种不同的声音,分别是乐观与悲观。当然伴随着疫情肆虐,悲观的声音反而是最响亮。90后们更是看的焦躁不安、时逢逆风,如何翻盘? 逆风论点:通…
暂无图片
编程学习 ·

Zabbix+percona插件实现数据库mysql的监控

文章目录1.配置zabbix监控mysql的配置1.1 在zabbix-agent主目录(默认情况下为/ var / lib / zabbix)中创建.my.cnf2.配置percona2.1安装2.2配置文件2.3.在zabbix图形界面中导入模板2.3.1 监控的server添加监控项2.3.2 更改字体 1.配置zabbix监控mysql的配置 检测试验环境:确…
暂无图片
编程学习 ·

machine learning基础知识(Leetcode)

机器学习 machine learning是机器通过已知的内容,类似于人类一样进行学习,并对同类型数据进行判断的过程。 例如训练图片模型就是将每个像素点转为0到255之间的值,利用机器发现不同种类的图片之间存在的映射。 有监督与无监督模型监督学习是F(x)= sum 并且sum已知,可以通…
暂无图片
编程学习 ·

nginx+tomcat 配置证书

nginx 配置证书 tomcat 配置文件说明#user nobody; worker_processes 1;#error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info;#pid logs/nginx.pid;events {worker_connections 1024; }http {include mime.typ…
暂无图片
郑州普通话 ·

学习笔记六——循环神经网络

一、RNN 前馈神经网络:信息往一个方向流动。包括MLP和CNN 循环神经网络:信息循环流动,网络隐含层输出又作为自身输入,包括RNN、LSTM、GAN等。 RNN模型结构如下图所示: 展开之后相当于堆叠多个共享隐含层参数的前馈…
暂无图片
代理记账 ·

学习笔记六——循环神经网络

一、RNN 前馈神经网络:信息往一个方向流动。包括MLP和CNN 循环神经网络:信息循环流动,网络隐含层输出又作为自身输入,包括RNN、LSTM、GAN等。 RNN模型结构如下图所示: 展开之后相当于堆叠多个共享隐含层参数的前馈…
暂无图片
cgfy ·

8. 源码分析之ConsumeQueue

源码分析之ConsumeQueue 消息发送时数据在ConsumeQueue的落地 ​ 连续发送5条消息,消息是不定长,首先所有信息先放入 Commitlog中,每一条消息放入Commitlog的时候都需要上锁,确保顺序的写入。 ​ 当Commitlog写成功了之后。数据…
暂无图片
coreui ·

Heap Sort 讲解

Heap Sort sorts a group of unordered elements using the Heap data structure. The sorting algorithm using a Min Heap is as follows: Heapify all elements into a Min HeapRecord and delete the top elementPut to top element into an array T that stores all so
暂无图片
未来博客 ·

Heap Sort 讲解

Heap Sort sorts a group of unordered elements using the Heap data structure. The sorting algorithm using a Min Heap is as follows: Heapify all elements into a Min HeapRecord and delete the top elementPut to top element into an array T that stores all so
暂无图片
建站日记 ·

[react] 你觉得react上手快不快?它有哪些限制?

[react] 你觉得react上手快不快?它有哪些限制? 相对vue来说不快。 限制 需要学习JSX需要工程化的配置需要对原生JavaScript有相当的掌握react只是一个UI层面的库,像vue内置了动画处理、keep-alive等功能,react则需要去找第三方库…
暂无图片
mfbz ·

学习笔记六——循环神经网络

一、RNN 前馈神经网络:信息往一个方向流动。包括MLP和CNN 循环神经网络:信息循环流动,网络隐含层输出又作为自身输入,包括RNN、LSTM、GAN等。 RNN模型结构如下图所示: 展开之后相当于堆叠多个共享隐含层参数的前馈…
暂无图片
mfbz ·

AOV网是否存在回路-拓扑排序-C++

拓扑排序是对测试AOV网是否存在回路的方法! 拓扑排序的过程中,由于需要查找所有以某顶点为尾的弧,即找到该顶点的所有出边,故图要采用邻接表的存储方式。但拓扑排序较邻接表的存储方式有一点不同,由于要查找入度为0的点…
暂无图片
珊珊日记 ·

AOV网是否存在回路-拓扑排序-C++

拓扑排序是对测试AOV网是否存在回路的方法! 拓扑排序的过程中,由于需要查找所有以某顶点为尾的弧,即找到该顶点的所有出边,故图要采用邻接表的存储方式。但拓扑排序较邻接表的存储方式有一点不同,由于要查找入度为0的点…
暂无图片
珊珊日记 ·

8. 源码分析之ConsumeQueue

源码分析之ConsumeQueue 消息发送时数据在ConsumeQueue的落地 ​ 连续发送5条消息,消息是不定长,首先所有信息先放入 Commitlog中,每一条消息放入Commitlog的时候都需要上锁,确保顺序的写入。 ​ 当Commitlog写成功了之后。数据…