zoukankan      html  css  js  c++  java
  • appium+python自动化32-android_uiautomator定位进阶版

    前言

    上一篇介绍uiautomator的定位方式都是类似这种'new UiSelector().xxx("xxx")',看起非常长,我也记不住,这很不python。于是本篇优化了定位方法,去掉该死的'new UiSelector().'

    组合定位

    1.一般组合用id,class,text这三个属性会比较好一点,其次description这个属性也可以一起两两组合

    2.id与text属性组合

    # 1.id+text
    id_text = 'resourceId("com.baidu.yuedu:id/webbooktitle").text("小说")'
    driver.find_element_by_android_uiautomator(id_text).click()
    

    3.class与text属性组合

    sleep(2)
    # 2.class+text
    class_text = 'className("android.widget.TextView").text("图书")'
    driver.find_element_by_android_uiautomator(class_text).click()
    

    4.其它更多组合,id,class也可以与其它的index,checkable,clickable,password等这些不常用的属性组合,小编试了下不稳定,所以不推荐

    父子定位childSelector

    1.有时候不能直接定位某个元素,但是它的父元素很好定位,这时候就先定位父元素,通过父元素找儿子。

    举个例子:你很喜欢一个女生,但是没她的直接联系方式。你有她爸的联系方式,于是你就可以通过先找她爸,再找到她。

    # 父子关系childSelector
    son = 'resourceId("com.baidu.yuedu:id/rl_tabs").childSelector(text("小说"))'
    driver.find_element_by_android_uiautomator(son).click()
    

    兄弟定位fromParent

    1.有时候父元素不好定位,但是跟他相邻的兄弟元素很好定位,这时候就可以通过兄弟元素,找到同一父级元素下的子元素。

    举个例子:你喜欢一个女生,但是没她的直接联系方式。你跟她哥哥关系是铁哥们,于是你就可以通过她哥哥来找到她。

    # 兄弟关系fromParent
    brother = 'resourceId("com.baidu.yuedu:id/lefttitle").fromParent(text("图书"))'
    driver.find_element_by_android_uiautomator(brother).click()
    

    更多高级技能

    上一篇讲到text定位有四种方式,那么id,class也是可以正则匹配。我试了下id和class的StartsWith和Contains会报错,所以不推荐了。

    1.text

    • text("text文本")
    • textContains("包含text文本")
    • textStartsWith("以text文本开头")
    • textMatches("正则表达式")

    2.className

    • className("class属性")
    • classNameMatches("正则表达式")
    # classNameMatches(".*xxx$")
    classMatches = 'classNameMatches(".*TextView$").text("小说")'
    driver.find_element_by_android_uiautomator(classMatches).click()
    

    3.resourceId

    • resourceId("id属性")
    • resourceIdMatches("正则表达式")
    # resourceIdMatches(".*xxx$")
    idmatches = 'resourceIdMatches(".*id/lefttitle$")'
    driver.find_element_by_android_uiautomator(idmatches).click()
    

    参考代码

    # coding:utf-8
    from appium import webdriver
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from time import sleep
    desired_caps = {
                    'platformName': 'Android',
                    'deviceName': '127.0.0.1:62001',
                    'platformVersion': '4.4.2',
                    'appPackage': 'com.baidu.yuedu',
                    'appActivity': 'com.baidu.yuedu.splash.SplashActivity',
                    'noReset': 'true',
                    'resetKeyboard': 'true',
                    'unicodeKeyboard': 'true'
                    }
    driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
    
    # 等主页面activity出现
    driver.wait_activity(".base.ui.MainActivity", 10)
    
    # 1.id+text
    id_text = 'resourceId("com.baidu.yuedu:id/webbooktitle").text("小说")'
    driver.find_element_by_android_uiautomator(id_text).click()
    
    sleep(2)
    # 2.class+text
    class_text = 'className("android.widget.TextView").text("图书")'
    driver.find_element_by_android_uiautomator(class_text).click()
    
    sleep(2)
    # 父子关系childSelector
    son = 'resourceId("com.baidu.yuedu:id/rl_tabs").childSelector(text("小说"))'
    driver.find_element_by_android_uiautomator(son).click()
    
    sleep(2)
    # 兄弟关系fromParent
    brother = 'resourceId("com.baidu.yuedu:id/lefttitle").fromParent(text("图书"))'
    driver.find_element_by_android_uiautomator(brother).click()
    
    sleep(2)
    # resourceIdMatches(".*xxx$")
    idMatches = 'resourceIdMatches(".*id/lefttitle$")'
    driver.find_element_by_android_uiautomator(idMatches).click()
    
    sleep(2)
    # classNameMatches(".*xxx$")
    classMatches = 'classNameMatches(".*TextView$").text("小说")'
    driver.find_element_by_android_uiautomator(classMatches).click()
    

    在学习过程中有遇到疑问的,可以appium+python QQ群交流:330467341

  • 相关阅读:
    2013.4.15 Particle Swarm Optimization with Skyline Operator for Fast Cloudbased Web Service Composition
    Adaptive service composition in flexible processes
    2013.4.13 DomainSpecific Service Selection for Composite Services
    2013.4.14 Modeling and Algorithms for QoSAware Service Composition in VirtualizationBased Cloud Computing
    2013.5.29 Towards Networkaware Service Composition in the Cloud
    Efficient algorithms for Web services selection with endtoend QoS constraints
    SQL Server中常用的SQL语句
    接口限流自定义注解
    linux服务器生产环境搭建
    MVEL自定义函数重复掉用报错:duplicate function
  • 原文地址:https://www.cnblogs.com/yoyoketang/p/7843819.html
Copyright © 2011-2022 走看看