本文节选自霍格沃兹《测试开发实战进阶》课程教学内容,进阶学习文末加群。
在 UI 自动化测试过程中,面对复杂的业务场景,经常会遇到这样的挑战:

  • 简单的录制/回放速度快,但无法适应复杂场景;
  • 编写自动化测试脚本比较灵活,但工作量大且可维护性差;
  • 以往的封装技术(PageObject)可以适应各种 UI 场景,但结构松散,无法在多项目中迁移;
    因此,测试团队通常还需要一种定制测试框架,用以弥补现有框架的缺点。

测试框架封装思想

由于 UI 自动化测试框架围绕 UI 界面使用,因此,依旧选用 PageObject 设计模式对 UI 及测试进行封装,同时配合 Pytest
单元测试将脚本能够有效的组织、连贯应用起来,从而提高框架的可维护性和可读性。

由于测试框架基于 PageObject 设计模式,主要方向为 PO 改进,数据驱动,异常处理等,比如:

  • 测试数据的数据驱动:将数据存储到外部 yaml 文件中,利用 yaml 工具进行数据读取;
  • 数据步骤的数据驱动:将操作步骤放到外部 yaml 文件中,利用 yaml 工具对操作步骤进行读取,用专门函数解析并实现操作步骤;
  • 自动化异常处理机制:对元素查找模块进行封装和改进,包括如何处理弹窗;

Page_Object 改造

作为通用的 UI 测试框架, PageObjet 不仅适用于 Web 自动化测试,也可适用 Appium 移动自动化测试,其优点如下:

  • 减少代码重复
  • 提高测试用例可读性
  • 提高测试用例可维护性

PO 改造实例(基于雪球 App)

本案例将对雪球 App 进行 Page Objetct 封装与改进。

当启动雪球 App 时,会进入首页。点击搜索框进入搜索页,搜索某支股票然后判断股价是否大于 200:

PageObjetct 的模块关系如下,所有的模块要继承 BasePage , App 实现启动,重启,停止等操作, Main
实现进入搜索页,进入股票页等操作:

base_page 模块是所有 page 类的父类,其中定义了公共方法,比如封装下面的 find 方法后,可以让子类调用 find :

        from appium.webdriver.webdriver import WebDriver  class BasePage:  _driver: WebDriver  def __init__(self, driver: WebDriver = None):  self._driver = driver  def find(self, locator, value: str = None):  #如果传进来的是tuple,只需使用一个参数:locator  if isinstance(locator, tuple):  return self._driver.find_element(*locator)  else:  return self._driver.find_element(locator, value)

App 模块封装 app 的启动,重启,停止等方法,当 app 启动时会进入 main 页面,因此在下面的 main 方法要 return Main
,Main 类的定义在后面会讲解:

        from appium import webdriver  from test_appium.page.base_page import BasePage  from test_appium.page.main import Main  class App(BasePage):  #指定app的包名和activity名  _package = "com.xueqiu.android"  _activity = ".view.WelcomeActivityAlias"  def start(self):  #如果driver为空则初始化  if self._driver is None:  caps = {}  caps["platformName"] = "android"  caps["deviceName"] = "hogwarts"  caps["appPackage"] = self._package  caps["appActivity"] = self._activity  caps["noReset"] = True  #初始化driver  self._driver = webdriver.Remote("http://localhost:4723/wd/hub", caps)  self._driver.implicitly_wait(30)  #如果driver不为空,则直接启动activity  else:  print(self._driver)  self._driver.start_activity(self._package, self._activity)  return self  def restart(self):  pass  def stop(self):  pass  def main(self) -> Main:  #当app启动时,跳转到(实例化)Main  return Main(self._driver)

Main 模块是首页的 PageObject ,其中的方法封装了首页的重要功能,比如下面代码中的 goto_search_page 封装了点击搜索并跳转到
Search 页:

        from appium.webdriver.common.mobileby import MobileBy  from selenium.webdriver.common.by import By  from test_appium.page.base_page import BasePage  from test_appium.page.profile import Profile  from test_appium.page.search import Search  class Main(BasePage):  #点击搜索按钮后,进入搜索页  def goto_search_page(self):  self.find(MobileBy.ID, "tv_search").click()  #进入搜索页  return Search(self._driver)  def goto_stocks(self):  pass  def goto_trade(self):  pass  def goto_messages(self):  pass

Search 模块可以搜索一支股票,还可以获取股票的价格,比如下图:

封装代码如下:

        from appium.webdriver.common.mobileby import MobileBy  from selenium.webdriver.remote.webdriver import WebDriver  class Search:  _driver: WebDriver  def __init__(self, driver):  self._driver = driver  #输入要搜索的内容  def search(self, key: str):  self._driver.find_element(MobileBy.ID, "search_input_text").send_keys(key)  self._driver.find_element(MobileBy.ID, "name").click()  return self  #获取股票价格,用于判断  def get_price(self, key: str) -> float:  return float(self._driver.find_element(MobileBy.ID, "current_price").text)

最后对上述代码建立测试,新建测试模块 test_search :

        import pytest  from test_appium.page.app import App  class TestSearch:  def setup(self):  self.main = App().start().main()  def test_search(self):  assert self.main.goto_search_page().search("alibaba").get_price("BABA") > 200

以上,供大家参考,欢迎一起留言探讨。


**相关文章

**

  • UI 自动化测试应不应该投入?有没有前途?怎样做最明智?
  • 实战 | UI 调度自动化测试平台(基于 Python)
  • Page Object 模式很火,UI 自动化测试到底要不要用?怎么用?
  • PageObject(PO)设计模式在 UI 自动化中的实践总结(以 QQ 邮箱登陆为例)

**
来霍格沃兹测试开发学社,学习更多软件测试与测试开发的进阶技术,知识点涵盖web自动化测试 app自动化测试、接口自动化测试、测试框架、性能测试、安全测试、持续集成/持续交付/DevOps,测试左移、测试右移、精准测试、测试平台开发、测试管理等内容,课程技术涵盖bash、pytest、junit、selenium、appium、postman、requests、httprunner、jmeter、jenkins、docker、k8s、elk、sonarqube、jacoco、jvm-sandbox等相关技术,全面提升测试开发工程师的技术实力
QQ交流群:484590337
公众号 TestingStudio
更多内容欢迎访问 https://ceshiren.com
测试人社区
视频资料领取:https://qrcode.testing-studio.com/f?from=CSDN&url=https://ceshiren.com/t/topic/15844
点击查看更多信息

实战 | UI 自动化测试框架设计与 PageObject 改造相关推荐

  1. Appium PO模式UI自动化测试框架——设计与实践

    阅读目录 1. 目的 2. 意义 3. 设计理念 4. PO模式 5. 框架设计 5.1 目录结构 5.2 实现步骤 5.3 具体实现 5.3.1 base部分 5.3.2 po部分 5.3.3 te ...

  2. python3.7界面设计_基于selenium+Python3.7+yaml+Robot Framework的UI自动化测试框架

    前端自动化测试框架 项目说明 本框架是一套基于selenium+Python3.7+yaml+Robot Framework而设计的数据驱动UI自动化测试框架,Robot Framework 作为执行 ...

  3. python接口自动化测试框架实战从设计到开发_【B0753】[java视频教程]Python接口自动化测试框架设计到开发完整版视频教程 it教程...

    Java视频教程名称:Python接口自动化测试框架设计到开发完整版视频教程   java自学网[javazx.com]  Python视频教程   it教程 Java自学网收集整理 java论坛&q ...

  4. unity之游戏UI界面框架设计实战学习(一)

    游戏UI界面框架设计实战精讲视频课程 配合上博客 刘老师讲Unity 刚开始接触UI界面. 觉得讲得非常好. 做一下笔记. 课程总体分为七大部分: 一: UI框架设计理念 整体简单介绍即将带领大家开发 ...

  5. 一套完整的Selenium自动化测试框架设计实战,这次38K, 妥了

    金九银十,大家都铆足干劲想抓住机会涨薪进大厂.结合这几年的行业趋势,想要挑战大厂面试,首先必须吃透Selenium自动化测试框架设计. 这里说一下原因: 首先,一线互联网大厂无一例外,全都要求测试人掌 ...

  6. 《精通自动化测试框架设计》—第2章 2.3节测试数据交互基本方法

    本节书摘来自异步社区<精通自动化测试框架设计>一书中的第2章,第2.3节测试数据交互基本方法,作者陈冬严 , 邵杰明 , 王东刚 , 蒋涛,更多章节内容可以访问云栖社区"异步社区 ...

  7. 《精通自动化测试框架设计》目录—导读

    作者简介 精通自动化测试框架设计 陈冬严,浙江大学硕士,具有10年软件测试和团队管理的工作经验,先后服务于ITSM.PLM软件研发企业,现就职于某金融行业核心机构IT规划部门.业余时间喜欢园艺. 邵杰 ...

  8. 整装待发 QTA UI自动化测试框架迎来大更新

    2019独角兽企业重金招聘Python工程师标准>>> 整装待发 QTA UI自动化测试框架迎来大更新 QTA是什么 QTA是一个跨平台的测试自动化工具,适用于后台.原生或混合型客户 ...

  9. python接口自动化测试框架pdf,Python接口自动化测试框架设计到开发完整版2019

    1:课程详细介绍.mp4 ; k& X* V: X! X% \; ]; u- V$ z7 L) h: C; h2:课程答疑.mp4+ J  K* q0 O  x + j( v2 n7 B7 s ...

最新文章

  1. flexbox 伸缩布局
  2. edittext实现自动查询,刷新listview
  3. 开源 非开源_开源突破“舒适区”
  4. python中堆排序_Python实现堆排序的方法详解
  5. Java常见的垃圾收集器GC算法整理
  6. 2.从Paxos到Zookeeper分布式一致性原理与实践---一致性协议
  7. 不讲武德,Java分布式面试题集合含答案!
  8. 从零开始搭建物联网平台(三)数模设计
  9. 软文诊断50期: 百度账号有什么推广功能?能编辑软文吗?
  10. 恶意代码防范技术原理-计算机病毒和特洛伊木马分析与防护
  11. PTA 顺序结构 7-3 计算代数表达式
  12. OSChina 周三乱弹 ——你是有多寂寞啊,看光头强都……
  13. python 表格处理项目该如何分工_python 处理 Excel 表格
  14. 删除IE加载项及取消加载项的提示
  15. 《高性能iOS 应用开发》之降低你 APP 的电量消耗
  16. 80核处理器_最受欢迎的处理器 酷睿i5-9400F果然霸榜了
  17. Ultraiso制作Centos7 优盘Udisk 启动镜像
  18. 如何使用Tableau进行预测分析
  19. 纳米软件分享:电子测量行业仪器必备测试软件合集分享
  20. SMI-S 统一SAN管理

热门文章

  1. http://jingyan.baidu.com/article/0eb457e5208cbb03f0a9054c.html
  2. 富文本编辑器 Kindeditor 的使用和 常见错误
  3. sql语句(基础篇)
  4. Java的编程之旅——idea上新建文件
  5. 数学建模篇---2022国赛C题(一)
  6. 3.1 该如何编写程序界面
  7. children和childNodes 的区别
  8. 夯实基础 js数据类型
  9. mysql oracle创建视图索引吗_Oracle视图,索引,序列
  10. python 线程thread详解