Appium简易Android测试脚本
前言
前段时间抽空看了下Appium写了一个简单的Android测试脚本。
该脚本主要功能为对Android应用进行一些自动化操作。
根据Appium文档中给出的信息脚本主要运用以下功能。
①自动打开Android应用
②查找元素并操作 (点击,输入,滑动)
③点击屏幕固定坐标
④模拟滑动
准备工作
1、安装及前期准备:点击查看教程
2、测试元素信息:使用Appium,将所需要测试的元素进行提取,例如元素ID,class,index,xpath(不推荐使用xpath定位)。
3、手动操作一次,估算并记录页面加载,缓冲,切换的时间,后期防止程序出错需要增加等待时间(特别以坐标定位方式进行操作建议增加等待时间)。
实施
1、首先建议只写打开APP的这一步骤,排除Appium服务没有正常启动
2、写执行脚本文章来源:https://www.toymoban.com/news/detail-531439.html
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Time : 2023/4/25 9:27
# Author : kevin
# User : VINNO-Van
# Software: PyCharm
# File : vinno_package.py
# 连接Appium Server,初始化自动化环境
from selenium.webdriver.common.by import By
import time
from appium import webdriver
# 引入ADB命令
import os, re
# os.system('chcp 65001') # 将cmd的显示字符编码从默认的GBK改为UTF-8
# deviceName = os.popen("adb devices").read() # 设备名称
# platformVersion = os.popen("adb shell getprop ro.build.version.release").read() # 安卓版本
# appPackage = os.popen("adb shell dumpsys window w |findstr \/ |findstr name=").read() # 软件名称
desired_caps = \
{
"deviceName": "0123456789ABCDEF",
"platformName": "Android",
"platformVersion": "4.4.2", # 4.4.2 8.1.0
"appPackage": "*.sportinspect", # 改成你测试APP的包名。不懂看准备工作的第1步骤
"appActivity": "*.sportinspect.SplashScreenActivity", # 改成你测试APP的活动。不懂看准备工作的第1步骤。
"newCommandTimeout": 0, # 设置超时时间, 默认为60s,设置为0关闭。超时时间到后,软件将退出
"unicodeKeyboard": True, # unicode编码输入 解决send_keys无法输入中文
"resetKeyboard": True, # 隐藏软键盘 解决send_keys无法输入中文
"automationName": "UiAutomator1", # 安卓版本大于5这里改为"UiAutomator2"
"noReset": True # 设置不清除软件缓存,不写或者False则清除App缓存
}
time_list = []
# 需要点击的元素
# by:By 查找元素的方式
# value:Value
# initial:是否重新打开软件
# index: 可变参数。0元素点击, 1坐标点击, 2输入文本, 3滑动坐标
def find_element(by, value, initial=0, *index):
global driver
start_time = time.time()
index_class = None
# initial==1时,重启软件
if initial == 1:
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
start_time = time.time()
# 可变变量*index值长度判断,需要执行的动作是点击还是输入滑动
for index_class in index:
print(index_class, type(index_class))
# 循环查找需要执行的元素
while True:
try:
if len(str(find_element)) >= 0:
time_consuming = time.time() - start_time
time_list.append('%.3f' % time_consuming) # 保留三位小数,精确到1ms
print('元素%s %s已经找到,共耗时%s' % (by, value, time_consuming))
# 可变变量*index值判断执行的动作是点击还是输入滑动,0元素点击,1坐标点击,2文本键入,3滑动
if index_class == 0:
click_element(by, value, *index)
break
elif type(index_class) == list:
# 1表示查找坐标点击 | [1,(x, y),tap_sleep] & 范围坐标点击[1,(x1, y1),(x2, y2), tap_sleep]
# tap_sleep = index
# driver.tap([], tap_sleep)
if len(index_class) == 3:
print([index_class[1]])
driver.tap([index_class[1]], index_class[2])
elif len(index_class) == 4:
print([index_class[1], index_class[2]])
driver.tap([index_class[1], index_class[2]], index_class[3])
break
elif type(index_class) == dict:
driver.find_element(by, value).click()
driver.find_element(by, value).send_keys(index_class.get(2)) # 当出现字典时2所对应的是输入
break
elif type(index_class) == tuple:
driver.swipe(index_class[0], index_class[1], index_class[2], index_class[3], index_class[4])
break
break
else:
print('请检查方法调用输入值是否正确')
break
except:
print('没找到', value)
#
def click_element(by, value, *index):
# 元素定位方法 :ID, XPATH, LINK_TEXT, PARTIAL_LINK_TEXT,
# NAME,TAG_NAME,CLASS_NAME,CSS_SELECTOR,__dict__,__weakref__,
# Appium元素栏 :id, xpath, link text, partial link text, name, tag name, class name, css selector
if str(by) == 'id':
if len(index) > 0:
driver.find_elements(by=By.ID, value=value)[index[0]].click()
else:
driver.find_element(by=By.ID, value=value).click()
elif str(by) == 'xpath':
if len(index) > 0:
driver.find_elements(by=By.XPATH, value=value)[index[0]].click()
else:
driver.find_element(by=By.XPATH, value=value).click()
elif str(by) == 'link text':
if len(index) > 0:
driver.find_elements(by=By.LINK_TEXT, value=value)[index[0]].click()
else:
driver.find_element(by=By.LINK_TEXT, value=value).click()
elif str(by) == 'partial link text':
if len(index) > 0:
driver.find_elements(by=By.PARTIAL_LINK_TEXT, value=value)[index[0]].click()
else:
driver.find_element(by=By.PARTIAL_LINK_TEXT, value=value).click()
elif str(by) == 'name':
if len(index) > 0:
driver.find_elements(by=By.NAME, value=value)[index[0]].click()
else:
driver.find_element(by=By.NAME, value=value).click()
elif str(by) == 'tag name':
if len(index) > 0:
driver.find_elements(by=By.TAG_NAME, value=value)[index[0]].click()
else:
driver.find_element(by=By.TAG_NAME, value=value).click()
elif str(by) == 'class name':
if len(index) > 0:
driver.find_elements(by=By.CLASS_NAME, value=value)[index[0]].click()
else:
driver.find_element(by=By.CLASS_NAME, value=value).click()
elif str(by) == 'css selector':
if len(index) > 0:
driver.find_elements(by=By.CSS_SELECTOR, value=value)[index[0]].click()
else:
driver.find_element(by=By.CSS_SELECTOR, value=value).click()
# (by, value, initial=0, *index):
# by:By
# value:Value
# initial:是否重新调用软件,0不重新调用,1则重新调用
# index:可选参数
# 0代表查找元素点击 | 0
# 1表示查找坐标点击 | [1,(x, y),tap_sleep] & 范围坐标点击[1,(x1, y1),(x2, y2), tap_sleep]
# 2表示键入文本 | {2: '文本'}
# 滑动好像忘了写了,尴尬!!!
# 流程示例
while True: # 循环执行下面步骤
find_element('class name', 'android.widget.Button', 1, 0) # 启动APP
time.sleep(2)
find_element('id', '*.sportinspect:id/et_pwd', 0, [1, (766, 240), 1000]) # 登录
time.sleep(10)
find_element('class name', 'android.widget.Button', 0, [1, (345, 700), 1000]) # 心电测量
time.sleep(40)
find_element('id', '*.sportinspect:id/btn_start', 0, 0) # 提交
time.sleep(2)
find_element('id', '*.sportinspect:id/md_buttonDefaultPositive', 0, 0) # 提交确认
time.sleep(2)
find_element('id', '*.sportinspect:id/iv_close', 0, 0) # 提交完成
后记
上述脚本是个简单的测试小功能,后面如果有时间考虑做成读取Excel进行执行。每次操作步骤都写在Excel中,脚本读取Excel后执行相关动作。文章来源地址https://www.toymoban.com/news/detail-531439.html
到了这里,关于Appium简易Android测试脚本的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!