Appium简易Android测试脚本

这篇具有很好参考价值的文章主要介绍了Appium简易Android测试脚本。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Appium简易Android测试脚本

前言

前段时间抽空看了下Appium写了一个简单的Android测试脚本。
该脚本主要功能为对Android应用进行一些自动化操作。
根据Appium文档中给出的信息脚本主要运用以下功能。

①自动打开Android应用
②查找元素并操作 (点击,输入,滑动)
③点击屏幕固定坐标
④模拟滑动

准备工作

1、安装及前期准备:点击查看教程
2、测试元素信息:使用Appium,将所需要测试的元素进行提取,例如元素ID,class,index,xpath(不推荐使用xpath定位)。
3、手动操作一次,估算并记录页面加载,缓冲,切换的时间,后期防止程序出错需要增加等待时间(特别以坐标定位方式进行操作建议增加等待时间)。

实施

1、首先建议只写打开APP的这一步骤,排除Appium服务没有正常启动
2、写执行脚本

#!/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模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用【Python+Appium】实现自动化测试

    一、环境准备 1.脚本语言:Python3.x    IDE:安装Pycharm 2.安装Java JDK 、Android SDK 3.adb环境,path添加E:SoftwareAndroid_SDKplatform-tools 4.安装Appium for windows,官网地址 Redirecting  点击下载按钮会到GitHub的下载页面,选择对应平台下载   安装完成后,启动Appium,host和port默认的即可,然

    2024年02月08日
    浏览(46)
  • 移动应用测试(Python+Appium+雷电模拟器)

    一、node.js(v20.1.1) 二、Java(JDK17) 三、Android SDK(24.4.1版本) 四、Python(3.10) 五、PyCharm(2023.3.2) 六、Appium(1.21.0) 七、雷电模拟器(雷电9) 若不想单独去下载,想直接获取所有安装包,请访问百度网盘链接提取:https://pan.baidu.com/s/1LSzazfQ2PbdiMLfZ4WiWAQ?pwd=n4vi        在

    2024年03月16日
    浏览(70)
  • Python +Appium 实现app自动化测试

    一、Appium简介 Appium是一款开源工具,用于自动化iOS、Android和Windows桌面平台上的本地、移动web和混合应用程序。原生应用是指那些使用iOS、Android或Windows sdk编写的应用。移动网页应用是通过移动浏览器访问的网页应用(appum支持iOS和Chrome上的Safari或Android上的内置“浏览器”应用

    2023年04月09日
    浏览(38)
  • python appium UI 自动化测试框架讨论

    目录 前言: 框架共性总结 Auto_Analysis 权限弹窗识别 前言:  Python Appium UI自动化测试框架是一种用于测试移动应用程序的工具,它结合了Python编程语言和Appium测试框架的功能。 框架共性总结 1 自动找设备 连接设备 2 自动启 appium server 3 用例框架 unittest pytest 4 用例组织 yml 读

    2024年02月16日
    浏览(55)
  • Python+Appium实现自动化测试的使用步骤

    这篇文章主要介绍了Python+Appium实现自动化测试的使用步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 1.脚本语言:Python3.x IDE:安装Pycharm 2.安装Java JDK 、Android SDK 3.adb环境,path添加E:

    2024年02月03日
    浏览(38)
  • python+appium+pytest自动化测试-参数化设置

    来自APP Android端自动化测试初学者的笔记,写的不对的地方大家多多指教哦。(所有内容均以微博V10.11.2版本作为例子) 在自动化测试用例执行过程中,经常出现执行相同的用例,但传入不同的参数,导致我们需要重复的写用例,这样会使我们的用例变得很长,冗余,很多地

    2023年04月08日
    浏览(51)
  • App自动化测试|Appium+Python自动化测试环境搭建

    搭建过程步骤如下: 安装jdk并配置好环境变量(jdk版本1.8以上) 安装android-sdk并配置好环境变量;具体步骤见:Android Studio安装(推荐使用这种方法安装SDK) - 环境配置 - 测试人社区 安装安卓模拟器 安装node.js(官网下载安装最新版本) ;下载地址:下载 | Node.js 中文网 找到wind

    2024年02月12日
    浏览(48)
  • python+appium微信小程序/公众号自动化测试

    环境准备 调试微信公众号时,查看进程名称,公众号要先进入文章或者内部程序,小程序就进入内部程序即可 公众号和小程序的自动化不是必须要做,一般我是作为数据脚本使用 步骤 开启手机上的USB调试功能(开发者模式) 打开Chrome浏览器,地址栏输入:Chrome://inspect 直接

    2024年02月09日
    浏览(44)
  • 【UI自动化测试】appium+python+unittest+HTMLRunner

    进阶Python接口自动化测试必备教程(2023全网最详细) 简介  获取AppPackage和AppActivity  定位UI控件的工具  脚本结构  PageObject分层管理  HTMLTestRunner生成测试报告  启动appium server服务  以python文件模式执行脚本生成测试报告 下载与安装 下载需要自动化测试的App并安装到手机

    2024年02月16日
    浏览(47)
  • Python+Appium+Pytest+Allure实战APP自动化测试框架

    Hi,大家好。今天我们来聊聊Python+Appium+Pytest+Allure实战APP自动化测试,pytest只是单独的一个单元测试框架,要完成app测试自动化需要把pytest和appium进行整合,同时利用allure完成测试报告的产出。 编写常规的 线性 脚本具体的步骤如下: 1、设计待测试APP的 自动化测试 用例 2、

    2023年04月09日
    浏览(74)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包