本文为霍格沃兹测试开发学社学员学习笔记分享
特殊控件 Toast
Toast 是什么
-
一种消息框类型
-
永远不会获得焦点
- 无法被点击
-
Toast显示的时间有限,Toast会根据用户设置的显示时间后自动消失
-
是系统级别的控件,属于系统settings
-
Toast类的思想:
- 就是尽可能不引人注意,同时还向用户显示信息,希望他们看到
Toast 定位
- appium 用的是uiautomator底层来抓取toast,
- 再把toast放到控件树内,但是它本身不属于空间
- 使用的是uiautomator2
xpath
可以找到//*[@class="android.widget.Toast"]//*[contains(@text,"xxx")]
xxx:toast的文本内容
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(50));
driver.findElement(AppiumBy.xpath("//*[@class="android.widget.Toast"]"));
App 弹窗异常处理
黑名单处理
- 运行过程中不定时弹框(广告弹窗,升级提示框,新消息提示框等等)
- 弹框不是 BUG(UI 界面提示,警告的作用)
def find(self, by, locator):
try:
return self.driver.find_element(by, locator)
except Exception as e:
for black in black_list:
eles = self.driver.find_elements(*black)
if len(eles) > 0:
eles[0].click()
return find(by, locator)
raise e
装饰器优势
- 对原有函数的功能增强
- 不改变原有函数的逻辑
- 使代码更简洁、易维护
# 装饰器逻辑
def ui_exception_record(func):
def run(*args, **kwargs):
self = args[0]
try:
return func(*args, **kwargs)
except Exception as e:
# 这里添加所有的异常情况处理
# 日志
logger.warning("执行过程中发生异常")
# 截图
timestamp = int(time.time())
image_path = f"./images/image_{timestamp}.PNG"
page_source_path = \
f"./page_source/{timestamp}_page_source.html"
# page_source
with open(f"./page_source/{timestamp}_page_source.html",\
"w", encoding="u8") as f:
f.write(self.driver.page_source)
self.driver.save_screenshot(image_path)
allure.attach.file(image_path, name="image",\
attachment_type=allure.attachment_type.PNG)
allure.attach.file(page_source_path, \
name="page_source", \
attachment_type=allure.attachment_type.TEXT)
raise e
return run
自动化测试架构优化
打造测试框架的需求与价值
- 领域模型适配:封装业务实现,实现业务管理
- 提高效率:降低用例维护成本,提高执行效率
- 增强功能:解决已有框架不满足的情况
自动化框架应具备的功能
- 支持管理用例,运行用例
- 支持查找元素/定位元素,对元素/页面 进行各种操作(点击,滑动,输入等等)
- 支持生成测试报告
- 能够实现功能的复用,(比如登录,搜索等)
- 当页面有异常弹框的时候,可以进行有效的处理
- 当用例失败,需要添加失败时的日志,截图,等信息,放在测试报告中
- 多设备并发
- 支持平台化
为什么要封装架构
- 复用
- 平台化
增强功能
- 需求与价值
- 项目结构优化
- 框架封装
参数化与数据驱动
-
支持支持测试用例 / 步骤层级的参数化驱动配置
-
配置方式包括三个部分
- 参数定义(指定名字)
- 数据源指定(指定 yaml 文件 /或者其它格式文件)
- 数据源准备(无论是从线上环境 捞的数据,还是自己创建的测试数据)
总结
- 自动化测试框架应具备的功能
- 自动化测试框架优化(在 PO 的基础上,添加异常处理,日志,报告 ,截图,参数化与数据驱动等)逐步的将框架完善