【Appium学习总结1】----原理

article/2025/9/22 21:59:59

Appium 是一个开源工具,用于自动化 iOS 手机、 Android 手机和 Windows 桌面平台上的原生、移动 Web 和混合应用。

appium安卓设备通信流程:

脚本-----------------> appium server-----------------> bootstrap.jar-----------------> uiautomator2

脚本:PC端编写的自动化脚本

appium server:默认端口4723,负责监听4723

bootstrap.jar:在移动设备端开启一个socket服务把  从PC端发过来的命令转换为UIautomator   能够识别的命令并交给UIautomator执行                                       

uiautomator2:python格式的移动端UI测试框架,可以对安卓应用进行自动化测试操作

1、开启appium server服务,默认地址为0.0.0.0,端口为4723,并将测试设备信息告诉appium server

4723端口专门和脚本打交道,基于webdriver协议,webdriver作用就是启动基于webdriver wire协议的appium服务,接下来,脚本与appium server的通信实际是一个http request给appium server,请求body中,会以webdriver wire协议规定的json格式字符串告诉appium服务希望设备做什么

这里引入一个名词,disired capabilities,以key-value键值对存在,负责存储设备配置信息,通过post请求发给appium server,告诉server需要操作哪台设备,哪个应用

appium server启动日志:

[Appium] Welcome to Appium v1.21.0

[Appium] Non-default server args:

[Appium] relaxedSecurityEnabled: true

[Appium] allowInsecure: {

[Appium] }

[Appium] denyInsecure: {

[Appium] }

[Appium] Appium REST http interface listener started on 0.0.0.0:4723

[HTTP] --> POST /wd/hub/session

[HTTP] {"desiredCapabilities":{"platformName":"android","platformVersion":"7.0","deviceName":"MaxiSys device","appPackage":"com.autel.cloud.smsus","appActivity":"com.autel.cloud.maxifixhd.module.SmsWebViewActivity","ensureWebviewsHavePages":true},"requiredCapabilities":{}}

[MJSONWP]Calling AppiumDriver.createSession() with args: [{"platformName":"android","platformVersion":"7.0","deviceName":"MaxiSys device","appPackage":"com.autel.cloud.smsus","appActivity":"com.autel.cloud.maxifixhd.module.SmsWebViewActivity","ensureWebviewsHavePages":true},{},null]

从日志中可以分析得到appium server的启动地址为0.0.0.0,监听端口为4723,启动以后,会像URL为 /wd/hub/session的地址发送一个POST请求,请求内容就是desiredCapabilities下的内容,负责告诉appium server需要操控的设备信息

2、测试设备信息告诉appium server以后,需要创建session会话

session称为会话控制,session对象存储特定用户会话所需的属性及配置信息,对应到这里就是desirewd capabilities中的信息,脚本通过发送http请求,传入desired capabilities就可以开启session了,第一次创建,appium会调用androidDriver为client生成一个session和sessionId,并将sessionId作为响应返回给客户端,下次脚本发出操作请求是就会自带sessionId作为唯一标识,server按照此标识检索带有请求的session并使用

session的作用就是在appium服务上保持设备的状态信息,在多次操作行为中,配置信息不会丢失,程序就不会断开,不需要每次发送带配置信息的请求

创建session会话日志:

[Appium] Appium v1.21.0 creating new AndroidUiautomator2Driver (v1.65.0) session

[Appium] Applying relaxed security to 'AndroidUiautomator2Driver' as per server command line argument. All insecure features will be enabled unless explicitly disabled by --deny-insecure

[BaseDriver] Creating session with MJSONWP desired capabilities: {

[BaseDriver] "platformName": "android",

[BaseDriver] "platformVersion": "7.0",

[BaseDriver] "deviceName": "MaxiSys device",

[BaseDriver] "appPackage": "com.autel.cloud.smsus",

[BaseDriver] "appActivity": "com.autel.cloud.maxifixhd.module.SmsWebViewActivity",

[BaseDriver] "ensureWebviewsHavePages": true

[BaseDriver] }

[BaseDriver] Session created with session id: 50969533-e5a6-4ce8-8df7-cedea24cedba

3、appium server创建4724端口,将bootstrap.jar文件推送到移动设备

Appium server启动一个监听端口4724,同时向手机adb push一个bootstrap.jar脚本,移动设备端通过该脚本同时监听4724

设备通过该端口传输的命令执行APP,bootstrap.jar是appium运行在安卓测试机的一个UIautomator测试脚本,唯一功能就是在目标机器开启一个socket服务器把一个session中appium从pc端发过来的命令给Uiautomator执行处理

创建session成功之前,就已经把bootstrap.jar放入到了设备中,并开启设备上的基于appium bootstrap 的socket服务,监听4724端口,等待客户端连接

4、PC端脚本发送http请求给appium server,再转发给bootstrap.jar,经其转换为UIautomator可以识别的脚本去运行

请求发送日志:

[HTTP] --> POST /wd/hub/session/50969533-e5a6-4ce8-8df7-cedea24cedba/element

[HTTP] {"using":"xpath","value":"//*[@text='允许']","sessionId":"50969533-e5a6-4ce8-8df7-cedea24cedba"}

[MJSONWP (50969533)] Calling AppiumDriver.findElement() with args: ["xpath","//*[@text='允许']","50969533-e5a6-4ce8-8df7-cedea24cedba"]

[BaseDriver] Valid locator strategies for this request: xpath, id, class name, accessibility id, css selector, -android uiautomator

[BaseDriver] Waiting up to 0 ms for condition

[WD Proxy] Matched '/element' to command name 'findElement'

[WD Proxy] Proxying [POST /element] to [POST http://127.0.0.1:8200/wd/hub/session/2b43e5d0-73b7-4dd6-aedb-ad92829fd155/element] with body: {"strategy":"xpath","selector":"//*[@text='允许']","context":"","multiple":false}

[WD Proxy] Got response with status 200: {"sessionId":"2b43e5d0-73b7-4dd6-aedb-ad92829fd155","value":{"ELEMENT":"40799411-1536-4b5f-8179-380ab057a3c2","element-6066-11e4-a52e-4f735466cecf":"40799411-1536-4b5f-8179-380ab057a3c2"}}

[MJSONWP (50969533)] Responding to client with driver.findElement() result: {"element-6066-11e4-a52e-4f735466cecf":"40799411-1536-4b5f-8179-380ab057a3c2","ELEMENT":"40799411-1536-4b5f-8179-380ab057a3c2"}

[HTTP] <-- POST /wd/hub/session/50969533-e5a6-4ce8-8df7-cedea24cedba/element 200 597

UIautomator:

uiautomator是谷歌在android4.1版本发布时推出的一款UI测试框架,通过该框架提供的API对安卓应用进行自动化测试操作,第一款uiautomator是由java编写的,后来经过大神改编为python框架,也就是现在说的UIautomator2

boostrap为什么可以将PC端命令转换为UIaotumator可以识别脚本?

因为boostrap实际是一个UIautomator写的case包,它的入口类继承自UIautomatorTestCase,因此可以调用UIautomator中的方法去运行

 

 


http://chatgpt.dhexx.cn/article/jsdymaZQ.shtml

相关文章

Appium的使用

一、环境配置&#xff1a; 1、安装Node.js 2、配置JDK环境 3、配置Android SDK环境 4、安装Appium桌面版本 5、配置Python环境&#xff0c;安装selenium、Appium-Python-Client库 6、安装模拟器&#xff08;MuMu模拟器&#xff09; 环境配置参考&#xff1a; 这里是引用 二、使…

Appium 介绍以及工作原理

目录 1、什么是Appium&#xff1a;2、Appium各类组件&#xff1a;3、Appium理念&#xff1a;4、三张图了解 Appium工作原理&#xff1a; 1、什么是Appium&#xff1a; appium是一个移动端的自动化测试框架&#xff0c;可用于测试原生应用、移动网页应用、混合型应用&#xff0…

了解appium自动化的工作原理(uiautomator)

一、Appium加载的过程图解 Appium的原理 WebDriver script&#xff1a;我们的测试脚本&#xff08;java or python&#xff09; Appium&#xff1a; 会首先开启一个监听4723端口的server&#xff0c;接收测试脚本发送过来的对应请求&#xff0c;再将对应的请求发送给中间件Bo…

appium自动化的工作原理

appium自动化的工作原理 1. Appium组件 Appium Server Appium是一个C/S结构&#xff0c;包括Server和Client。Appium Server是Appium的服务端&#xff0c;作为一个Web接口服务&#xff0c;使用Node.js实现。 Appium Desktop Appium Server的图像界面&#xff0c;可设置启…

【Appium系列】- 框架原理

目录 简介 Appium支持哪些平台呢&#xff1f; Appium架构 Session Desired Capabilities 简介 Appium是一个跨平台的开源的自动化测试工具&#xff0c;可以用于测试不同类型的移动端应用程序&#xff08;Appium基础之App类型&#xff09;&#xff0c;这是一个非常优秀好用…

Appium学习日记(一)——Appium工作原理及其主要组件

Appium工作原理及其主要组件 Appium的工作原理(how Appium works) Appium的核心是一个服务器&#xff0c;它侦听符合API规范WebDriver的传入HTTP请求。对于那些过去使用Selenium为基于浏览器的应用程序进行测试自动化的人来说&#xff0c;这听起来可能已经很熟悉了。   WebD…

Appium详解

一、Appium安装 1、安装JDK&#xff08;1.8.0&#xff09;并配置环境 1、JDK文件下载安装下载JDK文件&#xff0c;点击运行安装2、配置环境&#xff08;1&#xff09;新建一个名为“JAVA_HOME”的环境变量&#xff0c;变量值为JDK的安装路径&#xff08;2&#xff09;选择Path…

appium工作原理详讲

appium简介 appium是一个移动端自动化框架&#xff0c;它采用C/S的设计模式&#xff0c;支持多类开发语言&#xff08;java python js c#…&#xff09;、支持多平台(ios android)&#xff0c;支持跨平台使用(windows linux)。它适用于原生或混合移动应用&#xff1b; appium…

Appium自动化测试基础 — APPium基本原理

1、APPium自动化测试架构 APPium是一个C/S架构的自动化测试框架&#xff0c;APPium的核心其实是一个暴露了一系列REST API的server。&#xff08;也就是Appium的核心是一个提供了一组REST API的Web服务器。&#xff09; 这个server的功能其实很简单&#xff1a;监听一个端口&a…

Appium的工作原理终于搞清楚了

目录 1. Appium简介 1.1 Appium的理念 1.2 Appium 的设计 1.3 Appium 的概念 2. Appium原理架构 3. appium的工作流程 4. Appium-Uiautomator2-Server 4.1 Appium-Uiautomator2-Server简介 4.2 appium-uiautomator2-server运行原理 4.3 bootstrap vs appium-uiautoma…

APP自动化测试系列之Appium介绍及运行原理

在面试APP自动化时&#xff0c;有的面试官可能会问Appium的运行原理&#xff0c;以下介绍Appium运行原理。 一、Appium介绍 1.Appium概念 Appium是一个开源测试自动化框架&#xff0c;可用于原生&#xff0c;混合和移动Web应用程序测试。它使用WebDriver协议驱动IOS&#xf…

Appium工作原理

一、Appium工作原理 1、Appium启动的时候&#xff0c;会创建一个http\\127.0.0.1:4723\wd\hub服务端&#xff08;中转站&#xff09; 2、4723端口接收client(也就是测试脚本)发来的请求&#xff0c;解析对应的请求 3、appium server把对应的请求发给bootstrap.jar&#xff0c;它…

蓝桥杯C/C++ 基础练习 十六进制转八进制 C语言

题目&#xff1a; 分析&#xff1a; 思路&#xff1a;先将十六进制转为二进制&#xff0c;然后将二进制转为八进制 遇到的问题如下&#xff1a; 1、输入格式和输出格式&#xff0c;决定了需要用数组存储十六进制数、二进制数以及八进制数。由于有多个字符串&#xff08;多位…

蓝桥杯——十六进制转八进制(Java解法)

这道题其实挺难的&#xff0c;之前做过一次&#xff0c;用的十六进制转化为十进制&#xff0c;然后用十进制再转化为八进制&#xff0c;代码很简单&#xff0c;用的jdk上自带的进制转换进行换算。 import java.util.Scanner; /** * author 作者 E-mail: WYJ 1627407425qq.com…

蓝桥杯-十六进制转八进制(Java)

蓝桥杯-十六进制转八进制(Java) 最近在练习算法题&#xff0c;打算应付一下下学期的蓝桥杯&#xff0c;写写博客记录一下我的学习过程&#xff0c;对算法感兴趣的朋友可以给小编点点关注(重要的事情加上强调标志&#xff0c;o(&#xffe3;︶&#xffe3;)o)&#xff0c;这个假…

蓝桥杯C语言 十六进制转八进制

十六进制转八进制 思路分析&#xff1a; 39十六进制先转换为4位二进制&#xff0c;3为0011&#xff0c;9为1001&#xff0c;所以39的二进制为00111001,又把二进制转化为3位八进制&#xff0c;从右边开始数&#xff0c;001为1&#xff0c;111为7&#xff0c;所以39的八进制为71。…

十六进制转换八进制

问题描述 给定n个十六进制正整数&#xff0c;输出它们对应的八进制数。 输入格式   输入的第一行为一个正整数n &#xff08;1<n<10&#xff09;。   接下来n行&#xff0c;每行一个由09、大写字母AF组成的字符串&#xff0c;表示要转换的十六进制正整数&#xff0…

蓝桥杯练习:C语言十六进制转八进制

这题对我来说是有点难度的,最后做出来,但是提交显示 运行错误,看不出哪里出错了. 我的思路: 将十六进制转化为二进制,二进制最后转化为八进制. 首先将十六进制存入数组,然后将数组中每一位转化为对应的十进制数,之后将再将每一位十进制数转化为二进制数,将这些二进制数以每三…

C语言十六进制转八进制

思路&#xff1a;将十六进制先转为十进制再转为八进制 十六进制转十进制:与二进制转十进制类似。对十六进制每个数从左往右依次乘16的0,1,2,......并相加得到相应的十进制。 比如&#xff1a;对123ABC&#xff0c;1216&#xff08;0&#xff09;1116&#xff08;1&#xff09…

XPC U盘启动盘的制作

XPC U盘启动盘的制作 对于XPC目标机的启动&#xff0c;我们可以通过网络、硬盘或者 U盘启动目标机。这里介绍一下通过U盘的气动&#xff0c;因为这个相对而言比较简单。 选择一个4G以下的U盘&#xff0c;最好为2G选择一台XP系统的电脑&#xff08;最好为工控机&#xff0c;必…