IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> UI元素定位不稳定问题解决过程 -> 正文阅读

[开发测试]UI元素定位不稳定问题解决过程

一、现象描述

? ? ? ? 运行PC端自动化用例时,执行结果不稳定。主要表现在:单个用例执行成功,但是运行全量用例时,总有一些用例执行失败,返回各种错误信息。

二、背景说明

? ? ? ?PC端自动化脚本原先运行正常,出现不稳定时,主要改动内容如下:

? ? ? ?2.1?取消重运行机制,所有的用例运行一次如果错误则断言错误。

? ? ? ?2.2 所有的UI底层方法(如:基于selenium框架的二次封装方法,页面控件封装方法等)加入异常判断。

? ? ? ?2.3 重构基于selenium框架的二次封装方法,改为显示等待查找元素。

? ? ? ?2.4 删除脚本内强制等待时间(time.sleep),减少用例的执行时长。

三、问题分析

? ? ? ?3.1 重运行机制取消,导致运行失败的用例无法再次重新运行。

? ? ? ?3.2 从Allure报告上分析,经常是页面未加载成功,就开始执行元素的查找、操作,导致元素查找失败。

? ? ? ?3.3?从Allure报告上分析,元素定位成功,但是操作(如:点击,输入内容)无反应

? ? ? ?3.4?删除脚本内原有的强制等待时间,导致页面加载缓慢与自动化脚本执行不一致。

四、解决过程

? ? ? ?方案一 :

? ? ? ?切换回原来的selenium底层方法进行测试,运行效果也是不稳定。

? ? ? ?测试结果:方案失败

? ? ? ?方案二:

? ? ? ?采用新版(基于selenium框架进行二次封装的方法)底层框架封装方法,进行脚本运行。针对失败的用例逐一进行结果分析和脚本修改。

? ? ? ?主要修改内容包括:

? ? ? ?4.2.1 完善脚本。页面加载时有等待界面,则加入等待界面;同时添加对页面内某个元素是否加载成功的判断。以此双重确认页面加载成功

? ? ? ?4.2.2 动态等待元素加载。对页面内渲染比较慢的元素,采用循环(for)获取元素,给与充分时间渲染加载

? ? ? ?4.2.3 更换元素定位方式(XPath和CSS元素定位,优先使用CSS元素定位)

? ? ? ?测试结果:效果有提升,但是还是不稳定? ?

? ? ? ??

? ? ? ?方案三:

? ? ? ?在方案二的基础上,对selenium的查找元素方法(find_element)加入2秒的强制等待时间,进行测试。

? ? ? ?测试结果:整体稳定性提高,但是运行下来总有1-2个用例存在错误?

? ? ? ?方案四:

? ? ? ?4.4.1? 基于方案三的执行结果进行错误分析归类,基本是由查找元素引起的问题。

? ? ? ?4.4.2? 查看(查找元素)封装的方法,与之前方法比对,新方法主要采用了显示等待方式去查找元素(使用webDriverwait)。

? ? ? ? ? ? ? ? 基于此,对webDriverwait的底层方法进行调试,理解执行逻辑:当前时间加上等待时间,在这个时间内默认每隔0.5秒进行元素查找,如果未找到则返回超时。

? ? ? ?4.4.3? 基于方案二和方案三的结果,以及对webDriverwait的执行逻辑,与同事进行讨论:

? ? ? ? ? ? ? ? ?猜测默认等待间隔是0.5秒,可能页面还没有加载完,但是后台在不停的查找元素,导致没有足够的时间去等待页面加载。所以尝试将间隔时间调整为2秒。

? ? ? ?测试结果:用例整体稳定,成功。

五、结论

? ? ? ?采用方案四问题解决

六、经验总结

? ? ? ? 技术经验(硬技能):

? ? ? ? 6.1.1? 编写UI脚本时,凡是页面可见的等待界面在脚本中都要实现

? ? ? ? 6.1.2? 页面的等待界面消失,元素(页面控件)进行数据绑定的过程中,会有不到1秒的渲染(间隔)时间,

? ? ? ? ? ? ? ? ? 所以建议加一个页面判断:动态判断页面内某个元素的值是否加载成功,在开始业务操作,增加脚本的健壮性。

? ? ? ? 6.1.3? 尽量用例实现过程中,不要写time.sleep()。

? ? ? ? ? ? ? ? ? 原因是:如果页面加载快,强制等待时间就显得过长;如果页面加载缓慢,强制等待时间又不足以支撑页面成功渲染。

? ? ? ? ? ? ? ? ? 建议采用动态判断,既有足够的时间渲染页面又不会空等太长时间。减少后期优化成本。

? ? ? ? 6.1.4? 在新打开的页面上,建议都加页面断言:判断是否正确进入到该页面

? ? ? ? ? ? ? ? ? 如果未进入到期望页面直接断言失败;

? ? ? ? ? ? ? ? ? 从另一个角度,新打开页面直接进行元素操作(点击,输入,下拉框选择)时,容易操作失败。

? ? ? ?工作经验((软技能):

? ? ? ? 6.2.1? 先分析问题,将原因进行归类,对症下药。

? ? ? ? 6.2.2? 大部分UI的问题都是页面加载慢,执行脚本快导致的问题。

? ? ? ? 6.2.3? 尝试几种方案之后,效果不明显,可以将尝试的方案以及效果整理一下然后小组讨论,其他人的其他角度帮助很大。

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2021-09-04 17:50:56  更:2021-09-04 17:51:41 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/21 2:11:12-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码