• 软件测试 app自动化02 Appium常用的元素定位工具 元素的属性 元素定位方法


    1 Appium常用的元素定位工具

    1.1 uiautomatorviewer

    在这里插入图片描述

    点击,下图图标,即可连接模拟器,如下图所示:
    在这里插入图片描述

    点击,下图图标,即可同步模拟器操作,如下图所示:
    在这里插入图片描述
    此时,可以通过元素的resource-id属性来定位该元素。

    若出现报错,则执行下面操作:
    进入任务管理器,停止adb.exe,然后在dos界面输入adb connect 127.0.0.1:62001,再输入adb devices后,再点击uiautomatorview.bat文件去运行。

    1.2 Appium Inspector

    Appium server工具自带的定位工具
    Appium server需要下载Appium Inspector程序,下载地址如下:

    https://github.com/appium/appium-inspector/releases
    
    • 1

    下载程序,如下图所示:
    在这里插入图片描述
    安装成功如下图的图标:
    在这里插入图片描述
    双击使用Appium Inspector,Remote Path 填写/wd/hub,并且还是相关的参数,如下图所示:
    在这里插入图片描述
    点击【start session】按钮,成功进入页面,如下图所示:
    在这里插入图片描述

    1.3 Weditor

    Uiautomator2 Python第三方库 appUI自动化测试框架
    在dos命令窗口输入3条命令:

    pip install Uiautomator2
    
    • 1
    python -m Uiautomator2 init
    
    • 1
    pip install weditor
    
    • 1

    确认工具是否安装成功,输入命令 weditor --help

    Weditor工具的使用
    (1)启动weditor工具
    (2)选择操作系统,填写设备名称,点击连接
    (3)开的定位元素,获取元素信息
    (4)在dos窗口使用快捷键ctrl+c,退出weditor

    2 元素的属性

    (1)resourceid属性
    (2)class/classname 元素标签名属性
    (3)text 文本内容
    (4)description或content-desc属性
    (5)xpath属性
    (6)appPackage属性
    (7)appActivity属性

    3 元素定位方法

    (1)取出resourceid属性值使用find_element(By.id,xxx)或find_element(MobileBy.ID,xxx)来定位元素。
    例子如下:

    from appium.webdriver.common.mobileby import MobileBy
    from appium import webdriver
    desired_caps = {
        'automationName':'UiAutomator2',
        'platformName':'Android',# 指定操作系统
        'platformVersion':'7.1.2', # 指定系统版本
        'deviceName':'127.0.0.1:62001', # 指定设备名称
        'appPackage':'com.tal.kaoyan', # 被操作的应用程序包名
        'appActivity':'com.tal.kaoyan.ui.activity.SplashActivity', # 启动页面
        'noReset':'true' #true 不重置 flase 重置
    }
    #发送指令给appium server
    driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_caps)
    #拿出id属性值,使用MobileBy.ID方法定位
    username_el = driver.find_element(MobileBy.ID,"com.tal.kaoyan:id/login_email_edittext")
    username_el.send_keys("2121211212")
    time.sleep(2)
    username_el.clear()
    time.sleep(2)
    #拿出id属性值,使用By.ID方法定位
    username_el_2 = driver.find_element(By.ID,"com.tal.kaoyan:id/login_email_edittext")
    username_el_2.send_keys("2121211212")
    time.sleep(2)
    username_el_2.clear()
    time.sleep(2)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    分析上述代码:
    MobileBy.ID取出id属性值,定位用户框。此外还可以使用By.ID取出id属性值,定位用户框。

    (2)取出text属性值使用MobileBy.ANDROID_UIAUTOMATOR,这种定位方式利用系统自带框架(Uiautomator1/Uiautomator2)实现元素定位,基于java代码编写,通过这些框架实现元素定位,实质就是调用这些框架里面的方法(UiSelector类实现元素定位)。
    例子如下:

    # 拿出text属性值使用MobileBy.ANDROID_UIAUTOMATOR
    username_el_3 = driver.find_element(MobileBy.ANDROID_UIAUTOMATOR,'new UiSelector().text("请输入用户名")')
    username_el_3.send_keys("123")
    time.sleep(2)
    username_el_3.clear()
    time.sleep(2)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    分析上述代码:
    UiSelector类里面的方法,如果参数是字符串类型,必须是双引号 例如:text(“请输入用户名”)
    使用UiSelector类需要实例化
    此外还可以多个属性组合定位 new UiSelector().方法1().方法2().方法3(),如下代码:

    username_el_4 = driver.find_element(MobileBy.ANDROID_UIAUTOMATOR,'new UiSelector().className("android.widget.EditText").resourceId("com.tal.kaoyan:id/login_email_edittext")')
    username_el_4.send_keys("123123")
    time.sleep(2)
    username_el_4.clear()
    time.sleep(2)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    (3)取出description/content-desc属性值定位
    例子,使用description/content-desc属性值定位QQ应用程序的账号文本框,代码如下:

    import time
    from appium import webdriver
    from appium.webdriver.common.mobileby import MobileBy
    # 设置操控终端的配置参数
    desired_caps = {
        'automationName':'UiAutomator2',
        'platformName':'Android',# 指定操作系统
        'platformVersion':'7.1.2', # 指定系统版本
        'deviceName':'127.0.0.1:62001', # 指定设备名称
        'appPackage':'com.tencent.mobileqq', # 被操作的应用程序包名
        'appActivity':'com.tencent.mobileqq.activity.SplashActivity', # 启动页面
        'noReset':'true' #true 不重置 ;flase 重置
    }
    # 发送指令给appium server
    driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_caps)
    # 定位登录按钮
    login_button = driver.find_element(MobileBy.ID,'com.tencent.mobileqq:id/btn_login')
    # 点击登录按钮
    login_button.click()
    time.sleep(2)
    
    # 取出description/content-desc属性值定位
    ele1 = driver.find_element(MobileBy.ACCESSIBILITY_ID,"请输入QQ号码或手机或邮箱")
    ele1.send_keys("123")
    time.sleep(2)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    分析上述代码:
    首先获取QQ应用程序的包名和启动页面,然后使用MobileBy.ID定位【登录】按钮,最后使用MobileBy.ACCESSIBILITY_ID定位用户名文本框。

    (4)选择xpath定位
    例子,使用xpath定位定位考研帮app用户名文本框,代码如下:

    import time
    
    from appium import webdriver
    from appium.webdriver.common.mobileby import MobileBy
    
    # 设置操控终端的配置参数
    desired_caps = {
        'automationName':'UiAutomator2',
        'platformName':'Android',# 指定操作系统
        'platformVersion':'7.1.2', # 指定系统版本
        'deviceName':'127.0.0.1:62001', # 指定设备名称
        'appPackage':'com.tal.kaoyan', # 被操作的应用程序包名
        'appActivity':'com.tal.kaoyan.ui.activity.SplashActivity', # 启动页面
        'noReset':'true' #true 不重置 ;flase 重置
    }
    # 发送指令给appium server
    driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_caps)
    # 定位用户名文本框
    username_ele= driver.find_element(MobileBy.XPATH,'/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.ScrollView/android.widget.LinearLayout/android.widget.EditText[1]')
    username_ele.send_keys("123")
    time.sleep(2)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    分析上述代码:
    通过appium spector工具定位用户名文本框,找到对应的xpath值,如下图所示:
    在这里插入图片描述

    小结

    1 Appium常用的元素定位工具有三个,Android sdk\tools目录下的uiautomatorviewer.bat、appium Inspactor和Weditor。
    2 根据id属性值、xpath值、text 文本内容、description或content-desc值来定位
    3 在find_element()方法选择MobileBy.ID、By.ID、MobileBy.XPATH、MobileBy.ANDROID_UIAUTOMATOR、MobileBy.ACCESSIBILITY_ID作为参数。

  • 相关阅读:
    LeetCode48旋转图像
    算法设计与分析-8593 最大覆盖问题
    SpringBoot整合ActiveMQ
    mysql日志持久化机制
    普中51单片机学习(六)
    盘点阿里、腾讯、百度大厂C#开源项目
    使用ngrok内网穿透后,调用相关接口报ERR_NGROK_6024 异常
    UE 实现鼠标点选模型
    STM32——DHT11温湿度传感器
    【java刷算法】牛客—剑指offer3栈、数组、递归、二分法的初步练习
  • 原文地址:https://blog.csdn.net/qq_45059457/article/details/126878250