美文网首页
Appium常用定位方式

Appium常用定位方式

作者: test小星星 | 来源:发表于2019-08-18 12:21 被阅读0次

    前言

    与Web自动化测试一样,app自动化测试过程中最重要一个环节就是元素定位,只有准确定位到了元素才能进行相关元素的操作。appium继承了selenium的定位方法,并在其基础上进行了扩展,以适应移动端控件的定位。


    id 定位

    id定位是使用控件的resource-id进行定位的,如下图所示:


    id定位

    resourec-id定位方法如下:

    driver.find_element_by_id("com.xueqiu.android:id/button_icon")
    

    Class Name 定位

    Class Name 定位是使用控件的class属性进行定位的,如下图所示:


    class name定位

    class 定位方法如下:

    driver.find_element_by_class_name("android.widget.ImageView")
    

    由于class属性的重复性很高,不一定能准确的定位到想要的控件,我们可以先定位一组控件,再进一步筛选。

    # 先定位一组控件
    list = driver.find_elements_by_class_name("android.widget.ImageView")
    # 循环遍历所有控件
    for i in list:
      print(i)
    
    # 操作某一个控件
    list[0].click() # 点击第一个控件
    list[-1].click() # 点击最后一个控件
    

    XPath 定位

    xpath定位是一种路径定位方式,主要是依赖于元素绝对路径或者相关属性来定位,但是绝对路径xpath执行效率比较低(特别是元素路径比较深的时候),一般使用比较少。通常使用xpath相对路径和属性定位。
    xpath定位语法

    image.png
    xpath方法如下:
    # 绝对定位
    driver.find_element_xpath("/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.wid\
    get.FrameLayout/android.view.ViewGroup/android.widget.FrameLayout/android.widget.LinearLayout/androi\
    d.widget.FrameLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.view.ViewGroup/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.Relati\
    veLayout[1]/android.widget.FrameLayout/android.widget.ImageView
    ")
    
    # 相对定位
    driver.find_element_by_xpath('//android.widget.EditText[@text="请输入用户名"]')
    driver.find_element_by_xpath('//*[@class="android.widget.EditText" and @index="3"]')
    # contains函数定位(支持模糊匹配)
    driver.find_element_by_xpath(//*[contains(@resource-id, 'user_profile_icon') and contains(@class, 'Image')])
    # 属性组合定位
    //*[@text='基金' and contains(@resource-id, 'button')]
    //*[@text='基金' and @index='1']
    # list定位
    (//*[@text='基金'])[1]
    # 父子关系定位
    //[contains(@resource-id, 'buttons_container')]//[@text='基金']
    

    appium xpath定位与selenium xpath 定位有一点不一样的是,selenium xpath是通过元素标签一层一层往下找,而appium xpath定位是通过class属性来代替标签名。

    层级定位

    层级定位是先找到该元素的有对应属性的父元素节点,然后基于父元素进行元素定位。
    层级定位方法如下:

    # 先定位它的父级
    root_element=driver.find_element_by_id('com.tal.kaoyan:id/activity_register_parentlayout')
    # 然后通过父级定位它的子级
    root_element.find_element_by_class_name('android.widget.ImageView').click()
    
    

    Accessibility id 定位

    该方法属于appium扩展的定位方法, 它的核心是找到控件的contentDescription属性。

    • 在Android中,content-desc属性对应AccessibilityId定位方式,如果这个属性不为空则推荐使用。
    • 在iOS中,label和name属性都对应AccessibilityId定位方式,如果有则推荐使用。

    accessibility id定位方法如下:

    driver.find_element_by_accessibility_id("天猫超市").click()
    

    Android uiautomator 定位

    该方法属于appium的扩展方法,并且只支持Android平台。支持元素全部属性定位.定位原理是通过android 自带的android uiautomator的类库去查找元素。 Appium元素定位方法其实也是基于Uiautomator来进行封装的。

    Android uiautomator 定位方法如下:

    # id 定位
    driver.find_element_by_android_uiautomator('new UiSelector().resourceId("com.tal.kaoyan:id/login_email_edittext")')
    
    # text定位
    driver.find_element_by_android_uiautomator('new UiSelector().text("请输入用户名")')
    
    # class name定位
    driver.find_element_by_android_uiautomator('new UiSelector().className("android.widget.EditText")')
    
    #组合定位id+text
    id_text = 'new UiSelector().resourceId("com.baidu.yuedu:id/webbooktitle").text("小说")'
    driver.find_element_by_android_uiautomator(id_text).click()
    
    # 滚动到指定位置
    self.driver.find_element_by_android_uiautomator('new UiScrollable('
                                                        'new UiSelector().scrollable(true).instance(0))'
                                                        '.scrollIntoView('
                                                        'new UiSelector().text("Views").instance(0));').click()
    

    常用api

    • click 点击
    • send_keys 输入
    • get_attribute 获取某个属性
    • page_source 页面所有元素

    相关文章

      网友评论

          本文标题:Appium常用定位方式

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