python+appium自动化测试之如何控制App的启动和退出
作者:蜗牛Tin 发布时间:2023-06-24 12:45:01
由于本人使用的是Android设备做自动化测试,所以以下内容均基于Android系统做出的整理
一、启动app
启动app需要设置Capability参数,而Capability参数放在Desired Capalibity中,Desired Capalibity告诉Appium想要的自动化平台和应用程序,这是一组键值对,主要是用于通知Appium服务器建立需要的session
设置Capability的公共部分
platformName 自动化测试手机的操作系统(Android/iOS)
platformVersion 手机对应的版本(Android 10)
deviceName 连接的设备名(模拟器或真机)
设置Capability 的Android部分
appActivity 通过APK包获取,获取方式在下方有说明
appPackage 通过APK包获取包名,获取方式在下方有说明
Android完整案例:
def start(self):
caps = {"platformName": "Android",
"deviceName": "U4AIUKFAL7W4MJLR",
"platforVersion": "9",
"appPackage": "com.sina.weibo",
"appActivity": "com.sina.weibo.SplashActivity",
"autoGrantPermissions": "true",
"automationName": "UiAutomator2"
}
self.driver = webdriver.Remote("http://localhost:4723/wd/hub", caps)
1.plateforName的作用?
操作系统,例如:Android、iOS、FirefoxOS
2.deviceName的作用是什么?(获取设备名的方式在下面内容)
设备名,连接的设备名(真机或模拟器)
3.platforVersion的作用是什么?
操作系统版本,对应连接的模拟器或手机的系统版本
4.appActivity和appPackage的作用是什么?(获取的方式在下面内容)
使Appium确切知道应为您的应用程序启动哪个程序包和活动。否则,Appium会尝试从您的应用清单中自动确定这些内容。
5.autoGrantPermissions的作用是什么?
让appium自动授权app权限,如果noReset为True,则该条不生效(该参数为Android独有),对应的值为True或False
6.automationName的作用是什么?
使用引擎,默认为Appium,其中Appium、UiAutomator2、Selendroid、Espresso用于Android,XCUITest用于iOS
7.webdriver.Remote("http://localhost:4723/wd/hub", caps)的作用是什么?
webdriver.Remote实际上就是原生webdriver的子类,另外Remote()构造函数的第一个参数中需要显示指定appium server监听的端口
二、退出App
def teardown(self):
driver.quit()
三、appium实现原理
客户端(即PC端)通过4723端口,向服务端(server)发送代码请求,服务端与移动端(设备:手机或模拟器)通过4724端口进行通信,当服务端接收到请求后,移动端的Bootstrap.jar包,将命令传送给Uiautomator执行点击、滑动的操作。
Bootstrap的作用:启动socket通信,监听4724端口
如下图所示:
appium只是一个框架,调用的自动化框架是Android或iOS本身的框架,默认端口号是4723,本地的IP地址是:http://127.0.0.1,或http://locahost
四、如何获取deviceName?
移动端在“手机->设置->开发者选项”中打开USB调试,PC端按下【Windows+R】,输入cmd,运行cmd,输入adb devices,如下图所示:
图中的device前面的参数即表示设备名:U4AIUKFAL7W4MJR
五、如何获取apk的appActivity和appPackage?
1、在Android SDK的文件夹下找到aapt.exe应用程序,在"D:\Android\SDK\build-tools\30.0.1"路径下,如下图所示:
2、按下【Windows+R】,输入cmd,运行cmd ,进入该盘,再进入appt.exe所在的文件夹,输入的内容为:“cd D:\Android\SDK\build-tools\30.0.1”,则可以进入该文件夹,进入文件夹后输入“aapt dump badging apk所在的路径+apk名字”,如下图所示即为成功,下图所示为获取到的app的appPackage
下图所示为获取到的app的appActivity
来源:https://www.cnblogs.com/TinHuang/p/15539544.html


猜你喜欢
- function annotation 写法:使用冒号 : 加类型代表参数类型默认值参数示例:b: int = 2使用&
- 前言:record类型,这是一种新引用类型,而不是类或结构。record与类不同,区别在于record类型使用基于值的相等性。例如:publ
- 于是写测试程序。。。不行 下载最新的ODBC。。。还是不行 通过sql plus查询。。。咦?竟然也查不到。。。 于是,折腾。。。折腾。。。
- 如下所示:1. 在PyCharm下安装pyinstaller2. 在Terminal下输入:“pyinstaller -F -w *.py”
- 一、文章前言此文主要通过小程序实现对比人脸相似度,并返回相似度分值,可以基于分值判断是否为同一人。人脸登录、用户认证等场景都可以用到。二、具
- 为了方便例子讲解,现有数组和json对象如下var demoArr = ['Javascript', 'Gulp
- goroutine 泄漏和避免泄漏的最佳实践Go的奇妙之处在于,我们可以使用goroutines和channel轻松地执行并发任务。如果在生
- 本文实例讲述了JavaScript中匿名函数用法。分享给大家供大家参考。具体分析如下:JS中可以不用给函数名称,而是在使用时直接通过func
- django上线后,需要把setting.py文件的debug=True改为False,以防暴露代码报错问题。因为我项目用到css的地方只有
- 当后端并未编写后台json数据,但是前端又要使用数据进行页面的编写,这是便可用mockjs编写一个假的数据源,发送ajax请求并获取数据1.
- 前言:本系列文章主要参考了《Ultimate ASP.NET Core 3 Web API》一书,对原文进行了翻译,同时适当删减、修改了一部
- [LeetCode] 180.Consecutive Numbers 连续的数字Write a SQL query to find all
- 下面通过对比来看看ASP中3种分页显示的性能,执行效率。一,使用存储过程分页,这种情况又分为两种方式:第一种,使用command对象,如下:
- 前言:在搭建开始前,我们先来梳理下web服务工作流程,先看下图:1、用户(PC)向web服务器发起http请求2、web服务器判断用户请求文
- 作为面向对象编程中实现控制反转(Inversion of Control,下文称IoC)最常见的技术手段之一,依赖注入(Dependency
- 常用的代码UPDATE `表名` SET `字段名`=ceiling(rand()*500000+500000) WHERE (条件);up
- 转眼又到了咱们中国传统的情人节七夕了,今天笔者就带大家来领略一下用Python表白的方式。让程序员的恋人们感受一下IT人的浪漫。
- 在实际应用中对于数据进行分析的时候,经常能看见缺失值,下面来介绍一下如何利用pandas来处理缺失值。常见的缺失值处理方式有,过滤、填充。一
- 使用explain关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的,分析你的查询语句或是表结构的性能瓶颈
- 实例如下所示:# -*- coding: utf-8 -*-#to find where use the table on xxxxx xx