【Android自动化】自动输入安装密码,并检测App是否安装成功

七叔叫你在appium搭建app自动化测试环境 前言 我们在appium做app自动化测试,环境搭建是比较麻烦的。也是很多初学者在学习app自动化之时,花很多时间都难跨越的坎。今天七叔就来讲讲appium如何搭建APP自动化测试环境。喜欢七叔的可以给小编点点关注哟。 没有成功的环境,就没有办法继续后续的使用。 在app自动化测试当中,我们主要是通用电脑端的python代码,能够驱使手机端的app去进行操作。比如打开一个app,输入用户名和密码,进入登陆操作。 由于电脑端和手机端是两个独立的设备。要实现数据通信,就需要将二者连一起。因此对于 阅读详情

准备工作

  1. pip install --pre uiautomator2 (安装u2的库)
  2. pip install -U weditor (桌面可生成一个可执行的py)
  3. 根据网上的资料去了解u2的使用方法

安装App主文件(install_app.py)

import subprocess
import uiautomator2 as u2
import time
import argparse
from threading import Thread
import pymysql.cursors
import pymysql
import sys


def get_serial_and_apk():
    """
    获取设备名和包名
    """
    parser = argparse.ArgumentParser()
    parser.add_argument('--serial', type=str)  # 从jenkins获取需要安装的App的手机的uid
    parser.add_argument('--upload_filename', type=str)  # 获取需要安装的Apk的包名
    parser.add_argument('--replace_install', type=int)  # 这边是根据公司需要使用原有Apk构建,还是重新覆盖安装新的包
    args = parser.parse_args()
    serial = args.serial
    upload_file = args.upload_filename
    replace_install = args.replace_install
    print(replace_install)
    apk_path = "/Users/data/upload_apk/" + upload_file  # 安装包的路径,linux为例
    print(apk_path)
    return serial, apk_path, replace_install, upload_file  # 输出设备号,apk的安装路径,是否覆盖安装,包名


def select_install_pwd():
    """
        运行sql语句,主要是去数据库根据uid去查当前设备的安装密码
        :param
        sql_words: sql语句
        :return: 查询数据对应的字典列表
    """
    connect = pymysql.Connect(
        host="192.168.1.1",
        port=3306,
        user="root",
        passwd="123456",
        db="auto_build",
        charset="utf8"
    )
    # 获取游标
    cursor = connect.cursor(cursor=pymysql.cursors.DictCursor)
    try:
        sql = f"""SELECT install_passwd FROM device_info WHERE id =\'{serial}\'"""
        cursor.execute(sql)
        results = cursor.fetchall()
        for row in results:
            print(row['install_passwd'])
            return row['install_passwd']
    except Exception as e:
        print(e)
        connect.rollback()
    cursor.close()
    connect.close()
    return None


def time_out(start_time, time_out=120.0):
	"""
	定义一个超时的时间2min
	"""
    end_time = time.time()
    difference = round((end_time - start_time), 2)
    if difference - time_out > 0:
        print(f"设定的时间{time_out}到了退出")
        return False
    else:
        return True


def listen_alert(driver):
    """
    监听弹框
    """
    time.sleep(1)
    if driver(textContains='请输入').exists():
        pwd = select_install_pwd()
        driver(textContains='请输入').set_text(pwd)
        print("准备点击确定")
        time.sleep(2)
        if driver(text='确定').exists:
            driver(text='确定').click()
            print("已点击确定")
    if driver(text="继续安装").exists():
        driver(text="继续安装").click()
        print("点击继续安装")
    if driver(text='无视风险安装').exists():
        driver(text='无视风险安装').click()
    if driver(text='安装').exists():
        driver(text='安装').click()


def cmd(cmd, remove_shell=False):
	"""
	adb命令头部封装
	"""
    head = adb_head
    if remove_shell:
        head = adb_head.replace('shell', '')
    print(head + ' ' + cmd)
    import os
    r = os.popen(head + ' ' + cmd)
    print(r.read())
    return r.read()


def create_dir_if_not_exists(remote_path):
	"""
	判断下手机设备中是否有我们上传的一个路径
	为什么需要上传到手机,而不是直接adb install 安装呢,主要是需要获取安装成功的Success的提示,以手机内部安装更为合适
	"""
    r = cmd('ls ' + remote_path)
    if 'No such file or directory ' in r:
        cmd(' mkdirs ' + remote_path)


def push_file(file_path, remote_path):
	"""
	推Apk到手机中存储
	"""
    # create_dir_if_not_exists(remote_path)
    cmd(' push ' + file_path + ' ' + remote_path, remove_shell=True)
    print(' push ' + file_path + ' ' + remote_path)


def install(apk_path, apk_name):
    """
    安装apk
    """
    push_file(apk_path, '/data/local/tmp')  # 上传apk到手机中
    remote_path = '/data/local/tmp/' + apk_name  # 手机中的安装包的路径
    cmd = adb_head + ' pm install  -r ' + remote_path  # 强制安装
    # cmd = "adb -s %s install %s" % (serial, apk_path)
    process = subprocess.Popen(cmd, shell=True,
                               stdout=subprocess.PIPE,
                               stderr=subprocess.PIPE)
    process.wait(120)
    for line in process.stdout:
        line_str = line.decode("utf-8")
        print(line_str)
        if 'Success' in str(line_str):
            print("安装包已成功安装".center(70, "-"))
            return True
        else:
            if 'Failure' in str(line_str):
            	print(line_str)
                print("请检查当前安装的apk版本是否过低".center(50, "*"))
                print("注意此时apk安装失败,断开测试连接,请检查完毕后重新构建".center(50, "*"))
                sys.exit(1)
            return False


if __name__ == '__main__':
    serial, apk_path, replace_install, upload_file = get_serial_and_apk()
    adb_head = 'adb -s ' + serial + ' shell '
    if replace_install == 3:
        p1 = Thread(target=install, args=(apk_path, upload_file))
        p1.start()
        try:
            driver = u2.connect_usb(serial)
        except RuntimeError as e:
            print("检测到是否是设备断开连接!!!".center(70, "*"))
            sys.exit(1)
        while p1.is_alive():
            listen_alert(driver)
        p1.join()
        print("Ending".center(70, "-"))
        try:
            driver.service("uiautomator").stop()
        except Exception as e:
            print("未能停止uiautomator2的程序")
            print(e)
    else:
        print("使用原有的apk进行构建...")

app安卓逆向之smali代码log注入与原代码修改 文章目录1.背景分析2.概述3.开始3.1smali代码基础知识普及3.2apktool的基本使用3.3构建个人Log类并且反编译成Smali文件注入到某电商App中3.4重编译修改后的App项目,安装到模拟器中运行并使用注入的代码打印日志总结 1.背景分析 在安卓逆向的过程中常常会面临三个场景 想要了解某个方法是否有被调用 经过常规的代码分析后,想要知道App某些方法内部某些变量的值 App在Jave层的一些安全检测代码在我们的研究阶段需要屏蔽及修改 以上第一、第二个场景使用Xposed、 阅读详情

相关推荐

Android 14抓包自动化:ADB脚本一键配置HTTPS代理与证书

HTTPS抓包是移动端开发、测试与安全分析中的基础技术,其核心原理是通过中间人代理解密加密流量。在Android系统不断升级的背景下,尤其是Android 14对证书管理和网络权限的严格限制,传统手动配置流程变得异常繁琐且难以在自动化流程中复用。ADB(Android Debug Bridge)作为官方调试接口,提供了自动化执行Shell命令、推送文件与修改系统设置的强大能力,是实现跨版本、批量设备环境配置的关键技术。通过编写集成化的ADB脚本,可以自动完成CA证书安装、全局代理设置及应对系统限制等操作,将

weixin_34195364的博客 337

Android 10 安装Apk加限制(需要密码)

需求:安装APK时需要输入密码,例如12345,才能安装成功,否则安装失败。

qq_61516234的博客 3137

Android10.0 PMS安装第三方app时添加密码锁限制安装

在10.0的系统rom定制化开发中,在进行一些产品定制的时候,有需求要求限制第三方app的安装,需要添加 一个密码锁,在安装app的时候,会弹窗密码锁,输入正确的密码后,就可以继续安装app的功能 接下来就来实现这个功能

安卓兼职framework和app工程师的博客 1153

android弹窗验证密码,Android 应用安装添加密码输入弹窗

基于RK Android6.0-MID代码packages/apps/PackageInstaller/src/com/android/packageinstaller/PackageInstallerActivity.java为防止之后遗忘,记录一下安装apk时会弹出输入弹窗,输入内容正确,才可以点击安装按钮,输入错误安装应用弹窗消失先引用需要用到的类import android.widget....

weixin_39861823的博客 1602

Z-Image Turbo LoRA训练全流程:从数据标注到模型部署的保姆级指南(附ai-toolkit配置)

本文提供了一份详尽的Z-Image Turbo LoRA模型训练全流程指南,涵盖从数据准备、智能标注、参数调优到最终模型部署与Z-Image集成的每个环节。重点解析了使用ai-toolkit训练整合包进行高效训练的核心技巧与避坑方法,旨在帮助用户稳定训练出高质量的专属角色模型。

weixin_29088655的博客 967

【液晶专题】从外挂到In-Cell/ On-Cell/ OGS再也不会傻傻分不清楚了

触控技术经历了从外挂式到内嵌式的革新,主要方案包括外挂式(Out-Cell)、OGS、On-Cell和In-Cell。

一点硬件 1254

android 实现密码输入弹窗

前言部分 最近有点忙好久没写啥东西了,正好项目中用到了一个输入密码的弹窗,顺便单独记录下,防止以后需要用. 内容部分 内容比较简单: 主要分为几个步骤,如下: 实现dialog的部分内容. 这里注意一下就是dialog的显示问题,比如,你需要设置一个主题,否则dialog显示的可能会有缝隙;还有就是你需要设置dialog的布局属性来保证dialog不是一个变形的弹窗. 代码如下: va...

鲨鱼不会飞的博客 3233

WorkBuddy 集成 飞书CLI,全程10分钟,丝滑无比,老板要注意了...

飞书CLI实测:10分钟实现AI操控飞书办公 飞书CLI作为命令行工具,让用户通过简单命令完成飞书各项操作。本文记录了从安装到使用的完整过程:一键安装仅需10分钟,支持200多条命令覆盖飞书全部功能,与AI结合后可实现自然语言办公。实测中成功用语音指令创建了7天发文计划日程,验证了其便捷性。虽然首次认证存在超时问题,但整体体验流畅。该工具将复杂操作简化为自然语言指令,大幅提升办公效率,特别适合需要频繁使用飞书的用户。后续还将探索更多自动化办公场景。

三棱球的专栏 1144

android安装apk必须输入密码,jarsigner重新签名apk无法安装的解决方法

jarsigner -digestalg SHA1 -sigalg MD5withRSA -keystore debug.keystore -storepass android woxiangkan_debug.apk androiddebugkey在签名时,要加上2个参数:-digestalg SHA1 -sigalg MD5withRSA造成无法签名错误的原因,初步估计是JDK版本的问题。JD...

weixin_39755890的博客 1791

汽车轮胎动平衡背后的秘密:如何用惯性主轴原理消除方向盘抖动

本文深入解析了汽车轮胎动平衡的核心原理,即利用惯性主轴原理消除高速行驶时的方向盘抖动。文章从方向盘抖动的现象出发,阐释了动不平衡产生的物理本质,并详细介绍了如何通过动平衡机测量、计算与校正,使轮胎-轮毂系统的实际旋转轴回归其惯性主轴,从而实现稳定运转。

grafana6viz的博客 347

4 屏 + 8 摄像头一开,谁在悄悄拖慢你的座舱域控?

如果你觉得座舱卡顿:❌ 别第一反应怪 SoC❌ 别盲目堆算力。

weixin_43199439的博客 152

用Ranorex进行安卓IOS自动化测试

Ranorex是一个可以媲美QTP的自动化测试软件,比QTP更强的是,还可以测试IOS、安卓的手机APP。下面演示一下如何添加手机设备来测试(IOS安卓真机和安卓模拟器都可以)。

博客 2582

2xmax96717+max96724+agx orin驱动代码

说明:这里主要解决max96717的设备地址和sensor地址映射,vc0->vc1多颗max96717+max96724使用配置思路如下: 1、改变max96717的pipez stream id,然后max96724的pipe绑定使用相应的stream id 2、max96717默认是vc0,把vc0改写成vc1\vc2\vc3,然后max96724再重新映射vc输出

mantouyouyou的博客 115

第一:APP自动化工具-AirtestIDE-安装部署

【代码】第一:APP自动化工具-AirtestIDE-安装部署。

欢迎来到本博客! 3852

AI应用架构师:用RAG解决大模型“幻觉”问题的客服架构设计

在当今的智能客服领域,大语言模型(LLM)凭借流畅的对话能力和强大的理解能力,逐渐取代传统规则式机器人,成为客服系统的核心。但随之而来的“幻觉”问题(即模型编造不存在的信息)却成了致命伤:比如客户问“你们的产品保修期多久”,AI客服可能会自信地回答“3年”,而实际保修期只有1年——这种错误不仅会误导客户,还可能引发投诉、退货甚至法律风险。

AI天才研究院 915

L2正则化与Ridge回归的关系

非常感谢您提供的详细任务描述和要求。我会尽力按照您的指引来撰写这篇技术博客文章。 L2正则化与Ridge回归的关系 1. 背景介绍 机器学习模型在训练过程中容易出现过拟合的问题,这会导致模型在训练集上表现很好但在测试集上泛化性能较差。为了解决这一问题,正则化技术应运而生。其中

AGI×大数据,开启智能时代的认知跃迁;解码AGI,赋能数据驱动的智能革命。 662

安卓自动化工具(附自动刷抖音脚本实例)

目前做Android自动化模拟用户操作的工具不多,还有一些工具是基于一些脚本框架封装的只能执行一些特定操作的应用。基于目前这类教程网上资源稀缺的现状下,我给大家推荐两款好用的工具,方便大家做相关方向的项目时可以参考。下面给大家介绍的两款好用的安卓自动化工具,也是本人常用的,感觉不错的两款:ADB和Autojs。 下面内容我将分别向大家介绍这两款工具的情况,然后列出一些常用命令,最后我会分别用两种工具做一个自动刷抖音的工具(每10秒滑动一次)。 一、ADB ADB全称为Android Debug Bridge

m0_45903982的博客 1万+

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

一款很“炸”的安卓UI自动化工具

介绍:4399AT是一款基于APPIUM框架改造和集于算法遍历,图像识别技术的自动化测试工具 工具:适用于Android App UI自动化 电脑系统:win10 64位 工具好处:解决不同手机安装提示和APP操作提示框,兼容不容手机控件,adb不稳定,PO模式等问题,具体可关注微信公众号“测试一般不一般”进行相关资料查看。 以下是关于该工具的使用说明,详情API可查看api文档   ...

9310

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

【Android自动化】AccessibilityService实战-微信僵尸好友检测

上节我们学习了AccessibilityService无障碍的基础知识,并写了一个简单的微信自动登录的小案例。相信大家都意犹未尽,所以本节安排一波实战 —— 微信僵尸好友检测。啥是 僵尸好友?[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dhtijtjk-1670470679465)(https://upload-images.jianshu.io/upload_images/27208505-edd7ca2cd0e6b404.png?imageMogr2/auto-orie

datian1234的博客 5356

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Python appium搭建app自动化测试环境

appium做app自动化测试,环境搭建是比较麻烦的。也是很多初学者在学习app自动化之时,花很多时间都难跨越的坎。但没有成功的环境,就没有办法继续后续的使用。在app自动化测试当中,我们主要是通用电脑端的python代码,能够驱使手机端的app去进行操作。比如打开一个app,输入用户名和密码,进入登陆操作。由于电脑端和手机端是两个独立的设备。要实现数据通信,就需要将二者连一起。因此对于真机用户,需要用USB线连接手机和电脑,并且在开发者选项当中,开启USB调试模式。

MXB_1220的博客 894

python appium搭建app自动化测试环境

appium做app自动化测试,环境搭建是比较麻烦的。也是很多初学者在学习app自动化之时,花很多时间都难跨越的坎。 但没有成功的环境,就没有办法继续后续的使用。 在app自动化测试当中,我们主要是通用电脑端的python代码,能够驱使手机端的app去进行操作。比如打开一个app,输入用户名和密码,进入登陆操作。 由于电脑端和手机端是两个独立的设备。要实现数据通信,就需要将二者连一起。...

weixin_30624825的博客 827

Android 手机的高级终端 Termux 安装使用、busybox、安卓 手机 web

手机已经 root安装 tsu,这是一个 su 的 Termux 版本,是一个真正的 root 权限,用来在 Termux上替代su,操作不慎可能对手机有安全风险,因为官方封装了,所以安装也很简单:安装 tsu:pkg install tsu -y切换到 root:tsu退出 root:exittsu切换 root 用户时会弹出 root 授权提示,给予其 root 权限即可。在管理员身份下输入 exit 可回到普通用户身份。

freeking101的博客 10万+

APP自动化测试-安卓性能测试Monkey

#Monkey介绍 ##什么是Monkey Monkey是一个Android自动化测试工具,主要用于Android的压力测试,测试app是否会Crash,通过Monkey程序模拟用户触摸屏幕、按键等操作来对设备上的程序进行压力测试,检测程序多久的时间会发生异常,Monkey测试是一种为了测试软件的稳定性,健壮性快速有效的方法。 #安装Monkey测试环境 *安装JDK,配置环境变量(https://www.oracle.com/technetwork/j...

Roda的博客 5945

Keepass2Android密码管理器:安卓平台开源密码管理完整指南

在当今数字时代,保护您的在线账户安全至关重要。**Keepass2Android密码管理器**是一款功能强大的开源Android应用,让您能够安全存储和管理所有密码。这款兼容KeePass桌面版的移动应用,通过主密码和双重验证保护您的敏感信息,支持跨设备同步,是个人和企业用户的理想选择。 ## 🎯 项目亮点:为什么选择Keepass2Android? **Keepass2Android**作

gitblog_00533的博客 1139

android手机自动化测试,Android手机自动化测试实例详解

2014-9-24本人从参加工作以来,一直在做自动化测试方面的工作。最初接触的是Web自动化,后来又做接口自动化测试。由于最近几年手机应用越来越广泛,手机应用的自动化测试也发展的很快,所以我就利用工作之余去学习手机自动化测试。手机自动化框架也比较多,针对ios,android两个不同的平台,最后我挑选了appium,它是利用webdriver来进行驱动测试的,这个框架我比较熟悉,而且它支持两个平台...

weixin_39977488的博客 617

ETL实战指南:从数据抽取、清洗到加载的完整流程与最佳实践

在数据驱动业务的时代,数据集成与数据仓库建设已成为企业数字化转型的基础。无论是构建BI报表、数据中台,还是支撑数据分析,都离不开一套可靠的数据处理流程。ETL作为数据工程的核心方法论,涵盖抽取、转换与加载三个关键环节,旨在将分散、异构、脏乱的原始数据加工为统一、可信、可直接用于分析的数据资产。其技术价值不仅在于解决数据同步问题,更在于通过清洗规范化、口径统一和幂等设计,保障数据质量与一致性。在实际应用中,ETL广泛用于离线批量同步、实时数据捕获及数据湖分析等场景,帮助团队构建稳定高效的数据管道。本文结合工程

weixin_34049948的博客 557
上一篇: 【附源码】pytest多并发实践
下一篇: 【性能测试基础】性能专有名词解析及性能瓶颈分析技巧
晴时初遇雨
博客等级 码龄7年 1253粉丝 72原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值