| |
|
开发:
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 获取客户端地址 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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年11日历 | -2024/11/17 22:14:41- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |