乐于分享
好东西不私藏

【实测】UI自动化用AI断言页面源码怎么搞?(终)

【实测】UI自动化用AI断言页面源码怎么搞?(终)

有时候写文章也好,写项目也好,写课程大纲也罢,总是越写越多,完全超出一开始的设计。本功能就是这样,和我n年前做的此功能相比,多了很多东西。索性继续更新吧…
我们之前已经搞定了当元素位置发生变化,但还可以找到的情况(完全一样或相似,完全一样则like为空)。如果有相似的,也就是like不为空的话,则需要启动AI来确诊,看看到底是没了,还是确定找到了。这个我们下节再实现。
先来测试下确实找不到,失踪了的情况,我们测试一下:
直接注释掉 第二个按钮:
结果如下:
你以为到这就算完事了?
ofcourse not! 身为测开,那就必须边写边测,而且我还没有做过各种异常处理,请继续看:
我再注释掉第一个按钮试试:
结果虽然可以正确展示第一个按钮的失踪状态,但下标越界了:
old_data中明明有3个元素:title 、button1 、button2
all_data(实际实时)中现在只剩下2个元素了:title、span
title找到了,button1没找到,button2的时候发现已经没有对等位置的了。
也就是说,位置不对等 我们走下面的逻辑。而当all_data数量都不足的时候,自然也应该按照顺序不对来看。
代码就改成如下:
如此,即判断了两种情况,不存在该下标 或 存在但tag_name不对的情况,均走下边的逻辑。
再测试后发现已经正常:
(后续应该多进行一些各种测试,当然解决bug的能力大家还是要训练一下,有时候问AI发现都描述不清你的问题,AI也是瞎给你答,然后你就按个去试,哪个方法不报错就以为可以了,其实全是隐患。)
接下来还有一些别的情况:(可能还会增加)
  • 位置没变,但text 或 其他属性变了。这时候也要启动这个相似逻辑。
也就是else的这个大情况:
这个情况下我们可以理解为,下标存在且tag_name一样。但这种情况就可以判断说元素没丢么?那真是太天真了。
这个大分类下,可能还有以下几种子情况,为了避免后续逻辑bug修复困难,我们应该遵从高内聚低耦合的方案,不要和上面的if逻辑混到一起去实现。虽然代码部分会有大比例相同,但也不要写到一起。写到一起只是舒服了你的高超技术和代码行数,但代码真正运行起来的时候可能更慢更容易出bug。
子情况:
  • 完全一致
  • text或具体属性不一样,需要放到dif列表中。
为什么text要单独拿出来,因为text往往是用户直接观测到的,text变了很大可能就是该元素就不是原来的那个了。而具体内部属性发生点变化,很多时候就单纯是优化了一下,用户也感觉不出来,也不必当做元素失踪了,具体还是交给AI去判断,但应该告诉ai,或者ai自己也明白,text的重要性占比一定非常大。(简单说就是text没变,那该元素大概率还是该元素。text变了,那哪怕内部属性都差不多,该元素也可能不是该元素了,这是经过实战多年总结的。)
代码如下:
(上面小红圈意味着相似的情况text也该暂时列为0,后续让AI判断是否恢复为1,当然这一步其实没有实际作用,位置变了的时候看like,位置没变的时候看dif。当然这里同学可以优化一下字典结构,让其更明确)
我们来测试一下:
结果如下:
至于text变成0了,dif也不为空,那existene究竟还能否看成1,这些全是靠后面AI决定,我们算法部分的任务就是给AI提供要判断的东西而已。
最后回过头来看一下整体的res字典:
总结:
old_ele 是给AI看的,标准答案元素
index 是给AI看的,位置是否变化
existence 是AI最终返回的结果,元素是否还存在,为1则正常,为0则代表元素失踪
like、text、dif 都是给AI看的,让AI从中判断元素还在不在
我们最终的结果就是判断这个existence,它就代表了这次断言成功还是失败,仅此而已。如果该页面所有元素existence值都为1,那就通过。有一个为0了,就判断失败。
接下来,我们要搞一个最终结果的函数:end_report
顺便重新整理下类参数,具体改动如下:
输出结果:
好本节到此结束,后面还要继续完成的功能有:
  1. AI判断函数
  2. 启动交互函数,让用户使用时直接按参数 启动不同流程(保存标准答案或断言页面)
  3. 完善报告函数(出具体返回值或文档详细报告)
关注的加v:qingwanjianhua