美文网首页Appium知识点汇总
Appium学习04-选择(定位)元素

Appium学习04-选择(定位)元素

作者: 残阳夕露 | 来源:发表于2018-08-16 15:24 被阅读77次

    Appium学习笔记目录

    本文包含内容

    1. 通过id定位元素
    2. 通过class_name定位元素
    3. 通过content-desc定位元素
    4. 通过text定位元素
    5. 通过xpath定位元素
    6. 实例代码

    元素定位

    • find_element_by_xxx符合条件的第一个元素,找不到抛出异常
    • find_elements_by_xxx符合条件的所有元素的列表,找不到返回空列表
    • 通过WebDriver查找范围是整个界面的树形结构
    • 通过WebElement查找的是该节点的子节点
    • 元素属性值查找及字段含义:参考文件
    driver.find_element_by_xxx
    driver.find_elements_by_xxx
    ele.find_element_by_xxx
    ele.find_elements_by_xxx
    

    通过id定位元素find_element_by_id

    • 元素的resource-id
    • 唯一标识该元素的值(id有时候并不唯一)

      使用前最好先判断下id是否唯一

    • 一般优先根据id定位
    # resource-id = 'io.manong.developerdaily:id/edt_phone'
    driver.find_element_by_id("io.manong.developerdaily:id/edt_phone")
    

    通过class_name定位元素find_element_by_class_name

    • clsaa属性决定了界面元素的类型
    • 如果我们要查找某种类型的界面元素,且该类型界面元素在当前界面中只有一个,则可以使用此方法
    driver.find_element_by_class_name('android.widget.Button')
    

    通过content-desc定位元素find_dlement_by_accessibility_id

    • content-desc属性是用来描述该元素的作用
    • 如果要查询的界面元素的content-desc在当前界面唯一,则可以使用此方法
    • 大部分情况下,该字段为空
    driver.find_dlement_by_accessibility_id('test')
    

    通过text定位元素driver.find_element_by_android_uiautomator("text('xxx')")

    • 元素id相同时,可以根据text来进行定位
    driver.find_element_by_android_uiautomator("text('热点')")
    

    通过xpath定位元素

    • xpath定位方法可参考:Selenium学习005-元素选择之xpath
    • 当以上方法都无法定位到具体元素时,可以采用xpath方法定位元素
      1. 通过定位工具发现底部几个栏位是同一个class,只有index和界面图标不同
      2. 首先,根据id定位可唯一判断的元素
      3. 然后,找到此唯一元素下级目录汇总class属相对应元素
      4. 最后,取出列表中自己想要的值
        注:index从0开始计算,xpath从1开始计算
    # 方法一:xpath
    xpath = "//*[@resource-id='io.manong.developerdaily:id/tab_layout']//android.widget.RelativeLayout[2]"
    driver.find_element_by_xpath(xpath)
    
    # 方法二:xpath+index
    xpath = "//*[@resource-id='io.manong.developerdaily:id/tab_layout']//android.widget.LinearLayout//[@index=1]"
    driver.find_element_by_xpath(xpath)
    
    

    实例代码

    # coding=utf-8
    
    from appium import webdriver
    import time,traceback
    
    desired_caps = {}  # 定义字典:告诉appium我们的一些配置
    desired_caps['platformName'] = 'Android'  # 固定值
    desired_caps['platformVersion'] = '6'  # android版本
    desired_caps['deviceName'] = 'test'  # 连接多个设备时会用到 ?
    # desired_caps['app'] = r'/Users/liuhuaiyuan/Downloads/toutiao.apk' # apk在电脑上的路径
    desired_caps['appPackage'] = 'io.manong.developerdaily' # apk的package  通过aapt命令查找
    desired_caps['appActivity'] = 'io.toutiao.android.ui.activity.LaunchActivity' # 指定apk的启动界面(通常启动界面是唯一的) 通过aapt命令查找
    desired_caps['unicodeKeyboard']  = True  # 安装中文输入法,以便于控制,及部分中文的输入
    desired_caps['resetKeyboard']  = True  # 针对上一条语句,如果手机还有其他的输入法,还原输入法,便于其他操作
    desired_caps['noReset'] = True   # 重要参数,=True 恢复默认值,=False(缺省值) 每次都是从刚安装app的状态进入(格式化状态),可能会显示欢迎页等
    desired_caps['newCommandTimeout'] = 6000  # 设置等待时间,当超过这个时间时,将断开与appium的连接。单位是秒
    #启动Remote RPC
    driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps ) # 连接appium,并将参数(字典)传入,执行完此句后,与appium创建一个session
    # 0.0.0.0:4723
    try:
        driver.implicitly_wait(10)  # 隐式等待,每0.5秒查询一次,直到指定时间,结束。单位是秒
    
        # 根据id找到元素,并点击,id和 html 元素的id不同
        driver.find_element_by_id("io.manong.developerdaily:id/tab_bar_plus").click()
        time.sleep(1)
    
        # 定位到密码方式登录
        driver.find_element_by_xpath("//*[@resource-id='io.manong.developerdaily:id/tab_layout']//android.widget.RelativeLayout[2]").click()
    
        driver.find_element_by_id("io.manong.developerdaily:id/edt_phone").send_keys('13917768034')
        driver.find_element_by_id("io.manong.developerdaily:id/edt_password").send_keys('HUAIYUAN1990')
    
    
        time.sleep(2)
        # 点击登录
        driver.find_element_by_id('io.manong.developerdaily:id/btn_login').click()
        pass
    
    except:
        print (traceback.format_exc())
    
    
    driver.quit()
    
    

    相关文章

      网友评论

        本文标题:Appium学习04-选择(定位)元素

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