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(节点名或节点属性)

# -*- encoding=utf8 -*-
__author__ = "86150"
from poco.drivers.android.uiautomation import AndroidUiautomationPoco
poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False)# 单个条件
poco(text="中古屋")# 多个条件
poco('com.addcn.android.house591:id/grid_item_text',text="中古屋")

图片

相对选择器

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

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

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

正则表达式

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

# 1.text属性方式定位
poco(text="中古屋")
# 换成正则表达式定位
poco(textMatches="正则表达式")
poco(textMatches=".*中古屋")# 2.name属性方式定位
poco(name='com.addcn.android.house591:id/grid_item_text')
# 换成正则表达式定位
poco(nameMatches="正则表达式")
poco(nameMatches=".*grid_item_text")

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

4. 操作元素的方式

点击

# 单击元素poco(text="中古屋").click()# 长按元素poco(text="中古屋").long_click()

滑动

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

# 向下滑动0.2个单位距离
poco("com.addcn.android.house591:id/grid_item_text").swipe([0,0.2])# 向上滑动0.2个单位距离
poco("com.addcn.android.house591:id/grid_item_text").swipe([0,-0.2])# 向下滑动0.1个单位距离
poco("com.addcn.android.house591:id/grid_item_text").swipe("down")# 向上滑动0.1个单位距离
poco("Handle").swipe("up")

获取元素的属性值

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

图片

print("name:"+poco(text="中古屋").attr("name"))
print("type:"+poco(text="中古屋").attr("type"))
print("texture:"+poco(text="中古屋").attr("text"))
print("texture:"+poco(text="中古屋").attr("texture"))# log日志输出
name:com.addcn.android.house591:id/grid_item_text
type:android.widget.TextView
texture:中古屋
[Finished]

设置元素的属性值

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

from airtest.core.api import *
auto_setup(__file__)
from poco.drivers.android.uiautomation import AndroidUiautomationPoco
poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False)# 先激活输入光标
poco("com.addcn.android.house591:id/et_edittext").click()# 再执行输入动作
poco("com.addcn.android.house591:id/et_edittext").set_text("123")poco("com.addcn.android.house591:id/et_edittext").setattr('text',"456")

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

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你! 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/159850.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何实现数据通过表格批量导入数据库

文章目录 1. 准备工作2. 创建数据库表3. 编写导入脚本4. 优化和拓展4.1 批量插入的优势4.2 错误处理4.3 数据验证4.4 数据转换 5. 总结 🎉如何实现数据通过表格批量导入数据库 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒🍹✨博客主页:IT陈寒的博客&…

初学者必读书籍——两个月速成Python

想学Python的你是不是一直被它生涩难懂的劝退?作为一个自学入门的程序员,依靠这样几本书,两个月就学会了python。不卖关子,我学的就是”python编程三剑客“系列。那么接下来就让我给你介绍介绍吧。 1.《Python编程:从入…

OSG文字-osgText3D(5)

osgText3D 三维立体文字比二维平面文字显示效果更好,相对二维平面文字,它有非常好的立体显示效果。 在实际虚拟现实项目中,过多使用三维立体文字会降低染效率,加重渲染负担,相对平面二维文字,它占用的内存是…

掌握Katalon Studio 导入 swagger 接口文档,接口测试效率提升100%

katalon studio大家都已经不陌生了,是一款现在非常主流的自动化测试工具,包括了web、api、APP,甚至PC应用程序都可以使用它来完成自动化测试。 swagger是一款RESTFUL接口的文档在线自动生成软件,swagger是一个规范和完整的框架&a…

Python通过selenium调用IE11浏览器报错解决方法

前提 正常安装Python 工具,selenium 包可以正常导入。IE浏览器驱动 IEDriverServer.exe 已经正确放置到已经添加path目录的文件下。 报错现象: 解决方法 打开浏览器进入 internet 选项 切换到安全页签 ,去除“应用保护模式” 再次调用验证…

C语言——I /深入理解指针(一)

一、内存和地址 1byte(字节) 8bit(比特位) 1KB 1024byte 1MB 1024KB 1GB 1024MB 1TB 1024GB 1PB 1024TB一个比特位可以存放二进制的0/1的一位 ⽣活中我们把⻔牌号也叫地址,在计算机中我们把内存单元的编号也称为…

真菌基因组研究高分策略(一):比较基因组揭示真菌菌丝和多细胞的起源

真菌是陆地和水生生态系统的重要组分,在有机质循环和跨营养级养分流通等过程中发挥着重要作用。随着测序技术的发展,高通量测序揭示了真菌群落巨大的系统发育和功能多样性,高质量真菌基因组的组装已经成为研究菌丝和潜在基因的进化起源的有力…

【c++】——类和对象(下) 万字解答疑惑

作者:chlorine 专栏:c专栏 目录 🚩再谈构造函数 🎓构造函数体赋值 🎓初始化列表 🚩explicit关键字 🚩static成员 🎓概念 面试题:计算创建多少个类对象 🎓特性 【问题】(非)…

智能合约安全漏洞与解决方案

// SPDX-License-Identifier: MIT pragma solidity ^0.7.0;import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/release-v3.3/contracts/math/SafeMath.sol";/*智能合约安全在智能合约中安全问题是一个头等大事,因为智能合约不像其他语…

RH850 G3KH异常处理简述

目录 1.概述 2.异常处理后现场恢复 3.异常处理地址识别 4.小结 1.概述 我们首先来看,G3KH的关键寄存器,PSW PSW--Program status word PSW寄存器里有表征程序状态的flag,CPU操作状态的flag。如下 UM---是否是user mode;0--…

【JavaEE】Spring更简单的存储和获取对象(类注解、方法注解、属性注入、Setter注入、构造方法注入)

一、存储Bean对象 在这篇文章中我介绍了Spring最简单的创建和使用:Spring的创建和使用 其中存储Bean对象是这样的: 1.1 配置扫描路径 想要成功把对象存到Spring中,我们需要配置对象的扫描包路径 这样的话,就只有被配置了的包…

DDD神药:去哪儿结合DDD,实现架构大调优

尼恩说在前面 在40岁老架构师 尼恩的读者交流群(50)中,最近有小伙伴拿到了一线互联网企业如阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试资格,遇到很多很重要的面试题: 谈谈你的DDD落地经验? 谈谈你对DDD的理解&#x…

那仰望的人

心底的孤独和叹息

LangChain库简介

❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️ 👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…

维护工程师面经

文章目录 前言技能要求数据结构定义分类常用的数据结构 数据库原理数据的三级模式结构事务查询方式视图数据库范式 Java相关知识点总结 前言 本博客仅做学习笔记,如有侵权,联系后即刻更改 科普: 参考网址 技能要求 数据结构 参考网址 定…

毕业设计2349基于jsp的网上订餐系统【程序源码+文档+调试运行】

摘要 本文介绍了一个网上订餐系统的设计与实现。该系统分为前台用户模块和后台管理员模块,具有用户注册/登录、网站公告、菜品中心、购物车、用户后台、留言板等功能。管理员可以对用户信息、网站公告、菜品类别、菜品信息、订单信息、菜品评价信息、留言板信息和支…

Mac | Vmware Fusion | 分辨率自动还原问题解决

1. 问题 Mac的Vmware Fusion在使用Windows10虚拟机时,默认显示器配置如下: 开机进入系统并变更默认分辨率后,只要被 ⌘Tab 切换分辨率就会还原到默认,非常影响体验。 2. 解决方式 调整 设置 -> 显示器 -> 虚拟机分辨率…

Centos7安装Cesi(Supervisor集中管理工具)

Background CeSi 是 Supervisor 官方推荐的集中化管理 Supervisor 实例的 Web UI,该工具是用 Python 编写,基于 Flask Web 框架 。Superviosr 自带的 Web UI 不支持跨机器管理Supervisor 进程,功能比较简单,通过 CeSi 可以集中管理…

STM32F103C8T6第5天:独立看门狗、窗口看门狗、dma实验

1. 独立看门狗IWDG介绍(341.45) 什么是看门狗? 在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环,程序的正常运行被打断&#…

ESP32 碰上内存分配问题

1、背景 看图片 _calloc_r ->_malloc_r ->heap_caps_malloc_default->heap_caps_malloc->multi_heap_malloc->multi_heap_malloc_impl->get_next_block /* Return the next sequential block in the heap.*/ static inline heap_block_t *get_next_block(co…