APP自动化之Poco框架

今天给大家介绍一款自动化测试框架Poco,其脚本写法非常简洁、高效,其元素定位器效率更快,其本质基于python的第三方库,调试起来也会非常方便,能够很好的提升自动化测试效率,节省时间。

(一)背景

1. Poco介绍

Poco是一款跨平台的自动化测试框架,基于UI控件识别原理,适用于Android、iOS原生和各种主流的游戏引擎应用,由于Airtest是基于图像识别原理,所以Poco+Airtest结合使用更适合混合应用。尤其是针对flutter app部分元素控件无法识别情况,采用airtest框架,针对元素控件的部分,采用Poco框架进行自动化测试。

2. Poco本质

Poco和Airtest框架一样,Poco实际上也是Python的一个第三方库,如果需要本地编写Poco脚本,需要先安装Pocoui库即可

pip install pocoui

3. 官方文档

https://airtest.doc.io.netease.com/IDEdocs/poco_framework/1_poco_info/

(二)使用Poco框架

1. 查看控件元素

在AirtestIDE连接待测设备后,然后在Poco辅助窗口选择对应的设备进行查看

图片

备注:选择模式时,脚本编辑窗口顶部会让我们选择是否插入对应的初始化代码,我们选择Yes即可

2. 查看控件的方式

第一种:冻结模式

进入模式:点击下图冻结按钮

说明:单击下图箭头区域,则会进入冻结模式查看元素控件,光标移至右侧的元素位置,并点击相应元素控件,则自动会定位到页面层级,log窗口可以查看当前层面的元素属性。即使实际连接的被测设备已经离开当前页面,冻结模式也不会受影响,相当于一直冻结在这个页面,便于查看元素

退出方式:再次点击冻结按钮

图片

第二种:检视模式

进入模式:点击下图检视按钮

说明:单击下图箭头区域,则会进入检视模式查看元素控件,与刚才的冻结模式最大的区别是,此时查看控件,如我们对控件进行操作,设备画面也会跟着变化

退出方式:再次点击检视按钮

图片

3. 定位元素的方式

基本定位器

由于AirtestIDE内置Poco,直接导入即可使用,基本定位器就是poco(节点名或节点属性)

 
  1. # -*- encoding=utf8 -*-

  2. __author__ = "86150"

  3. from poco.drivers.android.uiautomation import AndroidUiautomationPoco

  4. poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False)

  5. # 单个条件

  6. poco(text="中古屋")

  7. # 多个条件

  8. poco('com.addcn.android.house591:id/grid_item_text',text="中古屋")

图片

相对选择器

就是通过元素之间的层级关系进行选择,例如父子关系、兄弟关系、祖先后代关系等等,Poco控件给我们提供了利用树的层级关系来定位的各种方法:

  • 子节点:child
  • 所有子节点:children
  • 子孙节点:offspring
  • 父节点:parent
  • 兄弟节点:sibling
 
  1. poco("plays").child("playBasic").offspring("star_single")

说明:这种方式较为繁琐,一般是通过属性和节点无法定位的时候,可以选择使用这种方式

正则表达式

正则表达式匹配时一种少见的方式,但也是非常好用的方式,按照下图通过属性定位的方式为:

 
  1. # 1.text属性方式定位

  2. poco(text="中古屋")

  3. # 换成正则表达式定位

  4. poco(textMatches="正则表达式")

  5. poco(textMatches=".*中古屋")

  6. # 2.name属性方式定位

  7. poco(name='com.addcn.android.house591:id/grid_item_text')

  8. # 换成正则表达式定位

  9. poco(nameMatches="正则表达式")

  10. poco(nameMatches=".*grid_item_text")

说明:只要能够用 poco(xx=预期属性值) 来选择的控件,就可以用 poco(xxMatches=预期属性值的正则表达式) 来进行匹配定位,官方推荐优先使用属性或正则表达式定位,会更加简介高效

4. 操作元素的方式

点击

 
  1. # 单击元素

  2. poco(text="中古屋").click()

  3. # 长按元素

  4. poco(text="中古屋").long_click()

滑动

Poco支持对控件进行滑动操作,我们需要先定位到这个控件,然后指定它按照某个方向滑动即可

 
  1. # 向下滑动0.2个单位距离

  2. poco("com.addcn.android.house591:id/grid_item_text").swipe([0,0.2])

  3. # 向上滑动0.2个单位距离

  4. poco("com.addcn.android.house591:id/grid_item_text").swipe([0,-0.2])

  5. # 向下滑动0.1个单位距离

  6. poco("com.addcn.android.house591:id/grid_item_text").swipe("down")

  7. # 向上滑动0.1个单位距离

  8. poco("Handle").swipe("up")

获取元素的属性值

在IDE的poco辅助窗检索出来的控件属性,基本上都可以通过 attr 接口读取出来

  1. print("name:"+poco(text="中古屋").attr("name"))

  2. print("type:"+poco(text="中古屋").attr("type"))

  3. print("texture:"+poco(text="中古屋").attr("text"))

  4. print("texture:"+poco(text="中古屋").attr("texture"))

  5. # log日志输出

  6. name:com.addcn.android.house591:id/grid_item_text

  7. type:android.widget.TextView

  8. texture:中古屋

  9. [Finished]

设置元素的属性值

通常情况需要给定位的元素输入文本内容,可以使用set_text()方法或setatrr()方法

 
  1. from airtest.core.api import *

  2. auto_setup(__file__)

  3. from poco.drivers.android.uiautomation import AndroidUiautomationPoco

  4. poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False)

  5. # 先激活输入光标

  6. poco("com.addcn.android.house591:id/et_edittext").click()

  7. # 再执行输入动作

  8. poco("com.addcn.android.house591:id/et_edittext").set_text("123")

  9. poco("com.addcn.android.house591:id/et_edittext").setattr('text',"456")

Poco脚本相较于Appium脚本更加简洁、高效,使用起来更加方便,尤其是针对混合应用、Flutter APP 等应用能够结合Airtest框架一起使用,能够很好解决部分元素控件无法定位的问题。目前来说,我觉得是挺好用,下期可以出一篇两个测试框架结合的应用~

 

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

 

          视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

  • 24
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
app自动化测试框架是一种用于测试移动应用程序的工具或框架,它可以帮助开发人员自动执行各种测试任务,提高测试效率和准确性。 一个常用的app自动化测试框架Appium,它基于Selenium,可以用于测试iOS和Android应用程序。与webUI自动化类似,Appium也使用一些基础知识,如元素定位和驱动设置,但是它还需要一些特定于移动应用程序的知识,如appium的使用和移动端元素定位。 在编写app自动化测试脚本时,常见的一些功能包括业务功能封装、测试用例封装、测试包管理、截图处理、断言处理、日志获取、测试报告生成和测试驱动等。这些功能可以帮助开发人员更方便地编写和执行测试任务,并提供了更好的测试结果和分析。 在具体的测试执行过程中,通常会有一个执行入口(如run)来收集和执行测试用例。测试用例可以根据需要进行封装,可以继承一些基础类(如StartEnd)来进行初始化和配置,包括设置驱动、登录、关闭等操作。执行过程中会根据测试用例的顺序执行各个测试步骤,并生成测试报告。此外,还可以在测试过程中使用baseView来获取元素和执行一些基本操作。 需要注意的是,测试过程中的setup和teardown操作可能会导致在每个测试方法前后都初始化一次driver,这可能会导致每次测试前后都需要关闭和启动应用程序,从而增加了测试的时间消耗。因此,在编写测试用例时需要注意这个问题,可以根据实际需求进行优化。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值