【首发】一种解决因前端ui频繁变动导致appium定位失败的方法: wqrfnium_app

468 阅读4分钟

appium定位失败的原因有很多,元素定位代码变了是最大的原因。

比如位置变了,你的xpath就不好使了。id等属性变了,你的定位代码也要重新维护了。

那么有没有一种 可以自动帮你去识别并维护的算法呢? 当然有,那就是wqrf系列工具

今天要介绍的就是专门处理 安卓端的appium框架的 自动维护插件:wqrfnium_app 

目前可直接pip install 下载。

之前熟悉或者用过处理selenium的wqrfnium的小伙伴对此应该不会太陌生。这个wqrfnium_app从名字就可以看得出来是在wqrfnium基础上改装得来,专门处理appium安卓端了这次。具体使用方法和原理和之前差不多。只是第一次录入元素时方法不同而已。

想去熟悉wqrfnium的小伙伴可以进入这个传送门:wangzijia.blog.csdn.net/article/det…

那么wqrfnium_app具体介绍如下:

它是什么?

它基本上可以让你的appium脚本一套用到死。
它可以让原本不能做的自动化项目开启自动化。
它可以瞬间扩充自动化人员的工作机会。
它可以在前端妹子把元素改到自己都不认识的情况下,依然帮你自动定位到。

它怎么下载?

嫌麻烦可以直接 pip install wqrfnium_app 
也可以访问pypi官网:pypi.org/project/wqr…
想研究源码的可以去github:github.com/Woqurefan/w…
然后用这句引用即可
from wqrfnium_app.wqrfnium_app import *

它的原理?

它基于appium和page-object模式:
一开始会默认用元素存放的默认定位方式去定位元素并返回,如果发现定位失败,则启动维护算法,维护算法会找到经过改变的该元素并返回,并且把该元素/控件 的新定位方式存储起来,以便之后直接使用。

它的性能?

正常使用默认定位方式定位需要:0.04秒。
定位失败-启动维护算法-重写定位-储存新定位方式需要:1.08秒。
下次定位会使用新的默认定位方式:0.04秒。

它的使用流程?

引入begin_wqrf('你的维护表绝对路径/名')

表中维护:

第一列:标识

第二列:临时定位方式

第三列:临时定位值

第四列:下标 0 - 999

第五列:空着不管即可,所有属性聚合字符串

举例:然后调用getelement(driver,'按钮标识别').click() 

首次录入后期需要维护的元素,必须写对前四列。

运行一次脚本后,第五列会自动生成。无需注意。

之后若该元素因为ui变更导致定位失败,则会自动根据第五列重新找到最符合的新元素返回给你,然后自动更新临时定位的234列和新的元素的第5列属性聚合字符串。

它的作者?

就是博主本人:我去热饭,大家有什么问题仅可在此贴留言哈,博主拼命的修改中。您也可以点击我个人主页查看联系方式。大致就是:

下载后,先运行下,让它生成element.xls的表,然后在里面录入/维护各种元素。
里面有个初始化语句:begin_wqrf(’./MyElements.xls’)
是自定义excel表位置的代码,若不加则会在默认位置生成表。
首次运行因为是刚生成存放元素的表elemensts.xls,所以第一次接下来会因表是空的而停止脚本。
然后只需要把平时经常变化的元素存放进去,然后在脚本中引入wqrfnium_app.wqrfnium_app 的 getelement方法,里面需要传driver和元素的标识。即可让wqrfnium_app自动维护该元素。
为啥要传driver,因为很多同学会同时在一个会话中启动多个driver,所以wqrfnium_app也需要区分下用哪个driver去定位哪个元素

它的优点?

1.使用简单,只需要变化定位语句即可。
2.源码简单,方便进行二次开发。
3.其中的所有分数权重参数可自行根据公司项目风格更改,来达到99%以上的成功率。
4.博主更新快,框架优化和前景非常nice。
5.同时支持py2,py3

它的依赖模块?

1.appium
2.python-Levenshtein
3.python2/3
4.xlrd
5.xlutils
6.configparser

异常问题?

若安装python-Levenshtein 时发生错误,大概率是因为c++的问题:
可按此链接安装:
error: Microsoft Visual C++ 14.0 is required. Get it with “Microsoft Visual C++ Build Tools”: visualstudio.microsoft.com/downloads/