【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 seleniumpip show appium-python-client卸载当前的selenium和appium-python-clientpip uninstall seleniumpip 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 按下 9el1 = driver.find_element(AppiumBy.ID, f'com.android.calculator2:id/digit_{i}')el1.click()# TODO 按下 乘Xel2 = driver.find_element(AppiumBy.ACCESSIBILITY_ID, "乘")el2.click()# TODO 按下 8el3 = 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()
    
    • 运行结果:
      在这里插入图片描述

五.元素定位、元素事件操作

【Python】AppUI自动化—appium自动化元素定位、元素事件操作(17)下

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

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

相关文章

计算机msvcp140.dll重新安装的四个解决方法,专门解决dll文件丢失问题的方法

在我多年的电脑使用经历中,曾经遇到过一个非常棘手的问题,那就是电脑提示找不到msvcp140.dll文件。这个问题让我苦恼了很久,但最终还是找到了解决方法。今天,我就来分享一下我解决这个问题的四种方法,希望对大家有所帮…

python爬虫怎么翻页

爬虫程序的代码实现如下&#xff1a; #include <iostream> #include <string> #include <curl/curl.h>int main() {CURL *curl;CURLcode res;std::string readBuffer;curl_global_init(CURL_GLOBAL_DEFAULT);curl curl_easy_init();if(curl) {curl_easy_se…

AI 绘画 | Stable Diffusion精确控制ControlNet扩展插件

ControlNet ControlNet是一个用于控制AI图像生成的插件&#xff0c;通过使用Conditional Generative Adversarial Networks&#xff08;条件生成对抗网络&#xff09;的技术来生成图像。它允许用户对生成的图像进行更精细的控制&#xff0c;从而在许多应用场景中非常有用&#…

每次重启完IDEA,application.properties文件里的中文变成?

出现这种情况&#xff0c;在IDEA打开Settings-->Editor-->File Encodings 然后&#xff0c;你需要将问号改为你需要的汉字。 重启IDEA&#xff0c;再次查看你的.properties文件就会发现再没有变成问号了

order by的注入与Insert ,update和delete注入

order by的注入 Insert &#xff0c;update和delete注入

大二第四周总结——用原生js封装一个分页器

用原生js封装一个分页器 起因&#xff1a;这次项目还是用原生的js来写的&#xff0c;我负责的是后台&#xff0c;分页是后台最常见的一个功能了&#xff0c;于是干脆封装一下,废话少说&#xff0c;直接上代码 这里是基本的样式 .pagination {display: flex;width: 600px;hei…

PCB知识补充

系列文章目录 文章目录 系列文章目录参考文献PCB知识互连线电阻过孔/铜箔电流能力铜箔载流能力过孔载流能力 热设计电磁兼容及部分要求 参考文献 [1]牛森,张敏娟,银子燕.高速PCB多板互联的电源完整性分析[J].单片机与嵌入式系统应用,2023,23(09). [2]陈之秀,刘洋,张涵舒等.高…

Django中简单的增删改查

用户列表展示 建立列表 views.py def userlist(request):return render(request,userlist.html) urls.py urlpatterns [path(admin/, admin.site.urls),path(userlist/, views.userlist), ]templates----userlist.html <!DOCTYPE html> <html lang"en">…

【Java】反射

1.什么是反射机制? Java 反射机制是在运行状态中&#xff0c;对于任意一个类&#xff0c;都能够知道这个类中的所有属性和方法&#xff0c;对于任意一个对象&#xff0c;都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为 Java 的反射机制…

《软件工程与计算》期末考试真题范例及答案

今天分享一套针对《软件工程与计算》这本书的真题案例&#xff0c;有关《软件工程与计算》23章内容的重点知识整理&#xff0c;已经总结在了博客专栏中&#xff0c;有需要的自行阅读&#xff1a; 《软件工程与计算》啃书总结https://blog.csdn.net/jsl123x/category_12468792.…

进程状态和优先级

文章目录 进程状态Linux中具体的进程状态僵尸进程孤儿进程 进程优先级 正文开始前给大家推荐个网站&#xff0c;前些天发现了一个巨牛的 人工智能学习网站&#xff0c; 通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。 点击跳转到网站。 进程状态 进程在操…

每天一点python——day66

#每天一点Python——66 #字符串的分隔 #如图&#xff1a; #方法①split()从左开始分隔&#xff0c;默认空格为分割字符&#xff0c;返回值是一个列表 shello world jisuanji#首先创建一个字符串 list1s.split() print(list1)#输出结果是&#xff1a;[hello, world, jisuanji]注…

Git的原理与使用(一)

目录 Git初始 Git安装 Git基本操作 创建git本地仓库 配置git 工作区,暂存区,版本库 添加文件,提交文件 查看.git文件 修改文件 版本回退 小结 Git初始 git是一个非常强大的版本控制工具.可以快速的将我们的文档和代码等进行版本管理. 下面这个实例看理解下为什么需…

Java 简单实现一个 UDP 回显服务器

文章目录 UDP 服务端UDP 客户端实现效果UDP 服务端(实现字典功能)总结 UDP 服务端 package network;import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.SocketException;public class UdpEchoServer {private Da…

【开源】基于Vue.js的大学兼职教师管理系统的设计和实现

目录 一、摘要1.1 项目介绍1.2 项目详细录屏 二、研究内容三、界面展示3.1 登录注册3.2 学生教师管理3.3 课程管理模块3.4 授课管理模块3.5 课程考勤模块3.6 课程评价模块3.7 课程成绩模块3.8 可视化图表 四、免责说明 一、摘要 1.1 项目介绍 大学兼职教师管理系统&#xff0…

Java13新增特性

前言 前面的文章&#xff0c;我们对Java9、Java10、Java11、Java12 的特性进行了介绍&#xff0c;对应的文章如下 Java9新增特性 Java10新增特性 Java11新增特性 Java12新增特性 今天我们来一起看一下Java13这个版本的一些重要信息 版本介绍 Java 13 是在 2019 年 9 月 17 日…

Technology Strategy Patterns 学习笔记9 - bringing it all together

1 Patterns Map 2 Creating the Strategy 2.1 Ansoff Growth Matrix 和owth-share Matrix 区别参见https://fourweekmba.com/bcg-matrix-vs-ansoff-matrix/ 3 Communicating

Docker进阶——再次认识docker的概念 Docker的结构 Docker镜像结构 镜像的构建方式

前言 在微服务大量应用的互联网时代&#xff0c;经常能看到docker的身影。作为docker的爱好者&#xff08;在服务器安装MySQL&#xff0c;Redis。。。我用的都是docker&#xff09;&#xff0c;我也会持续深入学习和认识docker。 本篇博客再次介绍docker的基本概念&#xff0…

FPGA UDP RGMII 千兆以太网(3)ODDR

1 xilinx原语 在 7 系列 FPGA 中实现 RGMII 接口需要借助 5 种原语,分别是:IDDR、ODDR、IDELAYE2、ODELAYE2(A7 中没有)、IDELAYCTRL。其中,IDDR和ODDR分别是输入和输出的双边沿寄存器,位于IOB中。IDELAYE2和ODELAYE2,分别用于控制 IO 口输入和输出延时。同时,IDELAYE2 …

R系组播调优方案

修改/etc/sysctl.conf添加如下内容&#xff1a; Vim /etc/sysctl.con net.ipv4.ip_forward1 net.ipv4.ip_nonlocal_bind1 net.ipv4.conf.all.rp_filter0 net.ipv4.conf.default.rp_filter0 net.bridge.bridge-nf-call-arptables 0 net.bridge.bridge-nf-call-ip6tables 0 …