• APP元素定位操作


        手工测试主要通过可见按钮操作,而自动化是通过元素进行交互操作.
        ⚠️⚠️⚠️ 元素的基本定位基于当前屏幕范围内展示的可见元素。
    Appium常用元素定位方式

     前置代码

    
    
        from appium import webdriver
        # server 启动参数
        desired_caps = {}
        # 设备信息
        desired_caps['platformName'] = 'Android'
        desired_caps['platformVersion'] = '5.1'
        desired_caps['deviceName'] = '192.168.56.101:5555'
        # app的信息
        desired_caps['appPackage'] = 'com.android.settings'
        desired_caps['appActivity'] = '.Settings'
    
        # 声明我们的driver对象
        driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
    
    

    通过id定位

    方法:find_element_by_id(id_value) # id_value:为元素的id属性值
      业务场景:
          1.进入设置页面
          2.通过ID定位方式点击搜索按钮
      代码实现:
          driver.find_element_by_id("com.android.settings:id/search").click()
          driver.quit()

    通过class定位

     方法:find_element_by_class_name(class_value) # class_value:为元素的class属性值

      业务场景:

            1.进入设置页面
            2.点击搜索按钮
            3.通过class定位方式点击输入框的返回按钮
        代码实现:
            # id 点击搜索按钮
            driver.find_element_by_id("com.android.settings:id/search").click()
            # class 点击输入框返回按钮
            driver.find_element_by_class_name('android.widget.ImageButton').click()
            driver.quit()

    通过xpath定位

    方法:find_element_by_xpath(xpath_value) # xpath_value:为可以定位到元素的xpath语句
      *** android端xptah常用属性定位:
          1. id ://*[contains(@resource-id,'com.android.settings:id/search')] 
          2. class ://*[contains(@class,'android.widget.ImageButton')]
          3. text ://*[contains(@text,'WLA')]
    
      *** 模糊定位 contains(@key,value): value可以是部分值
        业务场景:
            1.进入设置页面
            2.点击WLAN菜单栏
        代码实现:
            # xpath 点击WLAN按钮
            driver.find_element_by_xpath("//*[contains(@text,'WLA')]").click()

    定位一组元素,注意element -> elements

      应用场景为元素值重复,无法通过元素属性直接定位到某个元素,只能通过elements方式来选择,返回一个定位对象的列表.

    通过id方式定位一组元素

     方法: find_elements_by_id(id_value) # id_value:为元素的id属性值
        业务场景:
            1.进入设置页面
            2.点击WLAN菜单栏(id定位对象列表中第1个)
        代码实现:
            # 定位到一组元素
            title = driver.find_elements_by_id("com.android.settings:id/title")
            # 打印title类型,预期为list
            print(type(title))
            # 取title返回列表中的第一个定位对象,执行点击操作
            title[0].click()

    通过class方式定位一组元素

     方法:find_elements_by_class_name(class_value) # class_value:为元素的class属性值
        业务场景:
            1.进入设置页面
            2.点击WLAN菜单栏(class定位对象列表中第3个)
        代码实现:
            # 定位到一组元素
            title = driver.find_elements_by_class_name("android.widget.TextView")
            # 打印title类型,预期为list
            print(type(title))
            # 取title返回列表中的第一个定位对象,执行点击操作
            title[3].click()

    通过xpath方式定位一组元素

     方法:find_elements_by_xpath(xpath_value) # xpath_value:为可以定位到元素的xpath语句
        业务场景:
            1.进入设置页面
            2.点击WLAN菜单栏(xpath中class属性定位对象列表中第3个)
        代码实现:
            # 定位到一组元素
            title = driver.find_elements_by_xpath("//*[contains(@class,'widget.TextView')]")
            # 打印title类型,预期为list
            print(type(title))
            # 取title返回列表中的第一个定位对象,执行点击操作
            title[3].click()

    WebDriverWait 显示等待操作

        在一个超时时间范围内,每隔一段时间去搜索一次元素是否存在,
        如果存在返回定位对象,如果不存在直到超时时间到达,报超时异常错误。
        方法:WebDriverWait(driver, timeout, poll_frequency).until(method)
        参数:
            1.driver:手机驱动对象
            2.timeout:搜索超时时间
            3.poll_frequency:每次搜索间隔时间,默认时间为0.5s
            4.method:定位方法(匿名函数)
        匿名函数: 
            lambda x: x
        等价于python函数:
            def test(x):
                return x
        使用示例:
            WebDriverWait(driver, timeout, poll_frequency).until(lambda x: x.find_elements_by_id(id_value))
        解释:
            1.x传入值为:driver,所以才可以使用定位方法.
        函数运行过程:
            1.实例化WebDriverWait类,传入driver对象,之后driver对象被赋值给WebDriverWait的一个类变量:self._driver
            2.until为WebDriverWait类的方法,until传入method方法(即匿名函数),之后method方法会被传入self._driver
            3.搜索到元素后until返回定位对象,没有搜索到函数until返回超时异常错误.
        业务场景:
            1.进入设置页面
            2.通过ID定位方式点击搜索按钮
        代码实现:
            from selenium.webdriver.support.wait import WebDriverWait # 导入WebDriverWait类
            # 超时时间为30s,每隔1秒搜索一次元素是否存在,如果元素存在返回定位对象并退出
            search_button = WebDriverWait(driver, 30, 1).until(lambda x: x.find_elements_by_id(com.android.settings:id/search))
            search_button.click()
            driver.quit()
     
  • 相关阅读:
    day25:接口类和抽象类
    vue1
    How the weather influences your mood?
    机器学习实验方法与原理
    How human activities damage the environment
    Slow food
    Brief Introduction to Esports
    Massive open online course (MOOC)
    Online learning in higher education
    Tensorflow Dataset API
  • 原文地址:https://www.cnblogs.com/wangxudong01/p/14513859.html
Copyright © 2020-2023  润新知