【APP移动端自动化测试】第二节.Appium介绍和常用命令代码实现

文章目录

  • 前言
  • 一、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()

注意点:
热启动:表示进入后台回到前台。

关机再开这种切断电源的行为可以叫做""冷启动”

总结

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/348359.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【perl】基本语法 /备忘录/

分享 perl 语言学习资源 Perl 教程|极客教程 (geek-docs.com) Perl [zh] (runebook.dev) Perl 运算符 | 菜鸟教程 (runoob.com) Perl Documentation - Perldoc Browser Search the CPAN - metacpan.org 当然还有一些经典书籍,不再列举。 1、数字 1.1、数字表…

火车头采集怎么使用GPT等AI原创文章

火车头采集官方并没有GPT、百度文心一言AI、阿里通义千问AI、Kimi大模型等AI功能,但支持接入插件,可以编写相应人工智能AI原创文章插件(火车头采集支持PHP和c#这2种语言的插件编写),或者导入第三方封装好的GPT等AI原创…

大文件word生成的处理与解决策略

前言 对于简单word文档的生成导出,java已经有着很多技术来进行处理,在有着相对固定的格式样板下,采用word模板导出相对会是比较好的选择。但是当数据量且包含大量图片后,采用模板导出就显得无力了,模板的缺点是无法应…

[ROS 系列学习教程] 建模与仿真 - 使用 Arbotix 控制机器人

ROS 系列学习教程(总目录) 本文目录 一、Arbotix 简介二、安装Arbotix三、配置Arbotix控制器四、配置launch启动文件五、数据交互接口六、在rviz中仿真控制机器人6.1 直接发topic控制6.2 使用键盘控制6.3 编写代码控制机器人移动 前面讲了机器人的建模,是静态的&…

Mysql查询分析工具Explain的使用

一、前言 作为一名合格的开发人员,与数据库打交道是必不可少的,尤其是在业务规模和数据体量大规模增长的条件下,应用系统大部分请求读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,遇到最多的&…

遇到Windows无法启动时不要担心,这里有解决办法

序言 如果有一天你打开电脑,Windows拒绝启动,你该怎么办?其实“Windows无法启动”是一种常见症状,原因多种多样,因此你需要进行一些故障排除。 现代版本的Windows更善于从这种情况中自动恢复,而Windows XP遇到此问题时可能会停止在运行的地方,现代版本的Windows将尝试…

论文解读——《I2EDL: Interactive Instruction Error Detection and Localization》

一、研究背景 视觉与语言导航(VLN)是一个AI领域的研究任务,旨在开发能够按照自然语言指令在三维空间中导航到指定位置的智能体。这项任务与人类的日常活动——如按照口头指示到达某个地点——十分相似,对于推动人机交互的自然性和…

为什么总选不到合适的安全数据交换系统?解决问题重点在这

安全数据交换系统对于企业而言,重要性不言而喻。企业业务开展离不开数据交换,只有数据流动起来,才能真正发挥价值,但数据流动的过程,涉及多个系统、多种环境、多个人员角色,因此,有较大的风险。…

Gi标签管理

文章目录 前言理解标签创建标签操作标签总结 前言 理解标签 标签,可以理解为对某次commit的一次标识,相当于起起了一个别名。 例如,在项目发布某个版本时候,针对最后一次commit起一个v1.0这样的标签来标识里程碑的意义。 这有什…

【Linux】线程(一)

谈论之前需要先谈论一些线程的背景知识 其中就有进程地址空间,又是这个让我们又爱又恨的东西 目录 背景知识:地址空间: 背景知识: 地址空间: 说在前边,OS通常分为4个核心模块:执行流管理&…

Flutter项目开发模版,开箱即用

前言 当前案例 Flutter SDK版本:3.22.2 每当我们开始一个新项目,都会 引入常用库、封装工具类,配置环境等等,我参考了一些文档,将这些内容整合、简单修改、二次封装,得到了一个开箱即用的Flutter开发模版…

喜讯!云起无垠入选《2024中国AI大模型产业图谱1.0版》

近日,数据猿与上海大数据联盟联合策划并启动了“2024全年度三大策划活动”,经过数月的精心筹备和严格筛选,通过直接申报交流、深入访谈调研、外部咨询评价以及匿名访谈等多维度交叉验证的方式,最终完成了《2024中国AI大模型产业图…

鸿蒙开发文件管理:【@ohos.securityLabel (数据标签)】

数据标签 该模块提供文件数据安全等级的相关功能:向应用程序提供查询、设置文件数据安全等级的JS接口。 说明: 本模块首批接口从API version 9开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 导入模块 import security…

【单片机毕业设计选题】-基于STM32和阿里云的家庭安全监测系统

系统功能: 此设计采用STM32单片机采集环境温湿度,烟雾浓度和一氧化碳浓度显示在OLED上,并将这些信息上报至阿里云平台。 1. 上电连接手机热点后自动连接阿里云,可通过阿里云平台收到系统上报的温湿度,烟雾 浓度,一氧化碳数据以…

大数据时代下哈尔滨等保测评的新挑战与对策

引言 大数据时代,信息爆炸式增长,数据成为了新时代的“石油”。作为黑龙江省的省会城市,哈尔滨在积极推进智慧城市建设的过程中,大数据技术的应用日益广泛,随之而来的是信息安全领域的新挑战,特别是对信息…

WEB基础--TOMCAT服务器

服务器概述 什么是服务器 服务器:就是一个提供为人民服务的机器,这里的服务器主要指计算机服务器,分为两种:服务器软件和硬件服务器; 服务器分类 1、硬件服务器:安装了服务器软件的主机。就相当于高配的…

AI绘画基础教学:我用AI做建筑设计,10分钟完成100个方案

人工智能进入大众视野,就是ChatGPT给所有人打开了一扇通往人工智能世界的大门,面对这样一个强大又不太好驾驭的工具,很多人都经历了从惊讶、到惊喜,再到不知道能干啥用的茫然。 AI能帮人们做什么?建筑行业有哪些专门针…

Linux网络 - json,网络计算服务器与客户端改进

文章目录 前言一、json1.引入库2. 使用步骤2.Calculator.hpp3.Task.hpp4.serverCal.hpp 新客户端 前言 本章内容主要对上一章的网络计算器客户端和服务器进行一些Bug修正与功能改进。 并学习如何使用json库和daemon函数。 一、json 在我们自己的电脑上一些软件的文件夹中&…

顶顶通呼叫中心中间件-限制最大通话时间(mod_cti基于FreeSWITCH)

顶顶通呼叫中心中间件-限制最大通话时间(mod_cti基于FreeSWITCH) 一、最大通话时间 1、配置拨号方案 1、点击拨号方案 ->2、在框中输入通话最大时长->3、点击添加->4、根据图中配置->5、勾选continue。修改拨号方案需要等待一分钟即可生效 action"sched…