移动端自动化测试

2023-11-15

Java和安卓环境安装和配置

安装java JDK 并配置环境变量

1.新建环境变量: JAVA_HOME

2.新建环境变量: CLASS_PATH: .,%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar(注意最开始那个.)

3.在PATH里面增加: %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin

Android环境配置

1.解压android-sdk-windows.rar

2.新建环境变量ANDROID_HOME,将压缩的sdk路径配置到该环境变量中

3.在PATH里面添加: %ANDROID_HOME%\platform-tools;%ANDROID_HOME%\tools;

adb的基本工作原理

ADB(android debug brideg)是android平台的调试工具

ADB包含三部分

1.Client端:运行在开发机中,即你的开发电脑,用来发送ADB命令

2.Server端:同样运行在开发机器中,用来管理Client端和手机的Deamon之间的通信

3.Deamon守护进程:运行在调试设备中,手机或模拟器,用来接受并执行ADB命令

常用adb命令

 

 

将手机端的连接写成批处理文件

 

获取包名和activity名

包名:package name 用于唯一标识一个app应用(注意不是应用的名字,应用的名字可以相同,但包名一定不同,也不是apk的名字)

apk: 每一个安卓应用的安卓包后缀叫apk.可以被安装在安卓手机上

activity名:在Android中每个界面叫一个activity,获取activity名其实就是获取界面名

应用场景:自动化测试需要通过代码的形式告诉手机测试的是哪个应用的哪个界面,可以通过这个命令进行获取

步骤:1.先使用adb连接模拟器  2.在命令行中运行命令,获取当前显示的activity的名字:

adb shell dumpsys window windows | findstr mFocusedApp

文件传输相关命令

安装和卸载apk包

查询本机所有的应用程序包

 查询apk包名和启动activity名字

截取当前界面

Appium

Appium是一个开源、跨平台的自动化测试工具,用于测试原生和轻量移动应用,支持IOS、Android和FirefoxOS平台。Appium驱动Android的UIAutomator框架,使用Selenium的WebDriver JSON协议   Appium测试调用了Selenium的client库使其可以使用任意的语言

Appium核心是一个web服务器,提供了一套REST接口。它收到客户端的连接,监听到命令,接着在移动设备上执行这些命令,然后将执行结果放到HTTP响应中返还给客户端

特点:多语言编写测试代码,可以将服务器放在不同的机器上

Appium环境配置:appium的客户端  appium-python库

Appium启动设置

from appium import webdriver

from appium import  webdriver

desired_cap={}

#必须参数,定义被测脚本的平台属性
desired_cap['platformName']='Android'
#必须参数,定义被测手机的安卓版本号(设置->关于本机->android版本,必须跟被测机对得上,不能乱写,大版本不能错,小版本可以不用写)
desired_cap['platformVersion']='7.1.2'
#可以写任意的值,但不能为空
desired_cap['deviceName']='127.0.0.1:62001'
#必须参数,指定被测软件的包名
desired_cap['appPackage']='com.android.settings'
#必须参数,指定要打开的app的页面是哪个
desired_cap['appActivity']='.Settings'
#不是必须的,但一般需要指定,appium封装的底层android测试工具
desired_cap['automationName']='Uiautomator2'
#设置app的重置策略
desired_cap['noReset']=True
#设置命令的超时时间
desired_cap['NewCommandTimeout']=6000
#用于设置中文输入
desired_cap['unicodeKeyboard']=True
desired_cap['resetKeyboard']=True

driver=webdriver.Remote('http://localhost:4723/wd/hub', desired_cap)

uiautomatorviewer的使用

 

对混合app元素的识别

 下载好对应的Chromedriver的驱动 下载之后将路径添加到appium的Chromedriver Binary Path里面

import time
from appium import  webdriver
desired_cap={}
#必须参数,定义被测脚本的平台属性
desired_cap['platformName']='Android'
#必须参数,定义被测手机的安卓版本号(设置->关于本机->android版本,必须跟被测机对得上,不能乱写,大版本不能错,小版本可以不用写)
desired_cap['platformVersion']='7.1.2'
#可以写任意的值,但不能为空
desired_cap['deviceName']='127.0.0.1:62001'
#必须参数,指定被测软件的包名
desired_cap['appPackage']='com.ibox.calculators'
#必须参数,指定要打开的app的页面是哪个
desired_cap['appActivity']='.CalculatorActivity'
#不是必须的,但一般需要指定,appium封装的底层android测试工具
desired_cap['automationName']='Uiautomator2'
#设置app的重置策略
desired_cap['noReset']=True
#设置命令的超时时间
desired_cap['NewCommandTimeout']=6000
#用于设置中文输入
desired_cap['unicodeKeyboard']=True
desired_cap['resetKeyboard']=True
driver=webdriver.Remote('http://localhost:4723/wd/hub',desired_cap)
driver.implicitly_wait(10)

dic=[
    {'num1': 64,'num2': 98,'op':'+'},
    {'num1': 789,'num2': 35,'op':'-'},
    {'num1': 72,'num2': 65,'op':'*'},
    {'num1': 831,'num2': 92,'op':'/'}
]
op_dic={
    '+':'plus',
    '-':'minus',
    '*':'mul',
    '/':'div'
}

for exp in dic:
    #解析第一个操作数
    for word in str(exp['num1']):
        driver.find_element('id','com.ibox.calculators:id/digit{}'.format(word)).click()

    #解析操作符
    driver.find_element('id','com.ibox.calculators:id/{}'.format(op_dic[exp['op']])).click()

    #解析第二个操作数
    for word in str(exp['num2']):
        driver.find_element('id','com.ibox.calculators:id/digit{}'.format(word)).click()

    #点击等于符合
    driver.find_element('id','com.ibox.calculators:id/equal').click()

    #定位结束框,并且读出数据
    print(driver.find_element('xpath','//android.widget.TextView[@index="1"]').text)

高级手势操作

 

 

TouchAction

from appium.webdriver.common.touch_action import TouchAction

 

 

from appium import webdriver
from selenium.common.exceptions import NoSuchElementException
desired_cap={
    'platformName':'android',
    'platformVersion':'7.1.2',
    'deviceName':'127.0.0.1:62001',
    'appPackage':'com.android.settings',
    'appActivity':'.Settings',
    'automatonName':'Uiautomator2'
}

driver=webdriver.Remote('http://localhost:4723/wd/hub',desired_cap)
while True:
    try:
        driver.find_element('xpath','//*[@text="开发者选项"]').click()
        break
    except NoSuchElementException:
        driver.swipe(555,670,555,400,duration=1000)

 

在app中针对日期控件的常见的处理方式:

1.如果是第三方库,并且有公开的api接口,就可以直接使用python或者android的uiautomator这个工具直接去调用,从而设置日期的值,避免从界面上操作

2.通过界面方式进行滑动选择操作,没有api也可以直接使用,编程和操作效率比较低

from appium import webdriver

desired_cap={
    'platformName':'android',
    'platformVersion':'7.1.2',
    'deviceName':'127.0.0.1:62001',
    'appPackage':'com.laogejizhang.account',
    'appActivity':'.MainActivity',
    'automatonName':'Uiautomator2',
    'noReset':True,
    'newCommandTimeout':6000
}

driver=webdriver.Remote('http://localhost:4723/wd/hub',desired_cap)
driver.implicitly_wait(10)

def select_data(year,month,day):
    current_year=driver.find_element('xpath','//*[@bounds="[163,783][293,817]"]').text
    current_month=driver.find_element('xpath','//*[@bounds="[]"]').text
    while True:
        if int(current_year) == int(year):
            break
        if int(current_year) > int(year):
            driver.swipe(274,740,274,800,duration=1000)
        else:
            driver.swipe(274,800,274,740,duration=1000)
    
    while True:
        if int(current_month) == int(month):
            break
        if int(current_month) > int(current_month):
            driver.swipe()
        else:
            driver.swipe()
driver.find_element('xpath','//android.view.ViewGroup[@index="5"]/android.widget.ImageView').click()
driver.find_element('xpath','//*[@text="信用卡"]').click()
driver.find_element('xpath','//*[@text="广发银行"]').click()
driver.find_element('xpath','//*[@text="请输入账单日期"]').click()

select_data('2019','10','11')

Appium手机操作

 

 

 

  from appium.webdriver.connectiontype import ConnectionType

 0(None)  1(Airplane Mode) 2(Wifi only) 4(Data only) 6(All networl on)

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

移动端自动化测试 的相关文章

随机推荐

  • java版本管理说明_Java JDK 版本管理工具jabba常用命令

    1 查询JDK 1 查看服务器上可下载安装的Jdk版本jabba ls remote 过滤查询的版本jabba ls remote zulu 1 8 60 jabba ls remote gt 1 6 45 lt 1 9 latest mi
  • 日志切割方法小结 [Logrotate、python、shell脚本实现 ]

    对于Linux系统安全来说 日志文件是极其重要的工具 不知为何 我发现很多运维同学的服务器上都运行着一些诸如每天切分Nginx日志之类的CRON脚本 大家似乎遗忘了Logrotate 争相发明自己的轮子 这真是让人沮丧啊 就好比明明身边躺着
  • 良许Linux

    mv 也是 Linux 下一个使用频率非常高的命令 但除了一些基本用法 你还知道它的哪些高级用法呢 1 基本用法 移动一个 多个文件 移动一个 多个目录 重命名文件 目录 这些都是很基本的用法 无需赘述 下面介绍一些更高级的用法 2 打印操
  • PCL点云库学习

    一 可用Point类型 PointXYZ 成员变量 float x y z PointXYZ是使用最常见的一个点数据类型 因为它只包含三维xyz坐标信息 这三个浮点数附加一个浮点数来满足存储对齐 用户可利用points i data 0 或
  • 初探 vue 插件开发

    开发一个 vue 插件 发布到npm并且 可以使用 npm 安装 vue list 查看当前在线的模板信息步骤如下 初始化项目 运行项目 npm install npm run dev 写插件在 src 文件夹下面建 lib 文件夹 用于存
  • GIT 工具下载及教程

    本着所有东西都可以本地化的思想 这里给大家介绍一下 Git 工具的下载以及 Git 书籍的下载 GIT 工具 GIT 工具 点击上面的链接后点击如下图所示的部分进行下载 GIT 书籍下载 GIT 中文教程书籍下载 点击上面的链接后点击如下图
  • Torch同时训练多个模型

    20230302 引言 在进行具体的研究时 利用Torch进行编程 考虑到是不是能够同时训练两个模型呢 而且利用其中一个模型的输出来辅助另外一个模型进行学习 这一点 在我看来应该是很简单的 例如GAN网络同时训练这个生成器和判别器 但是实际
  • 毕业设计-基于机器学习的图片处理图片倾斜校正

    前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为毕业后面临的就业升学做准备 一边要为毕业设计耗费大量精力 近几年各个学校要求的毕设项目越来越难 有不少课题是研究生级别难度的 对本科同学来说是充满挑战 为帮助大家顺利通过和节省时间
  • 95-36-210-ChannelHandler-系统Channel-TimeoutHandler1

    文章目录 TimeoutHandler TimeoutHandler 在开发TCP服务时 一个常见的需求便是使用心跳保活客户端 而Netty自带的三个超时处理器IdleStateHandler ReadTimeoutHandler和Writ
  • java.lang包介绍

    前言 java lang包是java语言的核心 它提供了java中的基础类 包括基本Object类 Class类 String类 基本类型的包装类 基本的数学类等等最基本的类 我们介绍一下Java 8中的java lang包 主要类如下图
  • Koa2学习之旅----结合 jqPaginator实现列表分页

    1 下载jqPaginator js 放在静态目录里面 2 在需要分页的地方引入jqPaginator js 3 在需要分页的地方加个空div div class pagination div 4 调用插件实例化 page jqPagina
  • Hadoop 2.x与3.x 22点比较:3.x将节省大量存储空间

    问题导读 1 Hadoop3 x通过什么方式来容错 2 Hadoop3 x存储开销减少了多少 3 Hadoop3 x MR API是否兼容hadoop1 x 一 目的 在这篇文章中 我们将讨论Hadoop 2 x与Hadoop 3 x之间的
  • BindIoCompletionCallback多线程下效率不如单线程高.

    BindIoCompletionCallback多线程下效率不如单线程高 2015 02 26 14 13 20 分类 C C IOCP TCPIP Socket Server cpp include stdafx h include Sa
  • 教你使用Python Statsmodel进行假设检验和线性回归

    如果你使用 Python 处理数据 你可能听说过 statsmodel 库 Statsmodels 是一个 Python 模块 它提供各种统计模型和函数来探索 分析和可视化数据 该库广泛用于学术研究 金融和数据科学 在本文中 我们将介绍 s
  • mac mysql忘记root密码解决方法

    通过homebrew方式安装的mysql mysql安装目录为 usr local Cellar mysql 5 7 去bin目录下在管理员权限下以安全方式启动mysql 即可不用密码登录 再修改root密码 具体步骤 cd usr loc
  • 解决vs2017无法安装问题

    解决vs2017无法安装问题 金庆的专栏 2018 11 从官网下载了 vs community 1600125377 1541561546 exe 但是运行安装时无法出现产品选择界面 查看 Temp 目录下的日志 没有发现错误 搜索一下
  • Xshell与Xftp打不开

    去服务里边把flexnet licensing service服务停止掉然后把启动类型改成禁止 看看是不是能打开了 再不行就重启一下 一定要看的干货 链接 除了接私单 写博客 做教程之外 程序员如何利用自身技术 实现躺着赚钱
  • dev express 知乎_开发环境模拟开启HTTPS服务

    主要解决的问题 开发环境中 使用只支持 https 服务的Web API 例如 navigator clipboard 操作系统剪贴板 navigator mediaDevices 访问相机或麦克风等媒体输入设备 等 解决 Cookie 的
  • 服务器 备案 文档,自己的服务器 备案

    自己的服务器 备案 内容精选 换一换 弹性云服务器与传统硬件服务器一样 可以部署任意业务应用 例如 邮件系统 WEB系统 ERP系统等 弹性云服务器创建成功后 您就可以像使用自己的本地PC或物理服务器一样 在云上使用弹性云服务器 云手游服务
  • 移动端自动化测试

    Java和安卓环境安装和配置 安装java JDK 并配置环境变量 1 新建环境变量 JAVA HOME 2 新建环境变量 CLASS PATH JAVA HOME lib dt jar JAVA HOME lib tools jar 注意