【Python】AppUI自动化—appium自动化开发环境部署、APP测试案例(17)上

文章目录

  • 一.appium简介
    • 1.什么是appium
    • 2.appium 的工作原理
    • 3.APP类型
    • 4.APP页面布局
  • 二,appium开发环境部署(python环境)
    • 1.下载安装环境
      • 1.1.下载安装所需环境
      • 1.2.Appium-desktop( Appium-Server-GUI )配置
      • 1.3.Appium-Inspector 配置
      • 1.4.元素探测工具
      • 1.5.appium的功能介绍
    • 2.appnium-python-client和selenium的关系
  • 三.appium自动化代码编写步骤
    • 1.手机端操作(以红米手机为例)
    • 2.电脑端操作
  • 四.使用appium进行APP测试:
    • 1.手机端操作(以红米手机为例)
    • 2.电脑端操作(以手机中自带计算器为例)

一.appium简介

1.什么是appium

  • Appium是一个跨平台移动端自动化测试工具,可以为IOS和Android平台创建自动化测试用例。可以模拟App内部的各种操作,如点击、滑动、文本输入等。只要我们手工操作的动作Appium都可以完成。

  • appium 支持多平台、多语言

    • appium在不同平台中使用了标准的自动化APIs,所以在跨平台时,不需要重新编译或者修改自己的应用。

    • appium支持Selenium WebDriver支持的所有语言,如java、Object-C、JavaScript、Php、Python、Ruby、C#、Clojure,或者Perl语言,更可以使用Selenium WebDriver的Api。

    • appium 支持多平台,包括 MAC 和 Windows。它针对这两大平台开发了 appium-Server

    • 又同时支持 Android 和 iOS 两个操作系统。这就使得 appium 变得非常灵活。

2.appium 的工作原理

在这里插入图片描述

  1. 自动化脚本向AppiumServer发送注册参数(URL,platformName,platformVersion,deviceName,appPackage,appActivity

  2. AppiumServerbootstrap.jar包放入手机端

  3. 手机端用bootstrap启动手机端口(4724),并将端口返回给AppiumServer(相当于建立好了通信连接

  4. 自动化脚本发送请求(操作或命令或动作)给AppiumServer

  5. AppiumServer请求解析并发送给bootstrap

  6. bootstrap将请求解析发给UIAutomator

  7. UIAutomator执行相应的操作并将结果返回给bootstrap

  8. bootstrap将响应结果返回给AppiumServer

  9. AppiumServer将响应结果返回到脚本

综上所述,AppiumServer像是一个请求者bootstrap充当桥梁的角色,负责PC与电脑之间的通信UIAutomator则是真正的执行者。

3.APP类型

在这里插入图片描述

在这里插入图片描述

4.APP页面布局

类似于HTML,页面由各个标签组成
在这里插入图片描述
在这里插入图片描述

二,appium开发环境部署(python环境)

1.下载安装环境

1.1.下载安装所需环境

由于appium是基于JDK+SDK环境来运行,如果想正常使用python+appium进行脚本开发,需要部署下面的环境

  • Android SDK:Android SDK的安装与配置
  • JDK环境:jdk的安装与配置
  • Python3:python3的安装与配置
  • Appium-desktop(也叫做 Appium-Server-GUI ) :安装教程
  • Appium-Inspector (Appium 开发者工具 ):下载地址
    • 如果使用 Android SDK自带Uiautomator2 ,那么这个工具可以不用安装,作用等同于 Uiautomator2
  • pip 安装Appium-Python-Client模块:命令:pip install Appium-Python-Client
  • pip 安装pytest模块:pip install pytest
  • 夜神模拟器:下载地址
    • 使用真机测试,忽略夜神模拟器安装 :ADB连接模拟器或者Android手机

通过上面的设置,我们就具备了使用appium进行python自动化测试要求了

1.2.Appium-desktop( Appium-Server-GUI )配置

  • 默认安装即可,无需特别设置,安装后启动桌面appium图标。
  • Appium-desktop配置Android SDK 安装目录和 Java JD安装目录
    在这里插入图片描述
    startServer启动Appium-desktop: 监听本地4723端口发起请求
    在这里插入图片描述

1.3.Appium-Inspector 配置

  1. 远程路径(Remote Path):/wd/hub
  2. 高级设置(Advanced Settings):勾选 Allow Unauthorized Certificates,不勾选 Use Proxy
    在这里插入图片描述

startSession启动Appium-Inspector

在这里插入图片描述

在这里插入图片描述

1.4.元素探测工具

  • 用于定位APP元素的,比如需要点击某个按钮,需获取到该按钮的元素才能对其进行操作(单击,双击等),这里推荐使用UIAutomatorViewer
    在这里插入图片描述

1.5.appium的功能介绍

Simple:简单模式

  • Edit Configurations:可以配置android sdk和Java sdk的环境地址,如果已配置好环境,会使用默认的地址
    在这里插入图片描述

Advanced:高级模式
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  • 如果某处有id,元素id值是唯一的,所以可用id去进行定位发送秘钥对文本框进行输入
    在这里插入图片描述

2.appnium-python-client和selenium的关系

  • Appium Python Client模块与Selenium之间存在一定的版本依赖关系。

    • appium像是一个服务,appium-python-client是让python连接appium服务的一个驱动,也就是一个python语言封装和appium api通讯的一个库

    • appium又继承了selenium的webdriver因此appium-python-client安装会更新selenium。

      • appium-python-client版本https://pypi.org/project/Appium-Python-Client/#history
      查看selenium和appium-python-client的版本
      	pip show selenium
      	pip show appium-python-client
      
      卸载当前的selenium和appium-python-client
      	pip uninstall selenium
      	pip uninstall appium-python-client
      
      安装指定版本的appium-python-clien
      #安装appium-python-client的同时,系统会安装与之相匹配的selenium版本
      	pip install appium-python-client==2.11.0
      

三.appium自动化代码编写步骤

  • Python3
  • Java8
  • Android SDK v2.4.1
  • Appium v2.2.1

1.手机端操作(以红米手机为例)

  1. 进入【开发者模式】

    • 【设置】——【我的设备】——【全部参数】——【MIUI版本】点击5次,即可打开开发者模式
      在这里插入图片描述
      在这里插入图片描述
  2. 在开发者选项中,打开【usb调试】、【usb安装】
    在这里插入图片描述

2.电脑端操作

android-sdk-tools环境搭建

  • 安装installer_r24.4.1-windows.exe,中途一定要出现【java路径】再进行下一步
    在这里插入图片描述
    在这里插入图片描述

  • 解压缩build-tools.zip 、tools.zip 、platform-tools.zip 到 安装目录【不要文件夹套着文件夹
    在这里插入图片描述

  • 打开安装目录中SDK Manager.exe, 查看platform-tools和build-tools是否已安装
    在这里插入图片描述

  • 查看手机的android版本, 在SDK Manager中 安装对应 android版本
    在这里插入图片描述

四.使用appium进行APP测试:

1.手机端操作(以红米手机为例)

  • 进入【开发者模式】
    步骤见1,不再赘述

  • 打开USB调试及安装
    在这里插入图片描述

  • 手机通过数据线连接电脑

2.电脑端操作(以手机中自带计算器为例)

  1. 打开appium,点击编辑配置,将如图所示位置的安卓SDK/JDK路径分别更改为自己的路径
    在这里插入图片描述

    • 保存修改,点击启动服务器
  2. 打开Appium Inspector配置需要连接app所需参数
    在这里插入图片描述

    • 如图所示几项分别为:
      {
        "platformName": "Android",  # 机操作系统,如 iOS, Android, 或者 FirefoxOS (必填)
        "platformVersion": "9",  #手机版本 (必填)
        "deviceName": "FJH7N19xxx00457",   #设备编码,不会进行校验,但是没有会报错 (必填)
        "appPackage": "com.android.calculator2",    #运行的 Android 应用的包名 (必填)
        "appActivity": "com.huawei.calculator.Calculator",   #程序入口类名 (必填)
        "noReset": true   #在当前 session 下不会重置应用的状态。默认值为 false(非必填)
      }
      
    • 获取【设备名称】命令行输入【adb devices】,
      在这里插入图片描述
    • 获取【程序包名、程序入口类名
      1. 关闭手机所有后台程序
      2. . 打开 手机中 – 计算器-应用程序
      3. 在命令窗口输入【adb shell "dumpsys window | grep mCurrent
        在这里插入图片描述

      如果上面命令正确启动报错,说明当前的appActivity设置的不是app首次进入的appActivity,可以解析apk文件

      • aapt dump badging apk包路径 |findstr package
      • aapt dump badging F:\my_tools\DigiFinex_V2023.10.12_debugT.apk |findstr package
      • aapt dump badging apk包路径 |findstr activity
      • aapt dump badging F:\my_tools\DigiFinex_V2023.10.12_debugT.apk |findstr activity
        在这里插入图片描述
  3. 配置好所需功能后,保存配置,点击启动会话
    在这里插入图片描述

  4. 会发现手机端已经自动跳转到计算器界面,并显示在电脑端appium窗口左侧
    在这里插入图片描述

  • 注:如果手机是第一次连接appium,会提示下载一个软件【Appium Settings】,正常下载安装即可,安装后的APP如图中红框所示

    在这里插入图片描述
    之后再次使用就无需下载,【Appium Settings】运行时会显示在手机通知栏,如图中红框所示
    在这里插入图片描述

  • 通过鼠标点击电脑appium上的手机计算器界面,录制需要测试的操作(以测试九九乘法表为例)

    • 首先在DOS窗口中输入【adb shell pm clear 包名】,按enter,意为清除缓存,防止缓存对将要进行的测试造成影响,返回结果为【Success】即清除缓存成功
      在这里插入图片描述

    • 点击红框处眼睛图标,即为开始录制
      在这里插入图片描述

  • 开始录制具体操作,以操作7*8为例
    在这里插入图片描述

    在这里插入图片描述

  • 将录制的代码复制到pycharm

    from appium import webdriver
    from appium.webdriver.common.appiumby import AppiumBy
    from appium.webdriver.common.touch_action import TouchAction
    
    # Appium服务器地址
    appium_server = 'http://127.0.0.1:4723/wd/hub'
    # Appium测试设备配置
    desired_caps = {
        "platformName": "Android",
        "appium:platformVersion": "9",
        "appium:deviceName": "FJH7N19131000457",
        "appium:appPackage": "com.android.calculator2",
        "appium:appActivity": "com.huawei.calculator.Calculator",
        'unicodeKeyboard': True,  # 使用自带输入法,输入中文时填True
        'resetKeyboard': True,  # 执行完程序恢复原来输入法
        'noReset': True,  # 不要重置App,如果为False的话,执行完脚本后,app的数据会清空,比如你原本登录了,执行完脚本后就退出登录了
        'newCommandTimeout': 6000
    }
    # 连接Appium服务器
    driver = webdriver.Remote(appium_server, desired_caps)
    driver.implicitly_wait(10)
    # TODO 干掉弹框
    TouchAction(driver).tap(x=777, y=2192).perform()
    
    # 清空计算器
    driver.find_element(AppiumBy.ID, "com.android.calculator2:id/op_clr").click()
    
    for i in range(1, 10):
        for j in range(i, 10):
            # TODO 按下 9
            el1 = driver.find_element(AppiumBy.ID, f'com.android.calculator2:id/digit_{i}')
            el1.click()
    
            # TODO 按下 乘X
            el2 = driver.find_element(AppiumBy.ACCESSIBILITY_ID, "乘")
            el2.click()
    
            # TODO 按下 8
            el3 = driver.find_element(AppiumBy.ID, f'com.android.calculator2:id/digit_{j}')
            el3.click()
    
            # TODO 获取 result 结果
            el4 = driver.find_element(AppiumBy.ID, "com.android.calculator2:id/result")
            print(f"{i} X {j} = {el4.text}", end=", ")
    
            # 清除
            el6 = driver.find_element(AppiumBy.ID, "com.android.calculator2:id/op_clr")
            el6.click()
        print(f"\n-----{i}乘法已完毕-----------")
    
    driver.quit()
    
    • 运行结果:
      在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python堆栈详细介绍

概要 虽然一些数据结构是通用的并且可以在广泛的应用中使用,但其他数据结构是专门化的并且被设计用于处理特定问题。堆栈就是这样一种专门的结构,以其简单性和非凡的实用性而闻名。 那么,什么是栈呢?从本质上讲,堆栈…

web3通过antd 在React dapp中构建订单组件基本结构

上文web3 dapp React项目引入 antd 对 balance 用户token信息组件进行样式改造 中 我们导入 antd组件 算是比较完整的编写了用户资产组件 那么 今天开始 我们就要说订单组件了 这个就会比之前的复杂很多 我们还是先开环境 ganache 终端执行 ganache -d然后 将合约 发布到区块链…

使用promise创建一个同步事件驱动api

使用promise创建一个同步事件驱动api 事件驱动体系结构(EDA)是一种强大的方法,可以在网络上构建松散耦合、性能好、可伸缩的应用程序。它支持非常多功能,如推送通知、协作编辑和多人操作,以及其他实时交互。 但有时模型与我们开发人员需要的…

【树的存储结构,孩子链表】

文章目录 树和森林树的存储结构孩子链表 树和森林 森林:是m(m>0)棵互不相交的树的集合。 树的存储结构 1.双亲表示法 实现:定义结构数组存放树的结点,每个结点含两个域。 数据域:存放结点本身信息。 双亲域:指…

虚假内容检测,谣言检测,不实信息检测,事实核查;纯文本,多模态,多语言;数据集整理

本博客系博主个人理解和整理所得,包含内容无法详尽,如有补充,欢迎讨论。 这里只提供数据集相关介绍和来源出处,或者下载地址等,因版权原因不提供数据集所含的元数据。如有需要,请自行下载。 “Complete d…

亚马逊云科技海外服务器初体验

目录 前言亚马逊云科技海外服务器概述注册使用流程实例创建性能表现用户体验服务支持初体验总结 前言 随着云原生技术的飞速发展,越来越多的企业和开发者选择云服务器来作为自己的使用工具,云原生技术的发展也促进了云服务厂商的产品发展,所…

Leetcode Hot 100之四:283. 移动零+11. 盛最多水的容器

283.移动零 题目: 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0] …

算法通关村第七关-黄金挑战二叉树迭代遍历

大家好我是苏麟 , 今天带来二叉树的迭代遍历 . 二叉树的迭代遍历 前序编列 描述 : 给你二叉树的根节点 root ,返回它节点值的 前序 遍历。 题目 : LeetCode 二叉树的前序遍历 : 144. 二叉树的前序遍历 分析 : 前序遍历是中左右,如果还有左子树就一…

一款基于.Net开发、开源、支持多平台云存储文件管理器

目录 01 项目简介02 项目代码03 部分截图04 项目地址 今天给大家推荐一款基于基于.Net开发、开源的,支持多平台的云存储文件管理器。 01 项目简介 Camelotia是一款云存储文件管理器,基于.Net UI框架和ReactiveUI框架开发的,目前支持的平台有…

AI:75-基于生成对抗网络的虚拟现实场景增强

🚀 本文选自专栏:AI领域专栏 从基础到实践,深入了解算法、案例和最新趋势。无论你是初学者还是经验丰富的数据科学家,通过案例和项目实践,掌握核心概念和实用技能。每篇案例都包含代码实例,详细讲解供大家学习。 📌📌📌在这个漫长的过程,中途遇到了不少问题,但是…

Bitget Wallet:使用 Base 链购买 ETH 的简明教程

Base 链是一种 Layer 2(L2)公链,它可以为用户提供以太坊(ETH)代币,而 Bitget Wallet 是一款多功能加密货币钱包,支持 Base 链以及其他主要区块链。

进行 “最佳价格查询器” 的开发

前置条件 public class Shop {private final String name;private final Random random;public Shop(String name) {this.name name;random new Random(name.charAt(0) * name.charAt(1) * name.charAt(2));}public double getPrice(String product) {return calculatePrice…

SpringBoot自动配置的原理篇,剖析自动配置原理;实现自定义启动类!附有代码及截图详细讲解

SpringBoot 自动配置 Condition Condition 是在Spring 4.0 增加的条件判断功能,通过这个可以功能可以实现选择性的创建 Bean 操作 思考:SpringBoot是如何知道要创建哪个Bean的?比如SpringBoot是如何知道要创建RedisTemplate的?…

剖析WPF模板机制的内部实现

剖析WPF模板机制的内部实现 众所周知,在WPF框架中,Visual类是可以提供渲染(render)支持的最顶层的类,所有可视化元素(包括UIElement、FrameworkElment、Control等)都直接或间接继承自Visual类。…

单例模式 rust和java的实现

文章目录 单例模式介绍应用实例:优点使用场景 架构图JAVA 实现单例模式的几种实现方式 rust实现 rust代码仓库 单例模式 单例模式(Singleton Pattern)是最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建…

【第2章 Node.js基础】2.4 Node.js 全局对象...持续更新

什么是Node.js 全局对象 对于浏览器引擎来说,JavaScript 脚本中的 window 是全局对象,而Node.js程序中的全局对象是 global,所有全局变量(除global本身外)都是global 对象的属性。全局变量和全局对象是所有模块都可以调用的。Node.is 的全局…

docker部署mongodb

1:拉去momgodb镜像 2:拉去成功后,通过docker-compose.yml配置文件启动mongodb,docker-compose.yml配置如下 version: 3.8 services:mongodb-1:container_name: mongodbimage: mongo ports:- "27017:27017"volumes:- G:…

TCP/IP详解

TCP/IP详解 一、网络基础1.TCP/IP网络分层2.IP地址和端口号3.封装与分用4.客户-服务端模型 二、链路层1.以太网IEEE802封装2.环回接口 Loopback Interface3.最大传输单元MTU和路径MTU 三、网络层 - IP1.IP首部的关键信息2.IP路由选择3.子网寻址和子网掩码4.ICMP和IGMP 四、传输…