首页 > 其他分享 >【APP自动化基础】安卓UI自动化

【APP自动化基础】安卓UI自动化

时间:2024-01-30 11:47:35浏览次数:25  
标签:shell APP driver base adb 自动化 UI self

环境搭建

【自动化基础】搭建APP的UI自动化环境

获取app的Activity和Package的五种方式

方式一:通过dumpsys window获取

#获取当前页面的Package和Activity
adb shell dumpsys window w | findstr \/ | findstr name=
#或者:
adb shell dumpsys window | findstr mCurrentFocus
adb shell dumpsys window | grep mCu
#获取模拟器正在运行的APP的Package和Activity
adb shell dumpsys activity | find "mFocusedActivity"
adb shell dumpsys window windows | findstr mFocusedApp
#获取真机正在运行的APP的Package和Activity
adb shell dumpsys activity | find "mResumedActivity"
#获取带端口号的Activity
adb shell dumpsys activity top | findstr ACTIVITY

方式二:列出模拟器或真机中所有软件的Package

#获取设备的所有apk对应的包名和路径
adb shell pm list package -f  
#获取第三方apk的包
adb shell pm list package -3 -f 

方式三:logcat日志抓START

adb shell logcat | grep START

方式四:logcat日志抓ActivityManager(实时查看)

adb shell logcat | grep ActivityManager
adb logcat | grep ActivityManager
adb logcat | grep -i ActivityManager.*Displayed

方式五:通过aapt工具获取

aapt dump badging C:\apk\weixin01.apk

元素定位获取工具

  • uiautomatorviewer
  • Appium Inspector
  • weditor

【APP自动化测试】APP元素定位工具

ADB启动app

adb shell am start com.tencent.tmgp.WePop/.PermissionActivity
adb shell am start -W -n com.tencent.tmgp.WePop/com.tencent.tmgp.WePop.PermissionActivity -S
-W:等待启动完成。
-n component 指定带有软件包名称前缀的组件名称以创建显式 intent,如 com.example.app/.ExampleActivity。
-S:在启动 Activity 前,强行停止目标应用。

具体am参数解释参考:https://blog.csdn.net/weixin_44380181/article/details/129698064

UI自动化项目Demo

import time
from appium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By
from appium.webdriver.common.touch_action import TouchAction


class Base:
    """基类公共方法封装"""

    def __init__(self, driver):
        """初始化"""
        self.driver = driver

    def base_find(self, loc, timeout=5, poll_frequency=0.5):
        """获取查找元素"""
        # 显示等待
        return WebDriverWait(self.driver,
                             timeout=timeout,
                             poll_frequency=poll_frequency) \
            .until(lambda x: x.find_element(*loc))

    def base_input(self, loc, value):
        """输入操作"""
        # 获取元素
        el = self.base_find(loc)
        # 清空(防止缓存数据)
        el.clear()
        # 输入
        el.send_keys(value)

    def base_click(self, loc):
        """点击操作"""
        self.base_find(loc).click()

    def base_get(self, loc):
        """获取文本"""
        return self.base_find(loc).text

    def base_xy_click(self, x, y):
        """根据xy轴位置进行点击"""
        return TouchAction(self.driver).press(x=x, y=y).release().perform()

    def base_switch_handle(self):
        """窗口句柄切换"""
        handle = self.driver.current_window_handle   # 当前窗体句柄
        print("当前窗体句柄:", handle)
        handles = self.driver.window_handles    # 所有窗体句柄
        print("窗体句柄", handles)       # 获取浏览器所有窗体的句柄
        self.driver.switch_to.window(handles[-1])   # 切换至最新窗口句柄

class PaoPao:
    # 1.初始化脚本
    def __init__(self):
        desired_caps = {
            'platformName': 'Android',  # 平台系统
            'deviceName': 'emulator-5554',  # 设备名称
            'platformVersion': '7.1.2',  # 系统版本
            'appPackage': 'com.tencent.tmgp.WePop',  # 被测应用包
            'appActivity': '.PermissionActivity',  # 要打开的应用活动
            # 'app': PATH(r'D:\shell_customer-debug.apk'),   # 安装应用包
            # 'automationName': "uiautomator1",         # 自动化测试框架 (1.4以上的appium不用写)
            # 'autoGrantPermissions': "true",  # 默认允许app获取相关权限
            'noReset': 'True'  # 每次非首次启动(冷启动)可以记住登录
            # 'unicodeKeyboard': 'false',            # 此两行是为了解决字符输入不正确的问题
            # 'resetKeyboard': 'true'               # 运行完成后重置软键盘的状态

        }
        self.driver = webdriver.Remote("http://localhost:4723/wd/hub", desired_caps)
        self.base = Base(self.driver)
    # 2.执行脚本编写
    def run(self):
        # 判断登录状态
        
        self.base.base_click((By.ID, "dialog_confirm_btn"))
        print("tag")
        time.sleep(2)
        self.base.base_click((By.TAG_NAME, "同意"))



if __name__ == '__main__':
    PaoPao().run()

项目实战

【APP自动化进阶】APP自动化项目框架实战

标签:shell,APP,driver,base,adb,自动化,UI,self
From: https://www.cnblogs.com/upstudy/p/17988145

相关文章

  • SOAP UI多并发访问配置
    1、在请求Request中,右键新建一个测试Case2、选择TestCase,新建负载测试3、运行 ......
  • 【APP自动化测试】APP元素定位工具
    appium做移动端自动化测试,定位元素工具uiautomatorviewerAppiumInspectorweditor前置条件:已连接真机或手机模拟器,adbdevices有显示连接的手机列表。uiautomatorvieweruiautomatorviewer是android-sdk自带的一个元素定位工具,目录D:\xxx\android-sdk-windows\tools。......
  • 网易邮箱大师登录需要下载app吗
    在今天的移动互联网时代,电子邮件已经成为人们生活中不可或缺的一部分。随着手机的普及和使用频率的增加,手机邮箱客户端应运而生,其中网易邮箱大师便是备受欢迎的一款。但对于许多用户来说,一个普遍存在的疑问是:网易邮箱大师登录需要下载app吗?让我们深入探讨这个问题。网易邮箱大师登......
  • Walrus 实用教程|Walrus + Gitlab,打通CI/CD 自动化交付!
    Walrusfile是Walrus0.5版本推出的新功能,用户可以通过一个非常简洁的YAML描述应用或基础设施资源的部署配置,然后通过WalrusCLI执行walrusapply或在WalrusUI上进行import,将Walrusfile提交给Walrusserver,由Walrusserver完成对应用或基础设施资源的部署/配置/......
  • idea配置tomcat利用Build Artifacts打war包
    idea配置tomcat利用BuildArtifacts打war包idea有BuildArtifacts功能,可以一键打war包。这种方式适合没有maven等项目构建的。也就是老项目,把jar包放在lib里面的web项目。本人有幸参与改造公司的老项目。今天给大家分享如何打包!!!一.idea配置tomcat。我想大家都被分配到做这老项......
  • HT UI 5.0,前端组件图扑是认真的!
    为顺应数字时代的不断发展,图扑HTUI5.0在原有功能强大的界面组件库的基础上进行了全面升级,融入了更先进的技术、创新的设计理念以及更加智能的功能。HTUI5.0使用户体验更为直观、个性化,并在性能、稳定性和安全性等方面达到新的高度。HTUI5.0的改版升级,是团队对于用户需求......
  • uniapp ArrayBuffer转16进度字符串 以及 十六进制转ASCII码
    1.ArrayBuffer转16进度字符串//ArrayBuffer转16进度字符串示例//ab2hex(buffer){//consthexArr=Array.prototype.map.call(//newUint8Array(buffer),//function(bit){//......
  • 物流平台如何与电商平台进行自动化流程管理
    为什么要实现物流与电商平台进行自动化管理实现物流平台与电商平台的自动化流程管理对企业和消费者都有着重要的意义,比如以下几点:提高效率:自动化流程管理可以减少人为操作的错误和延误,提高订单处理和物流配送的效率。通过定义清晰的流程图和自动化工具,可以快速而准确地完成订单处理......
  • Jenkins + Gitlab 前后端项目自动化构建部署
    Jenkins+Gitlab前后端项目自动化构建部署:https://blog.csdn.net/IT_ZRS/article/details/115032509?spm=1001.2014.3001.5501Docker+Jenkins+Gitlab自动化构建部署:https://blog.csdn.net/IT_ZRS/article/details/117533847?spm=1001.2101.3001.6650.1&utm_medium=distrib......
  • web自动化测试复习巩固第二天
    定位方法selenium4:driver.find_element(定位策略用By类,定位表达式)---返回表达式匹配的第一个元素,如果找不到元素,会报错。driver.find_elements(定位策略用By类,定位表达式)---返回表达式匹配的所有元素,返回的是列表类型。By类:管理8种定位方式,每一种定位方......