移动端自动化测试

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)

 

 

 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值