霍格沃兹测试开发学社 ceshiren.com

Appium 自动化测试实战 2

目录

  • 元素定位技巧
  • 企业微信实战(PO 封装)
  • 框架改进方案

元素定位技巧

App 元素定位

  • 测试步骤三要素
    • 定位、交互、断言
  • 定位
    • id 定位(优先级最高)
    • XPath 定位(速度慢,定位灵活)
    • Accessibility ID 定位(content-desc)
    • Uiautomator 定位(仅 Android 速度快,语法复杂)
    • predicate 定位(仅 iOS )

XPath 定位

xpath w3c

https://www.w3.org/TR/xpath-functions/


xpath表达式常用用法:

1、逻辑运算符 (not、and 、or等)

2、表达式 (contains、ends_with、starts_with等)

XPath 定位

绝对定位: 不推荐

相对定位:

//*

//*[contains(@resource-id, ‘login’)](重点)

//*[@text=‘登录’] (重点)

//*[contains(@resource-id, ‘login’) and contains(@text, ‘登录’)] (重点)

//*[contains(@text, ‘登录’) or contains(@class, ‘EditText’)](了解)

//*[ends-with(@text,'号') ] | //*[starts-with(@text,'姓名') ] 两个定位的集合列表(了解)

//*[@clickable=“true"]//android.widget.TextView[string-length(@text)>0 and string-length(@text)<20](了解)

//*[contains(@text, ‘看点')]/ancestor::*//*[contains(@class, ‘EditText’)] (轴)(了解)

原生定位

Android 原生定位-Uiautomator

官网:https://developer.android.com/reference/android/support/test/uiautomator/UiSelector.html

写法: ’new UiSelector().text(“text")'

iOS 原生定位-PredicateString

例如:name == ‘测试’

Toast 定位

appium使用uiautomator底层的机制来分析抓取toast,并且把toast放到控件树里面,但本身并不属于控件。


automationName:uiautomator2

使用xpath查找

//*[@class='android.widget.Toast']

//*[contains(@text, "xxxxx")]

企业微信实战

企业微信实战

  • 企业微信 添加联系人 练习
  • 企业微信 添加多个联系人 练习

传统测试用例的问题

  • 无法适应 UI 变化,UI 变化会导致大量的 case 需要修改
  • 大量的样板代码 driver find click
  • 无法清晰表达业务用例场景

Page Object 模式六大原则

  • 方法意义
    • 用公共方法代表UI所提供的服务
    • 方法应该返回其他的PageObject或者返回用于断言的数据
    • 同样的行为不同的结果可以建模为不同的方法
    • 不要在方法内加断言
  • 字段意义
    • 不要暴露页面内部的元素给外部
    • 不需要建模UI内的所有元素

实战练习思路


@startmindmap
* HowToDo
** 梳理测试用例
** 构造PO模型
*** 构造页面相关类和方法
*** 实现暂时实际为空
** 编写测试用例
*** 根据业务逻辑编写
*** 链式调用
** 填充具体实现
** 优化用例
*** 封装样板代码
*** 提取页面元素
@endmindmap

PO 模式主要组成元素

PO 模式 企业微信实战

  • 演练 App:企业微信 app
  • 演练语言:Python

测试框架改进

测试框架改进

  • 抽离 app 操作
  • BasePage 的封装
  • 初始化方法
  • find 方法
  • find_and_click 方法

加入日志

  • 使用标准 log 取代 print
  • logging.baseConfig(level=logging.DEBUG)
  • 在具体的 action 中加入 log 方便追踪

课后作业

  • 实现添加联系人功能的 PO 封装
  • 实现删除联系人功能的 PO 封装