记一次UI自动化导致APP未响应问题

问题

在编写APP的UI自动化用例的时候,发现使用脚本跳转页面后,APP出现没有响应的问题,但是手工操作却没有这个问题

with allure.step("点击立即购买,跳转到收银台"):
    vip.click(vip.jiaxiang_img, duration=None)
    assert vip.has_element(checkstand.pay_page), '跳转到收银台失败'

脚本上也只是操作了两步

点击元素

查看元素是否存在

使用工具测试时候发现,点击获取元素的时候,APP也会出现奔溃的问题

所以大概率是代码上有问题

发现过程

由于导出奔溃日志给开发和查看Appium的输出日志都没有找到问题的具体原因,所以只能采用逐行注释代码的方式找到出错的位置。

在第一步点击「立即购买」之后,页面会跳转到「收银台」页面

收银台页面会先并行请求7个接口,然后将数据渲染到页面,然后再请求2个接口重新渲染一次页面

先将全部操作都去除,只请求1个接口,依次增加,直至请求了7个接口,没有卡死。

将第一次页面数据渲染也恢复,仍没有卡死。

将后2次接口请求也恢复,仍没有卡死。

将最后一次页面渲染添加上去,页面出现了卡死。

从上面的尝试中可以发现,页面卡死是因为最后一次的页面渲染导致的。

所以着重分析这一部分代码

问题原因

页面上显示的是:「购买即视为同意《微医会员协议》」,其中「《微医会员协议》」被标记为了黄色

对应的代码为

int index = warnInfo.indexOf("\n");
if (index <= 0){
    index = warnInfo.length();
}
spannable.setSpan(clickableSpanMember,7,15,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
spannable.setSpan(clickableSpanSource,15,index,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

Spanned.SPAN_EXCLUSIVE_EXCLUSIVE (前后都不包括)。用来标识在 Span 范围内的文本前后输入新的字符时是否把它们也应用这个效果。

clickableSpanMember和clickableSpanSource是两个点击事件

所以

  • 7-15个字符的点击事件是clickableSpanMember
  • 15+后的字符的点击事件是clickableSpanSource

但是实际上接口没有返回这么多内容,只有「购买即视为同意《微医会员协议》」这15个字符,现在代码中对后面的空字符串也设置了点击事件。

这部分代码编译和运行的时候都不会出错,但是使用Appium进行元素查找的时候就会出错

改为先判断字符长度然后设置点击事件:

if (warnInfo.length() >16){
    spannable.setSpan(clickableSpanSource,15,index,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}

修改之后Appium可以正常查找元素,不会出现APP奔溃现象

最后: 可以在公众号:伤心的辣条 ! 自行领取一份216页软件测试工程师面试宝典文档资料【免费的】。以及相对应的视频学习教程免费分享!,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。

我推荐一个【Python自动化测试交流群:746506216】,大家可以一起探讨交流软件测试,共同学习软件测试技术、面试等软件测试方方面面,助你快速进阶Python自动化测试/测试开发,走向高薪之路。

喜欢软件测试的小伙伴们,如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一 键三连哦!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值