• Appium自动化(10)


    如果你还想从头学起Appium,可以看看这个系列的文章哦!

    https://www.cnblogs.com/poloyy/category/1693896.html

    前言

    前面介绍过根据id,classname, accessibilityid,xpath来定位元素,其他这些方法底层都是利用了 UI Automator 的 API 功能实现的

    UI Automator 介绍

    • UI Automator 测试框架提供了一组 API 来构建 UI 测试,用于在用户应用和系统应用中执行交互
    • 利用 UI Automator API,可以打开“设置”菜单或应用启动器等操作
    • UI Automator 测试框架非常适合编写黑盒自动化测试,其中的测试代码不依赖于目标应用的内部
     

    UI Automator 提供的功能

    • 自带的元素定位工具
    • 在设备上检索状态信息并执行操作的API
    • 支持跨应用 UI 测试的API

    UI Automator 访问设备状态

    UI Automator 测试框架提供了一个  UiDevice 类,用于在 app 运行的设备上进行访问和执行等操作,它提供了以下操作

    • 更改设备旋转
    • 按D-pad按钮
    • 按返回、主屏幕、菜单按钮
    • 打开通知栏
    • 对当前窗口进行屏幕截图

    更多的 UI Automator API

    利用 UI Automator API,可以编写稳健可靠的测试,而无需了解目标应用的实现详情

    下面将列出常见的类,它们都是在 android.support.test.uiautomator 这个库下的

    类名 作用
    UiDevice 设备封装类 上面说到的,获取设备信息和设备交互
    UiObject 所有空间抽象类 表示设备上可见的一个Android控件
    UiSelector 控制选择器 在设备上查询一个或多个目标 UI 元素
    Configurator 配置基类 设置运行 UI Automator 测试所需的关键参数
    UiScrollable 滚动控件 当目标控件存在于屏幕之外时使用
    UiCollection 控件集合 控件遍历,枚举容器的 UI 元素以便计算子元素个数

    划重点

    难点

    • 使用 UI Automator API,需要写Java 代码哦!
    • 当然如果没有基础的话,记住对应的语法格式就行

    UiSelector  的栗子

    Java语法

     new UiSelector().resourceId(“io.manong.developerdaily:id/tv_tab_title”) 

    结合Appium 的用法

    driver.find_element_by_android_uiautomator('new UiSelector().resourceId("com.hpbr.bosszhipin:id/tv_tab_label")') 

    还是结合boss直聘 app 做例子哦

    环境要求:Android

    代码

    # 此处省略配置代码...
    # 通过resourceId
    test = driver.find_element_by_android_uiautomator('new UiSelector().resourceId("com.hpbr.bosszhipin:id/tv_tab_label")')
    print(test.text)
    
    # 通过text
    test = driver.find_element_by_android_uiautomator('new UiSelector().text("附近")')
    print(test.text)
    
    # 通过className
    test = driver.find_element_by_android_uiautomator('new UiSelector().className("android.widget.TextView")')
    print(test.text)

    输出结果

    推荐
    附近
    自动化测试

    UiSelector 还可以通过哪些方法来定位元素

    基本上除了xpath之外,可以通过appium实现的元素定位方式,UIAutomator也有,因为底层就是靠他实现的

    xpath 虽然没有直接对应的方法,但是像下面这种 xpath 写法,UIAutomator 也有对应的方法

    • // :表示任意后代关系
    • x[n] : 表示第几个子节点

    小栗子

    # 正常appium写法
    
    test = driver.find_elements_by_id("com.hpbr.bosszhipin:id/tv_tab_label")[1]
    
    # 结合uiautomator写法
    
    test = driver.find_element_by_android_uiautomator('new UiSelector().resourceId("com.hpbr.bosszhipin:id/tv_tab_label").enabled(true).instance(1)')

    emmm...两种写法得到的结果是一样的,但第二种写法有点复杂就是了...太长了

    UI Automator 的总结

    •  Appium 封装的方法无法满足你的需求的时候可以尝试用 UI Automator API 去解决问题
    • 不建议,在日常工作中全都用 UI Automator API,学习成本 & 编写成本 & 维护成本都会高很多(当然,你想装逼也不是不可以)
  • 相关阅读:
    win8.1系统出现C0000034正在应用更新操作怎么办
    《FPGA全程进阶---实战演练》第三十二章 Signal Tap II 应用实例
    Altium Designer学习---如何进行SI仿真
    硬件工程师笔试常见问题
    求职经验贴-描述笔者当时找工作情形
    Altium designer软件如何设计原理图库封装图库以及交互式布局
    modelsim如何使用tcl脚本来写编译文件
    代码自动部署
    Nginx 限流配置
    使用Golang 封装一个Api 框架 ----- 数据库操作篇(gorm引入)
  • 原文地址:https://www.cnblogs.com/poloyy/p/12923504.html
Copyright © 2020-2023  润新知