Appium手机Android自动化

目录

介绍

什么是APPium?

APPium的特点

环境准备

adb(android调试桥)常用命令

appium图形化简单使用 

连接手机模拟器

使用appium桌面端应用程序

​编辑

 整合java代码测试 

环境准备

引入所需依赖

书写代码简单启动

​编辑

Appium元素定位

id定位

介绍

代码测试

text定位

介绍

代码测试 

className定位 

 x-path定位

accessibility id定位

坐标定位

元素等待 

手势操作滑动 

appium常用api


介绍

什么是APPium?

APPium是一个开源测试自动化框架,适用于原生、混合或移动Web应用程序的自动化测试工具。 APPium使用WebDriver协议驱动iOS、Android等应用程序。

APPium的特点

支持多平台(Android、iOS等)

支持多语言(python、java、ruby、js、c#等)

APPium是跨平台的,可以用在OSX,Windows以及Linux桌面系统上运行。

APPium选择了Client/Server的设计模式。只要client能够发送http请求给server,那么client用什么语言来实现都是可以的,这就是如何做到支持多语言的原因;

APPium基于WebDriver协议,并进行了扩展。这样的好处是可以直接继承WebDriver API,Selenium(WebDriver)各种语言的binding都可以直接拿来使用,省去了为每种语言开发一个client的工作量。

Appium的哲学不需要重新编译或者修改应用;不被一种语言或者框架约束;不重复造轮子;开源免费

环境准备

本篇博客以java语言进行测试appium,所以本地电脑需要配置好jdk,其他环境android sdk和手机模拟器也是必须的

这里只提供android sdk和appium桌面版程序,jdk和手机模拟器可以百度找下

appium所需环境

下载好后解压android sdk

安装好android后配置下环境变量

来到android安装目录

点入到以下目录下

新增ANDROID_HOME环境变量

在path中新增变量

 配置好后在cmd中输入adb

appium安装一路默认即可

adb(android调试桥)常用命令

 

一、常用简单的adb命令:

1、adb devices:                        获取设备列表和设备的状态
2、adb get-state:                      获取设备的状态(设备的状态有三种:device,设备连接正常;offline,连接出现异常,设备无响应;unknown,设备未连接;)
3、adb kill-server,adb start-server:  结束,启动adb服务
4、adb install -r:                     覆盖安装应用(apk)
5、adb uninstall:                      卸载应用(应用包名)
6、adb pull :                          将设备上的文件复制到电脑上
7、adb push :                          将电脑上的文件复制到设备上
8、adb reboot :                        重启设备
9、adb connect :                       远程连接设备
10、adb disconnect :                   断开设备连接
二、adb shell pm基本的命令:

1、列出安装在设备上的应用

# adb shell pm list package -s     列出系统应用
# adb shell pm list package -3     列出第三方的应用
# adb shell pm list package -i     列出来源
# adb shell pm list package -f     列出包名和路径
2、列出应用apk的位置

# adb shell pm path packagename    列出应用apk的位置
3、列出应用的详细信息

# adb shell pm dump packagename    列出应用相关的信息
4、清除应用的缓存数据

# adb shell pm clear packagename   清除应用的缓存数据
5、安装卸载手机应用:

首先将test.apk文件push到手机目录中比如/data/local/tmp
# adb shell pm install /data/local/tmp/test.apk       安装
# adb shell pm install –r /data/local/tmp/test.apk    重新安装
# adb shell pm uninstall -k packagename               卸载,加k保留缓存数据
# adb shell pm install -d apk                         允许降级安装
三、adb shell am基本的命令:

1、启动一个 Activity:

# adb shell am start -n activityname    启动一个 Activity
2、等待页面启动完成:

# adb shell am start -W activityname    等待页面启动完成
3、先停止应用再启动:

# adb shell am start -S activityname    先停止应用再启动
4、结束应用:

# am force-stop  packagename            结束应用
三、adb shell dumpsys基本的命令:

1、监控应用数据:

# adb shell dumpsys cpuinfo       cpu信息
# adb shell dumpsys meminfo       内存信息
# adb shell dumpsys power         电源信息
# adb shell dumpsys battery       电池信息
# adb shell dumpsys wifi          wifi信息
# adb shell dumpsys notification  通知信息
# adb shell dumpsys activity      获取页面信息
四、关闭某项进程,以monkey为例:

杀死monkey进程:
# ps | grep monkey     查看monkey进程的pid
# kill pid             杀死monkey进程
五、最近12小时的资源情况:

# dumpsys procstats --hours 12    最近12小时的资源情况
 六、录制屏幕命令:

# adb shell screenrecord /sdcard/demo.mp4    视频录制命令
可选参数:
1、限制录制时间:
参数: --time-limit

2、指定视频分辨率大小:
参数: --size

3、指定视频的比特率:
参数: --bit-rate

4、在命令行显示log:
参数: --verbose
 七、截图命令:

# adb shell screencap -p /sdcard/screen.png    截图并保存到指定位置
八、input命令:

adb shell input:
<可选参数>
#text 输入文本
#keyevent 输入事件
#tap 点击
#swipe 滑动<坐标><坐标为原地,则是长按>
九、关于获取当前页面的信息:

# adb shell dumpsys activity top | findstr ACTIVITY    获取当前界面的Activity
# adb shell dumpsys activity | findstr mFocusedActivity   获取当前页面的activity
十、生成当前页面的xml文本:

# adb shell uiautomator dump [file]    获取当前页面的xml信息
text 控件中显示的文本内容 
class 控件的类型 
package 包名 
content-desc 说明 
checkable 是否允许check 
checked check状态 
clickable 是否允许click 
enabled 控件状态 
focusable 是否允许获取焦点 
focused 是否获取到焦点 
scrollable 是否允许滚动 
long-clickable 是否允许长安 
password 是否是密码控件 
selected select状态 
bounds 控件绘制的长宽及位置 四个数据,分成两组,分别是 左上坐标和右下坐标
 十一、打印页面的log信息:

# logcat -s ActivityManager    打印页面的log信息
十二、系统操作指令

   adb shell getprop ro.product.model  获取设备型号

adb shell getprop ro.build.version.release  获取设备 Android 系统版本

adb get-serialno  获取设备的序列号(设备号)

adb shell wm size  获取设备屏幕分辨率

adb shell dumpsys activity |find "mFocusedActivity" 查看前台应用包名,适用于 Android 7.0 以下,必须先启动 app

adb shell dumpsys activity |find "mResumedActivity" 查看前台应用包名,适用于 Android 8.0 以上,必须先启动 app

appium图形化简单使用 

连接手机模拟器

准备apk安装包,将apk安装包安装在手机模拟器上

启动cmd窗口,输入命令查看当前连接的应用

 adb devices

 

 连接相应的手机模拟器,每个手机模拟器的端口号也不同,这里以mumu模拟器进行测试,mumu模拟器端口为7555,其他模拟器端口如下

模拟器名称                        端口号
-------------------------------------
逍遥游                                 21503
夜神模拟器                          62001 
海马玩模拟器                      26944 
网易mumu模拟器                7555 
天天模拟器                          6555
BlueStacks                          5555
雷电安卓模拟器                   5555
天天安卓模拟器                  5037
安卓模拟器大师                  54001
Genymotion                       5555

连接模拟器

adb connect 127.0.0.1:端口号

使用appium桌面端应用程序

 打开appium

在高级设置里面进行一些配置设置

 

调整后保存为预设

 调整简单模式的主机为本地 

启动服务器

 

 点击启动检查会话

点击自动设定进行编辑

 deviceName(设备地址),platformName(平台名) 

appPacage名获取:

来到android sdk安装目录

输入cmd

 输入命令

aapt dump badging apk文件目录

 appActivity 主启动入口获取

在刚才的命令输入后往下翻找 找到 launchable-activity(并不是所有apk都是这个字段,也可能是其他的) 字段

 

 {
  "deviceName": "127.0.0.1:7555",
  "platformName": "Android",
  "appPackage": "com.tencent.mm",
  "appActivity": "com.tencent.mm.ui.LauncherUI",
  "automationName": "UiAutomator2",
  "noReset": "True"
}

 编辑后另存为预设

然后启动会话

 

可以看到模拟器的微信随着appium自动启动了 

下面以测试抖音为例

appium桌面客户端上方的工具栏都是模拟真人操作手机的操作

 通过appium客户端可以像浏览器的f12调试工具一样找到页面的各元素标签,从而进行操作

如果模拟器的app页面和appium显示不一样,那是appium是截图模拟器的app进行显示的,需要手动实时刷新

 整合java代码测试 

环境准备

jdk8+maven5.0以上版本

引入所需依赖

<dependency><groupId>io.appium</groupId><artifactId>java-client</artifactId><version>6.1.0</version>
</dependency>

书写代码简单启动

启动测试  启动速度可能会有些慢,根据个人电脑配置等因素而定

Appium元素定位

id定位
介绍

使用appium进行查看元素

 这个就如同html标签中的id属性一样,但是android可以允许有多个相同的id(这就有点坑)

代码测试

测试点击评论按钮

 启动测试

如果页面中有多个相同id,那么将元素都放到集合中,使用集合下标索引进行取元素点击

text定位
介绍

 

代码测试 

使用文本定位点击经验

系统太卡不再贴录屏结果了,可以自己尝试 

className定位 

 

 x-path定位

accessibility id定位

坐标定位

元素等待 

手势操作滑动 

由于前面博主引用的版本是6.1.0,所以这里需要自定义书写滑动代码

 

可以自行尝试,不再贴图,太卡了o(╥﹏╥)o  博主测试可以成功

appium常用api

 

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

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

相关文章

spring.factories的常用配置项

概述 spring.factories 实现是依赖 spring-core 包里的 SpringFactoriesLoader 类&#xff0c;这个类实现了检索 META-INF/spring.factories 文件&#xff0c;并获取指定接口的配置的功能。 Spring Factories机制提供了一种解耦容器注入的方式&#xff0c;帮助外部包&am…

详细了解C++中的namespace命名空间

键盘敲烂&#xff0c;月薪过万&#xff0c;同学们&#xff0c;加油呀&#xff01; 目录 键盘敲烂&#xff0c;月薪过万&#xff0c;同学们&#xff0c;加油呀&#xff01; 一、命名空间的理解 二、&#xff1a;&#xff1a;作用域运算符 三、命名空间&#xff08;namespace&…

像用Excel一样用Python:pandasGUI

文章目录 启动数据导入绘图 启动 众所周知&#xff0c;pandas是Python中著名的数据挖掘模块&#xff0c;以处理表格数据著称&#xff0c;并且具备一定的可视化能力。而pandasGUI则为pandas打造了一个友好的交互窗口&#xff0c;有了这个&#xff0c;就可以像使用Excel一样使用…

Qt CMake 国际化相关配置

文章目录 更新ts文件发布ts文件 本来用qmake使用pro文件很简单的一件事&#xff0c;结果用cmake折腾了半天。 何必呢~ 参考&#xff1a;QT6.3 CMake 多语言切换 这是我的 cmake_minimum_required(VERSION 3.16)project(testQml3_6 VERSION 0.1 LANGUAGES CXX)set(CMAKE_AUTO…

Tkinter.Text控件中,文本存在某个关键字的将被高亮显示(标记颜色+字体加粗)

在Tkinter的Text控件中&#xff0c;要标记某个关键字并改变其颜色&#xff0c;你可以使用tag_add方法来给包含关键字的文本添加标签&#xff0c;然后使用tag_config方法来配置该标签的显示样式&#xff0c;包括前景色&#xff08;字体颜色&#xff09;和背景色等。以下是一个完…

简历中自我评价,是否应该删掉?

你好&#xff0c;我是田哥 年后&#xff0c;不少朋友已经开始着手准备面试了&#xff0c;准备面试的第一个问题就是&#xff1a;简历。 写简历是需要一些技巧的&#xff0c;你的简历是要给面试官看&#xff0c;得多留点心。 很多简历上都会写自我评价/个人优势/个人总结等&…

视频汇聚/存储/压缩/诊断平台EasyCVR视频联网整合方案应用特点

随着科技的不断发展&#xff0c;监控视频在各个领域的应用越来越广泛。为了更好地管理和利用这些视频资源&#xff0c;视频联网与整合的需求也越来越多。通过视频联网技术将不同地理位置或不同设备的视频资源进行整合&#xff0c;实现实时共享和集中管理。视频联网整合方案的应…

JavaScript进阶-高阶技巧

文章目录 高阶技巧深浅拷贝浅拷贝深拷贝 异常处理throw抛异常try/caych捕获异常debugger 处理thisthis指向改变this 性能优化防抖节流 高阶技巧 深浅拷贝 只针对引用类型 浅拷贝 拷贝对象后&#xff0c;里面的属性值是简单数据类型直接拷贝值&#xff0c;如果属性值是引用数…

QT多语言切换功能

一.目的 在做项目时&#xff0c;有时希望我们的程序可以在不同的国家使用&#xff0c;这样最好的方式是一套程序能适应于多国语言。 Qt提供了这样的功能&#xff0c;使得一套程序可以呈现出不同的语言界面。本文将介绍QT如何实现多语言&#xff0c;以中文和英文为例。 QT开发…

【大数据】Flink SQL 语法篇(八):集合、Order By、Limit、TopN

《Flink SQL 语法篇》系列&#xff0c;共包含以下 10 篇文章&#xff1a; Flink SQL 语法篇&#xff08;一&#xff09;&#xff1a;CREATEFlink SQL 语法篇&#xff08;二&#xff09;&#xff1a;WITH、SELECT & WHERE、SELECT DISTINCTFlink SQL 语法篇&#xff08;三&…

初识Maven

介绍&#xff1a; web后端开发技术ApacheMaven是一个项目管理和构建工具&#xff0c;它基于项目对象模型&#xff08;POM&#xff09;的概念&#xff0c;通过一小段描述信息来管理项目的构建。安装&#xff1a;http://maven.apache.org/ Apache软件基金会&#xff0c;成立于19…

【深度学习】SDXL-Lightning 体验,gradio教程,SDXL-Lightning 论文

文章目录 资源SDXL-Lightning 论文 资源 SDXL-Lightning论文&#xff1a;https://arxiv.org/abs/2402.13929 gradio教程&#xff1a;https://blog.csdn.net/qq_21201267/article/details/131989242 SDXL-Lightning &#xff1a;https://huggingface.co/ByteDance/SDXL-Light…

2、Linux-系统目录

一、查看系统目录 登录Linux后&#xff0c;执行“cd /”&#xff0c;再执行“ls”或者“ll”可以查看系统目录。 二、解释 Linux系统中的所有文件和目录被组织成从一个根节点开始的树状结构&#xff0c;树的根就是“/”。 1、/&#xff1a;文件系统的根 2、系统相关 boot&a…

某查查首页瀑布流headers加密

目标网站&#xff1a; 某查查 对目标网站分析发现 红框内的参数和值都是加密的&#xff0c;是根据算法算出来的&#xff0c;故进行逆向分析。 由于没有固定参数名&#xff0c;只能通过搜索headers&#xff0c;在搜索的位置上打上断点&#xff0c;重新请求。 断点在此处断住&a…

Qt 简约又简单的加载动画 第七季 音量柱风格

今天和大家分享两个音量柱风格的加载动画,这次的加载动画的最大特点就是简单,只有几行代码. 效果如下: 一共三个文件,可以直接编译运行 //main.cpp #include "LoadingAnimWidget.h" #include <QApplication> #include <QGridLayout> int main(int argc…

诊所门诊电子处方软件操作教程及试用版下载,医务室处方笺管理系统模板教程

诊所门诊电子处方软件操作教程及试用版下载&#xff0c;医务室处方笺管理系统模板教程 一、前言 以下软件程序教程以 佳易王诊所电子处方软件V17.0为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 如上图&#xff0c;点击基本信息设置——处方配…

【详识JAVA语言】面向对象程序三大特性之一:封装

封装的概念 面向对象程序三大特性&#xff1a;封装、继承、多态。而类和对象阶段&#xff0c;主要研究的就是封装特性。何为封装呢&#xff1f;简单来说 就是套壳屏蔽细节。 比如&#xff1a;对于电脑这样一个复杂的设备&#xff0c;提供给用户的就只是&#xff1a;开关机、通…

WPF应用程序使用MVVM模式

文章目录 一、前言二、正文&#xff1a;模式 - WPF应用程序使用MVVM设计模式2.0 一些术语2.1 秩序与混乱2.2 MVVM模式的演变2.3 为何WPF开发者喜爱MVVM2.4 Demo应用程序2.5 路由命令逻辑2.6 ViewModel类层次结构2.7 ViewModelBase类2.8 CommandViewModel类2.9 MainWindowViewMo…

Dynamo幕墙探究系列(四)——Revolve

我们先放一张截图&#xff0c;不再是通过 loft 创建模型&#xff0c;而是通过旋转生成模型&#xff0c;效果如下&#xff0c;今天我们就来聊聊这个模型是怎么生成得。 “旋转”&#xff0c;顾名思义&#xff0c;和 Revit 中创建形状的旋转是一个意思&#xff0c;只是用来旋转的…

Vue.js+SpringBoot开发衣物搭配系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容2.1 衣物档案模块2.2 衣物搭配模块2.3 衣物收藏模块 三、系统设计3.1 用例设计3.2 E-R图设计3.3 数据库设计3.3.1 衣物档案表3.3.2 衣物搭配表3.3.3 衣物收藏表 四、系统实现4.1 登录页4.2 衣物档案模块4.3 衣物搭配模块4.4…