美文网首页
python3 uiautomator2 (二) 、操作app

python3 uiautomator2 (二) 、操作app

作者: HC2 | 来源:发表于2022-01-25 11:59 被阅读0次

    一、启动app

    1、连接手机
    2、启动 python -m weditor
    3、以抖音为例,手机打开抖音

    image.png

    4、current: 获取当前包名和activity

    控制台输入: uiautomator2 current

    {
        "package": "com.ss.android.ugc.aweme",
        "activity": "com.ss.android.ugc.aweme.search.activity.SearchResultActivity"
    }
    

    5、通过包名打开抖音app

    import uiautomator2 as u2
    d = u2.connect('c6e989d7')
    d.app_start("com.ss.android.ugc.aweme") # 启动抖音APP
    d.app_stop("com.ss.android.ugc.aweme")  #停止应用
    

    二、打开一个干净的抖音app

    如果我们想打开一个干净的app,可以使用app_clear 先清除app数据再打开

    import uiautomator2 as u2
    d = u2.connect('c6e989d7')
    d.app_clear('com.ss.android.ugc.aweme')
    d.app_start("com.ss.android.ugc.aweme") # 启动抖音APP
    print(d.info)
    

    三、定位

    1、resourceId定位
    image.png
    import uiautomator2 as u2
    d = u2.connect('c6e989d7')
    d.app_start("com.ss.android.ugc.aweme") # 启动抖音APP
    d(resourceId="com.ss.android.ugc.aweme:id/foj").click() #点击搜索按钮
    
    2、className定位
    image.png
    import uiautomator2 as u2
    d = u2.connect('c6e989d7')
    try:
        d.app_stop("com.ss.android.ugc.aweme")
    except:
        pass
    d.app_start("com.ss.android.ugc.aweme") # 启动抖音APP
    d(className="android.widget.Button").click() #点击搜索按钮
    
    3、description 定位
    import uiautomator2 as u2
    d = u2.connect('c6e989d7')
    try:
        d.app_stop("com.ss.android.ugc.aweme")
    except:
        pass
    d.app_start("com.ss.android.ugc.aweme") # 启动抖音APP
    d(description="搜索").click() #点击搜索按钮
    
    4、xpath定位
    import uiautomator2 as u2
    d = u2.connect('c6e989d7')
    try:
        d.app_stop("com.ss.android.ugc.aweme")
    except:
        pass
    d.app_start("com.ss.android.ugc.aweme") # 启动抖音APP
    d.xpath('//*[@resource-id="com.ss.android.ugc.aweme:id/foj"]').click() #点击搜索按钮
    
    5、text定位
    import uiautomator2 as u2
    d = u2.connect('c6e989d7')
    try:
        d.app_stop("com.ss.android.ugc.aweme")
    except:
        pass
    d.app_start("com.ss.android.ugc.aweme") 
    d(resourceId="com.ss.android.ugc.aweme:id/foj").click()  # 点击搜索按钮
    d(text="搜索").click()  #text定位
    
    三、复杂一点的定位
    1、通过父元素定位子元素
    image.png

    如上图,如果我们要定位图中2的元素时,再上几层级都有相同的元素,我们就可通过父级元素进行定位子级元素

    import time
    import uiautomator2 as u2
    d = u2.connect('c6e989d7')
    try:
        d.app_stop("com.ss.android.ugc.aweme")
    except:
        pass
    d.press('home') #先返回首页
    d.app_start("com.ss.android.ugc.aweme") # 启动APP
    
    d(resourceId="com.ss.android.ugc.aweme:id/foj").click()
    d.set_fastinput_ime(True) #切换输入法
    d.send_keys('mangguo520')
    
    print("点击搜索栏目")
    d(resourceId="com.ss.android.ugc.aweme:id/lyj").click()
    
    print("点击用户搜索")
    d(text="用户").click()
    time.sleep(3)
    re = d(resourceId="com.ss.android.ugc.aweme:id/a0b").child(className="android.widget.FrameLayout")
    print("re",re)
    
    2、多个元素中,查找其中一个
    image.png
    查找一个android.widget.FrameLayout
    
    
    re = d(className="androidx.recyclerview.widget.RecyclerView").child(className="android.widget.FrameLayout")[0].get_text()
    

    或者

    re = d(className="androidx.recyclerview.widget.RecyclerView").child(className="android.widget.FrameLayout").get_text()
    

    不选择下标默认定位第一个元素

    取第二个元素:

    re = d(className="androidx.recyclerview.widget.RecyclerView").child(className="android.widget.FrameLayout")[1].get_text()
    
    3、child_by_text 定位子元素
    image.png
    import time
    import uiautomator2 as u2
    d = u2.connect('c6e989d7')
    try:
        d.app_stop("com.ss.android.ugc.aweme")
    except:
        pass
    d.app_start("com.ss.android.ugc.aweme") # 启动APP
    d(resourceId="com.ss.android.ugc.aweme:id/foj").click()
    d.send_keys('mangguo520')
    d(resourceId="com.ss.android.ugc.aweme:id/lyj").click()
    d(text="用户").click()
    time.sleep(3)
    re = d(resourceId="com.ss.android.ugc.aweme:id/a0b").child_by_text('mangguo520',className="com.lynx.tasm.behavior.ui.text.FlattenUIText")  #定位抖音号为xxx的元素
    
    print("re",re)
    
    4、child_by_description
    import time
    import uiautomator2 as u2
    d = u2.connect('c6e989d7')
    try:
        d.app_stop("com.ss.android.ugc.aweme")
    except:
        pass
    d.app_start("com.ss.android.ugc.aweme") # 启动APP
    d(resourceId="com.ss.android.ugc.aweme:id/foj").click()
    d.send_keys('mangguo520')
    d(resourceId="com.ss.android.ugc.aweme:id/lyj").click()
    d(text="用户").click()
    time.sleep(3)
    re = d(resourceId="com.ss.android.ugc.aweme:id/a0b").child_by_description('mangguo520',className="com.lynx.tasm.behavior.ui.text.FlattenUIText")
    
    print("re",re.get_text())
    
    5、 siblings

    通过兄弟定位

    image.png

    如图想关注某个抖音号为 aaaa,的用户,可现通过定位抖音号,再去查找它的兄弟“关注”按钮

    import time
    import uiautomator2 as u2
    d = u2.connect('c6e989d7')
    try:
        d.app_stop("com.ss.android.ugc.aweme")
    except:
        pass
    d.app_start("com.ss.android.ugc.aweme") # 启动APP
    d(resourceId="com.ss.android.ugc.aweme:id/foj").click()
    d.send_keys('mangguo520')
    d(resourceId="com.ss.android.ugc.aweme:id/lyj").click()
    d(text="用户").click()
    time.sleep(3)
    re = d(text="mangguo520").sibling(text="关注",className="com.lynx.tasm.behavior.ui.view.UIView").click()
    

    相关文章

      网友评论

          本文标题:python3 uiautomator2 (二) 、操作app

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