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

news2024/11/25 13:00:56

文章目录

  • 一.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()
    
    • 运行结果:
      在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Delphi】Android 开发HTTP请求出错解决方案

目录 一、故障现象 二、原因及解决方案 一、故障现象 在android内建的WebBrowser浏览器中通过http访问一个网站(注意不是https),出现如下错误提示: 在使用ntfy的时候,访问http定义的服务器地址(注意不是…

通过postgis空间库导入sql格式的矢量数据到arcgis中

1、在postgis中创建数据库 命名为test3 2、创建空间扩展 3、导入sql矢量文件 进入psql.exe目录中 进入dos命令框中 输入命令,其中host输入自己的主机ip,database为自己的数据库名称,数据路径修改为自己电脑上的路径,注意反斜杠 psql

github官网打不开或访问慢的解决办法

对国内程序员而言,github官网经常面临打不开或访问慢的问题,今天教你一招非常简单且好用的小技巧,轻松访问github官网。 1、github官网打不开的原因 首选我们说下github官网打不开的原因到底是什么。细心的同学会发现,github偶尔…

SDL2 简单介绍以及Windows开发环境搭建

1.简介 SDL(Simple DirectMedia Layer)是一个跨平台的多媒体开发库,使用C语言写成,用于实现音频、图形、输入以及窗口功能的处理。它提供了一个简单、易用的API,可以帮助开发者快速构建跨平台的多媒体应用程序。 SDL…

国外访问学者/博士后留学人员反诈骗指南

访问学者/博士后/联合培养博士人员出国后,对当地环境及政策不熟悉,需要提高防范意识,为此,知识人网小编特整理这篇反诈骗指南,提醒留学人员防微杜渐、未雨绸缪。 近日,多国使馆发布相关提醒:不法…

kali linux系统选用gnome桌面安装完成后无法调节屏幕亮度踩坑过程( 2301_77564090)

方法一: 在终端通过xrandr命令查看当前显示屏名字 然后输入命令调节屏幕亮度,我调节的是原先的70%, xrandr --output eDP --brightness 0.7 方法一能成功调节,但每次开机屏幕亮度都自动回调到100%,每次都要手动打开终…

5G毫米波通信中的关键技术

随着5G技术的快速发展,毫米波通信作为其中的一项重要技术,在高速数据传输、低延迟通信和大规模连接等方面具有显著的优势。本文将探讨5G毫米波通信中的关键技术,包括毫米波频段的选择、信号处理技术和MIMO技术等。 一、毫米波频段的选择 毫米…

Node版本管理工具——Nvm

文章目录 前言基础常识彼此之间的关系 一、安装 nvm?查看是否安装成功 二、配置下载源三、nvm常用命令 前言 nvm 全名 node.js version management,顾名思义是一个nodejs的版本管理工具。通过它可以安装和切换不同版本的nodejs。 基础常识 node&#x…

掌握互联网的未来:5G时代的新机遇

随着5G技术的快速发展,我们正步入一个全新的互联网时代。5G不仅仅是速度的飞跃,它还代表着无限的可能性和前所未有的创新机遇。本文将探讨5G如何重新定义互联网,并为您提供洞察如何抓住这波科技浪潮。 5G技术的核心优势 超高速度&#xff1a…

Git的安装和常用命令Git与SVN的区别Gitee远程仓库团队开发代码共享演示

目录 一、Git入门 1.1 Git简介 1.2 Git与SVN的区别 1.2.1 详解 1.2.2 图解 1.3 Git相较于SVN的优势与劣势 1.3.1 Git的优势与劣势 1.3.2 SVN的优势与劣势 1.4 Git的工作流程 1.4.1 图解 1.4.2 详解 二、Git的安装以及常用命令 2.1 Git官网链接 2.2 安装步骤 2.…

国产小体积超低成本电动车仪表智能刷卡解锁13.56M非接触式读写芯片CI522兼容替代RC522

Ci522电动车仪表一键启动芯片 Ci522是一个高度集成的,工作在13.56MHz的非接触式读写器芯片,阅读器支持ISO/IEC 14443 A/MIFARE。 无需外围其他电路,Ci522的内部发送器可驱动读写器天线与ISO/IEC 14443 A/MIFARE卡和应答机通信。接收器模块提…

基于【宝塔+NPS】内网穿透搭建教程

下载服务端 https://github.com/ehang-io/nps/releases 我这里选择linux_amd64_server.tar.gz 执行安装命令 sudo ./nps install安装后修改/etc/nps/conf下的文件不是解压里的 然后修改里面的4处内容 宝塔docker 安装 nps 运行 nps 容器,并设置开机自启动 docke…

基于springboot实现高校党务平台管理系统【项目源码】计算机毕业设计

基于springboot实现高校党务平台管理系统演示 Java技术 Java是由Sun公司推出的一门跨平台的面向对象的程序设计语言。因为Java 技术具有卓越的通用性、高效性、健壮的安全性和平台移植性的特点,而且Java是开源的,拥有全世界最大的开发者专业社群&#x…

解决Jenkins执行git脚本时报错:No such device or address问题

问题现象: Jenkins执行BeanShell脚本时,报错:jenkins fatal: could not read Username for http://112.11.120.1: No such device or address 解决方案: 解决服务器拉取git仓库的代码权限,使用高级子模块克隆功能。…

TexGen简单模型对应inp文件简单梳理-1

模型 默认最简单的编织复材,编辑材料属性时发现基体属性设置正常,各向同性材料,但是纱线的材料属性却没有弹性性能的设置。 导出inp文件后,导入ABAQUS中其实可以看到有两种材料,纱线也是有属性的。 ABAQUS中修改属性的…

Git-Lab私域共享代码

1.导读 本教程主要讲解了GitLab在项目的环境搭建和基本的使用,可以帮助大家在企业中能够自主搭建GitLab服务,并且可以GitLab中的组、权限、项目自主操作。 - GitLab简介 - GitLab环境搭建 - GitLab基本使用(组、权限、用户、项目) 2.GitLab简介 Gi…

DTC商业模式研报 | 创新DTC策略利于提升业务灵活性和数字化体验

报告摘要 本报告由ADYEN制作。ADYEN是一家直营业务为支付的荷兰公司,通过整合包括银行卡、支付宝、Paypal在内的多种流行支付方式,它允许企业接受电子商务,移动和销售点付款,极大地简化了消费者支付的流程,目前该机构…

工业园区一般用多大规格的电表?

随着我国经济的快速发展,工业园区在各地区如雨后春笋般崛起。作为电力系统的重要组成部分,电表的选择与应用对于工业园区的稳定运行至关重要。那么,工业园区一般用的是多大规格的电表呢?下面,小编就来给大家揭秘一下&a…

quickapp_快应用

目录 官网概述开发前提[1] 安装IDE问题-IDE打开是英文 [2] 创建项目[3] 运行项目[4] 项目结构 开发调试USB真机调试扫码调试 上传发布步骤error: 版本号必须高于上一个版本的 页面(文件)组件快应用组件常用总结快应用组件第三方组件库 页面级组件自定义组件(子组件)引入自定义组…

国标28181-2022/GB28181-2022国标检测

最近两周带了几个人一起开发国标28181-2022的平台检测, 由于没有28181-2022设备,目前一所还没有一家平台检测过,所以压力比较大,不过还好把28181-2022平台全项检测顺利过了,还帮忙测出了检测中心NVR的几个bug。看了下这…