美文网首页
3. u2定位元素方法

3. u2定位元素方法

作者: BeautifulSoulpy | 来源:发表于2020-12-10 23:44 被阅读0次

    3-1 u2自动化工具基本操作-操作设备

    1. uiautomator2
    import uiautomator2 as u2
    
    import time
    
    d = u2.connect_adb_wifi("192.168.0.100:5555")
    # 查看状态
    print(d.service("uiautomator").running())
    # 启动服务
    d.service("uiautomator").start()
    time.sleep(2)
    print(d.service("uiautomator").running())
    
    #停止状态
    d.service("uiautomator").stop()
    time.sleep(2)
    print(d.service("uiautomator").running())
    #-------------------------------------------
    already connected to 192.168.0.100:5555
    True
    True
    False
    
    2. ATX-agent

    如果ATX-agent停止,可以通过connnect来唤醒ATX-agent

    import uiautomator2 as u2
    
    import time
    
    d = u2.connect_adb_wifi("192.168.0.100:5555")
    # 查看ATX-agent运行状态;如果停,可以通过connnect来唤醒ATX-agent
    print(d.agent_alive)
    # -------------------------------------------
    True
    
    
    # 查看设备信息
    print(d.device_info)
    # 查看设备的分辨率
    print(d.window_size())
    # 查看获取的wifi地址
    print(d.wlan_ip)          # 模拟器与真机不一致;
    #-------------------------------------------------
    {'udid': 'android-08:00:27:e9:1b:52-AOSP_on_Shama', 'version': '5.1.1', 'serial': 'android', 'brand': 'Android', 'model': 'AOSP on Shama', 'hwaddr': '08:00:27:e9:1b:52', 'port': 7912, 'sdk': 22, 'agentVersion': '0.9.5', 'display': {'width': 1080, 'height': 1920}, 'battery': {'acPowered': False, 'usbPowered': True, 'wirelessPowered': False, 'status': 2, 'health': 2, 'present': True, 'level': 87, 'scale': 100, 'voltage': 4, 'temperature': 26, 'technology': 'Li-ion'}, 'memory': {'total': 3110960, 'around': '3 GB'}, 'arch': '', 'owner': None, 'presenceChangedAt': '0001-01-01T00:00:00Z', 'usingBeganAt': '0001-01-01T00:00:00Z', 'product': None, 'provider': None}
    (1080, 1920)
    172.16.70.15
    

    3-2 u2自动化工具基本操作-操作app

    1. 安装apk与启动
    # 1. url安装
    import uiautomator2 as u2
    
    d = u2.connect_wifi("192.168.0.100")
    # 通过 app_install, urll= 'XXX.apk'
    d.app_install(url="http://file.mukewang.com/apk/app/124/1606182011/imooc_7.4.4_10102001_android.apk")
    # ------------------------------------
    [D 201210 11:03:58 __init__:1291] pm install -rt /data/local/tmp/_tmp.apk
    
    
    aapt dump badging imooc_7.4.4_10102001_android.apk
    package: name='cn.com.open.mooc' versionCode='7440' versionName='7.4.4' platformBuildVersionName=''
    
    
    # 启动app
    d.app_start(package_name="cn.com.open.mooc")
    
    print(d.app_current())   # 获取当前前台运行的app信息;
    #--------------------------------
    {'package': 'cn.com.open.mooc', 'activity': 'cn.com.open.mooc.component.user.activity.login.LoginActivity'}
    
    # 停止 app ;
    d.app_stop(package_name="cn.com.open.mooc")
    
    # 获取app详细信息
    print(d.app_info(package_name="cn.com.open.mooc"))
    #--------------------------------
    {'packageName': 'cn.com.open.mooc', 'mainActivity': 'com.imooc.component.imoocmain.splash.MCSplashActivity', 'label': '慕课网', 'versionName': '7.4.4', 'versionCode': 7440, 'size': 35948349}
    
    # 清除app缓存
    d.app_clear("cn.com.open.mooc")
    
    # 卸载APP
    d.app_uninstall("cn.com.open.mooc")
    
    # 所有app_list
    print(d.app_list())
    
    # 在运行的app列表
    print(d.app_list_running())
    
    # 停止所有运行程序
    d.app_stop_all()
    
    # 卸载所有第三方的app;
    d.app_uninstall_all() 
    

    3-3 APP activity和控件,weditor工具的安装

    滑动、点击操作

    1. activity和控件
    activity相当于页面
    控件

    Android基础--------Android常用控件介绍及使用
    https://blog.csdn.net/weixin_38423829/article/details/80566203

    2. weditor工具的安装

    3-4 weditor工具介绍和常见问题-1

    启动
    weditor
    listening on http://192.168.0.103:17310

    最重要的几步

    1. 连接设备

    有绿叶标志表示连接成功;

    2. 开启 ATX启动

    注意:1. 必须保证ATX-agent是启动的;

    # 查看ATX启动状态1
    import uiautomator2 as u2
    
    d = u2.connect_wifi("192.168.0.100")
    print(d.agent_alive)   # True
    
    
    

    查看ATX启动状态2

    # 查看ATX启动状态2

    2. Linux下开启 ATX启动

    ATX启动

    3-5 weditor工具介绍和常见问题-2

    不同的手机有不同的现象,

    1. 关闭后台冻结和自动优化

    2. 开启自启动

    3-6 UiSelector和控件定位介绍

    两种定位方法


    1. UiSelector 介绍
    布局 线性布局
    帧布局 线性布局
    绝对布局

    控件

    控件

    3-7 UiSelector文本定位方式

    1. 文本定位四种方法
    1. text全文匹配
    import uiautomator2 as u2
    
    d = u2.connect_wifi("192.168.0.100")
    # aapt 与 weditor 获取包名
    
    d.app_start(package_name='com.android.settings')
    d(text="蓝牙").click()
    
    
    
    2. 文本包含
    d.app_start(package_name='com.android.settings')
    d(textContains="通知").click()
    
    
    3. 正则表达式
    d.app_start(package_name='com.android.settings')
    # d(textContains="通知").click()
    d(textMatches=".{4}通知").click()
    
    4. 起始文本
    d.app_start(package_name='com.android.settings')
    # d(textContains="通知").click()
    # d(textMatches=".{4}通知").click()
    d(textStartsWith="日期").click()
    
    2. 描述信息定位
    描述信息

    3-8 UiSelector className定位方式

    1. 两种定位方式
    className定位方式 蓝牙控件查找 Hieratchy控件查找
    className

    需要注意层级关系

    import uiautomator2 as u2
    
    d = u2.connect_wifi("192.168.0.100")
    # aapt 与 weditor 获取包名
    
    d.app_start(package_name='com.android.settings')
    d(className="android.widget.LinearLayout")[2].click()
    
    
    classNameMatches
    d.app_start(package_name='com.android.settings')
    d(classNameMatches="android\.widget\.\w{12}", text="蓝牙")[2].click()
    

    3-10 UiSelector resourceId定位方式

    混合定位的方式

    1. 通过资源ID来定位控件

    resourceId(推荐使用)
    通过资源ID来定位控件,通过索引来进行限定

    import uiautomator2 as u2
    
    d = u2.connect_wifi("192.168.0.100")
    # aapt 与 weditor 获取包名
    
    d.app_start(package_name='com.android.settings')
    d(resourceId="com.android.settings:id/icon")[1].click()
    
    # 通过实例来查找, 值 和 索引 是一样的
    d.app_start(package_name='com.android.settings')
    d(resourceId="com.android.settings:id/icon", instance=2).click()
    
    # 通过其他条件进行限定;
    d.app_start(package_name='com.android.settings')
    d(resourceId="com.android.settings:id/icon", text="蓝牙").click()
    

    resourceIdMatches

    d.app_start(package_name='com.android.settings')
    d(resourceIdMatches="com.android.settings:id\/\w{4}")[1].click()
    
    

    3-11 UiSelector混合定位方式-1

    层级关系
    1. 链式资源定位方式

    先定位上级标签,

    import uiautomator2 as u2
    
    d = u2.connect_wifi("192.168.0.100")
    # aapt 与 weditor 获取包名
    
    d.app_start(package_name="com.android.settings")
    d(className="android.view.View").child(text="蓝牙").click()
    
    
    

    3-12 UiSelector混合定位方式-2
    链式定位层级关系:几种定位方式可以混合;

    d(className="android.widget.ListView").child(resourceId="oppo:id/oppo_preference")[2].click()
    
    

    3-13 UiSelector 坐标定位方式

    坐标点的展示方式 有两种:

    1. 原始坐标;
    2. 百分比坐标点
    百分比坐标点定位
    d.app_start(package_name="com.android.settings")
    d.click(0.164, 0.248)
    
    

    3-14 控件操作和操作超时

    控件不存在时的异常处理机制
    在5s内没有点击控件 抛出异常

    # 在5s内没有点击控件 抛出异常
    d.app_start(package_name="com.android.settings")
    d(text="蓝牙").click(timeout=5)
    
    # 在5s内没有点击控件 不抛出异常
    d(text="蓝牙1").click_exists(timeout=5)
    
    # 是否存在 属性
    d.app_start(package_name="com.android.settings")
    print(d(text="蓝牙1").exists)
    
    print(d(text="蓝牙1").exists(timeout=5))
    
    # 显示有多少个子节点;
    d(resourceId="android:id/llist").count
    

    3-15 通过U2实现移动设备九宫格解锁

    1. 滑动解锁九宫格

    手机基本操作

    # 滑动解锁九宫格
    
    d.screen_off()   # 熄灭
    d.screen_on()    # 点亮屏幕
    
    d.unlock()  # 点亮
    print(d.info.get("screenOn")) # 查看屏幕状态
    
    返回
    # 点home
    d.press("home")
    # 返回
    d.press("back")
    
    左右滑
    import uiautomator2 as u2
    
    d = u2.connect_wifi("192.168.0.100")
    d.swipe_ext("left")
    

    3-16 Xpath 和 Xpath定位方式

    1. Xpath常用语法
    Xpath定位
    import uiautomator2 as u2
    
    d = u2.connect_wifi("192.168.0.100")
    # with open("./phone.file", 'w', encoding="utf-8") as f:
    #     f.write(d.dump_hierarchy())           # 写资源
    
    d.xpath('//*[@text="蓝牙"]').click() 
    
    
    2. 总结

    3-17 实现自动化登录考研帮app并滑动资讯信息-1

    实现代码

    
    import uiautomator2 as u2
    
    class HandleKaoyanbang(object):
        def __init__(self, serial="192.168.0.100"):
            self.d = u2.connect(serial)
            self.size = self.get_windowsize()
            self.handle_watcher()
    
        def handle_watcher(self):
            # 用户协议
            self.d.watcher.when('//*[@resource-id="com.tal.kaoyan:id/tip_commit"]').click()
            # 跳过广告
            self.d.watcher.when('//*[@resource-id="com.tal.kaoyan:id/tv_skip"]').click()
    
            # 监控器要 start启动
            self.d.watcher.start()
    
        def get_windowsize(self):
            return self.d.window_size()
    
        def close_app(self):
            # 监控关闭
            self.d.watcher.stop()
            # 停止考研帮app
            self.d.app_stop("com.tal.kaoyan")
            # 清理缓存
            self.d.app_clear("com.tal.kaoyan")
    
        def handle_kaoyanbang_app(self):
            self.d.app_start(package_name="com.tal.kaoyan")
            self.d(text='密码登录').click_exists(timeout=10)
            self.d(text="手机号/用户名/通行证").set_text('18326602330')
            self.d.xpath('//*[@resource-id="com.tal.kaoyan:id/kylogin_unamelogin_operate_layout"]/android.widget.RelativeLayout[1]').set_text('*********')
            self.d(resourceId="com.tal.kaoyan:id/login_login_btn").click_exists()
    
            if self.d.wait_activity("com.tal.kaoyan.ui.activity.HomeTabActivity",timeout=10):
                self.d(text="研讯").click_exists(timeout=10)
                # 获取屏幕的中心点 x轴
                # 获取到y轴远方点, 获取到y轴近点;
                x1 = int(self.size[0]*0.5)
                y1 = int(self.size[1]*0.9)
                y2 = int(self.size[1]*0.15)
                while True:
                    # get toast 信息提示操作;
                    if self.d.toast.get_message(0) == "内容已经全部加载完了":
                        self.close_app()
                        return
    
                    # 开始滑动研讯
                    self.d.swipe(x1, y1, x1, y2)
    
    
    if __name__ == '__main__':
        k = HandleKaoyanbang()
        k.handle_kaoyanbang_app()
    
    
    

    相关文章

      网友评论

          本文标题:3. u2定位元素方法

          本文链接:https://www.haomeiwen.com/subject/noylgktx.html