当前位置: 首页 > news >正文

Appium基础

Appium介绍

Appium是一个移动端的自动化框架,可用于测试原生应用、移动网页应用和混合型应用,且是跨平台的。

重要的是Appium是跨平台的,即可以针对不同的平台用一套api来编写测试脚本。

Appium自动化测试环境搭建

Appium客户端+Appium-python库

它们之间的关系:python代码 -> Appium-python库 -> Appium -> 手机

客户端安装

Appium官网

github下载地址

Appium-python库安装

命令行安装(需要联网)

pip3 install Appium-Python-Client

Appium参数详解

  • 前置代码
# 导模块
from appium import webdriver# 创建一个字典,包装相应的启动参数
desired_caps =dict()
# 需要连接的手机的平台(不限制大小写)
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://localhost:4723/wd/hub', desired_caps)# 退出
driver.quit()
  • 如何使用appium打开任意一个应用程序
    • 打开要测试的应用
    • 使用 adb 命令获取包名和界面名
    • 修改 desired_caps 字典中的 addPackage 和 addActivity 的参数
  • 启动过程【了解】
    • 写的python代码会访问本机的安排appium服务器,并获取driver对象
    • appium会将我们的driver对象调用的方法转化成post请求,提交给appium服务器
    • appium通过接收到的post请求发送给手机,再由手机进行执行

基础操作API

1. 跳转其他app

  • 应用场景
    • 如果一个应用需要跳转到另一个应用,就可以用这个api进行应用的跳转
  • 方法名和参数
    • driver.start_activity(addPackage, addActivity)
  • 示例
from appium import webdriver
import time# 手机参数
desired_caps =dict()
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'# 连接appium服务器
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)# 等待三秒
time.sleep(3)# 启动短信应用程序
driver.start_activity("com.android.mms", ".ui.ConversationList")
time.sleep(20)# 退出
driver.quit()

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']='192.168.56.101:5555'
# 应用参数
desired_caps['appPackage']='com.android.settings'
desired_caps['appActivity']='.Settings'# 连接appium服务器
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)# 等待三秒
time.sleep(3)# 输出当前程序的包名和界面名
print(driver.current_package)
print(driver.current_activity)time.sleep(20)# 退出
driver.quit()

3. 关闭app和驱动对象

  • 应用场景
    • 用于关闭应用程序
  • 方法名
    • driver.close_app()  # 关闭当前操作的app,不会关闭驱动对象
    • driver.quit()  # 关闭驱动对象,同时关闭所有关联的app
  • 示例
from appium import webdriver
import time# 手机参数
desired_caps =dict()
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'# 连接appium服务器
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)# 等待三秒
time.sleep(3)# 关闭当前应用程序
driver.close_app()
# 退出
driver.quit()

4. 安装和卸载以及是否安装app

  • 应用场景
    • 一些应用市场的软件可能会有一个按钮,如果某一个程序已经安装则卸载,如果没有安装则安装
  • 方法名
    • driver.install_app(app_path)  # app_path:apk路径
    • driver.remove_app(app_id)  # app_id:应用程序包名
    • driver.is_app_installed(app_id)  # 返回值为bool类型,True为安装,False为没有安装
  • 示例
from appium import webdriver
import time# 手机参数
desired_caps =dict()
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'# 连接appium服务器
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)# 判断 安智市场 是否已经安装
# 如果安装,就要卸载
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()

5. 将应用置于后台

  • 应用场景
    • 银行类app会在进入后台一定时间后,如果再回到前台页面会重新输入密码,如果需要自动化测试这种功能,可以使用这个api进行测试
  • 方法
    • driver.background_app(seconds)
  • 示例
from appium import webdriver
import time# 手机参数
desired_caps =dict()
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'# 连接appium服务器
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)time.sleep(3)
driver.background_app(5) # 进入后台5s,再回到前台
time.sleep(3)# 退出driver
driver.quit()

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 背包九讲(动态规划)
  • IO流(完善)
  • 2.4 playwright 实战-爬取某宝商品信息
  • 四款录屏大师,一键搞定!新手也能快速上手?
  • Python数值计算(24)——PCHIP
  • Chapter 9 Operational Amplifiers
  • 快速上手Spring Boot
  • 6G:融合5G与AI,重塑网络交互与智能决策的未来
  • NB模组AT 命令用法记录
  • 如何使用yolov5-master进行训练
  • 书生.浦江大模型实战训练营——(四)书生·浦语大模型全链路开源开放体系
  • JavaScript高阶笔记总结第三天:(JavaScript高阶完结)
  • JavaScript中的字符串与数字转换
  • 人工智能GPU算力评估分析
  • Unity动画模块 之 Animation
  • ES6指北【2】—— 箭头函数
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • C++入门教程(10):for 语句
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • HTML5新特性总结
  • in typeof instanceof ===这些运算符有什么作用
  • Invalidate和postInvalidate的区别
  • JavaSE小实践1:Java爬取斗图网站的所有表情包
  • js递归,无限分级树形折叠菜单
  • mysql_config not found
  • Otto开发初探——微服务依赖管理新利器
  • PHP 的 SAPI 是个什么东西
  • Python利用正则抓取网页内容保存到本地
  • 产品三维模型在线预览
  • 第十八天-企业应用架构模式-基本模式
  • 高程读书笔记 第六章 面向对象程序设计
  • 后端_MYSQL
  • 理解在java “”i=i++;”所发生的事情
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 线上 python http server profile 实践
  • 云大使推广中的常见热门问题
  • 正则表达式
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • 如何在招聘中考核.NET架构师
  • #Z2294. 打印树的直径
  • #中的引用型是什么意识_Java中四种引用有什么区别以及应用场景
  • (2015)JS ES6 必知的十个 特性
  • (cos^2 X)的定积分,求积分 ∫sin^2(x) dx
  • (附源码)springboot人体健康检测微信小程序 毕业设计 012142
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (接上一篇)前端弄一个变量实现点击次数在前端页面实时更新
  • (九)One-Wire总线-DS18B20
  • (力扣题库)跳跃游戏II(c++)
  • (论文阅读笔记)Network planning with deep reinforcement learning
  • (三)终结任务
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • (已解决)什么是vue导航守卫
  • .bat批处理(九):替换带有等号=的字符串的子串
  • .Net 6.0--通用帮助类--FileHelper