自动化测试实操案例详解 | Windows应用篇

简介: 自动化测试实操案例详解 | Windows应用篇

前言



之前有同学留言说想看Windows应用的自动化,那么今天我们就用1个简单的例子,带大家一起来看一下Windows应用的自动化究竟有哪些坑。


不过在此之前,希望大家能认真看一下 “如何连接Windows应用窗口” 的教程,里面详细描述了多种连接Windows窗口的模式。


因为桌面应用的多样化,IDE连接各种Windows窗口也会出现各种各样的问题,同学们在连接Windows窗口时如果出现问题,比如 无法嵌入、连接后闪退、连接后窗口被拉伸 等等,建议同学们多尝试几种连接方式,总会找到一种比较好的连接方式。


另外,因为同学们平常多使用移动设备进行测试,换成测试Windows应用时,很容易把一些移动设备才有的接口用到Windows应用上面,导致接口失效,达不到预期效果的情况,下文我们也会详细跟大家讲述一下,帮助大家避坑。


实操



① 需求


我们以网易云音乐的Windows客户端为例,实现在网易云音乐中搜索“薛之谦”,然后找到他的歌单排名,将排名前10的歌曲加入“我喜欢的音乐”列表,之后删除搜索框的内容,最后回到网易云音乐的首页。


② 在IDE中连接网易云音乐的应用窗口


为防止其它应用窗口干扰连接,我们 在桌面上只留下IDE窗口和待测的网易云音乐窗口 。然后我们在Windows窗口连接里选择 “选定窗口”,再单击选中网易云音乐的窗口,嵌入之后发现,网易云音乐的窗口被严重拉伸:


网络异常,图片无法展示
|


所以我们再尝试一下另外一种嵌入方法,“搜索窗口”。点击“搜索窗口”,在弹出的窗口列表中,选择网易云音乐的窗口,再点击连接:


网络异常,图片无法展示
|


发现可以正常嵌入,所以以后我们可以使用搜索窗口这种模式,来嵌入网易云音乐的Windows窗口。


③ 需求分析和预期效果


  • 点击搜索框
  • 输入“薛之谦”
  • 进入薛之谦的歌曲列表
  • 按排名顺序播放排名前10的歌曲
  • 将当前播放的歌曲加入“我喜欢的音乐”列表
  • 再次点击搜索框,全选文本然后删除
  • 返回应用首页


网络异常,图片无法展示
|


④ 实现的代码


网络异常,图片无法展示
|


知识点分析



① 模拟键盘/鼠标操作


AirtestIDE对普通Windows应用程序的测试支持,主要 依靠图像识别框架(Airtest)进行位置定位,使用 pywinauto 的操作接口进行模拟操作


最常见的就是模拟键盘/鼠标操作了。上述案例中,我们主要使用了模拟键盘操作,帮助我们在应用上输入关键词、使用快捷键以及进行全选删除等操作。


dev = device()
# 输入搜索词,等同于 text("薛之谦")
dev.keyboard.SendKeys("薛之谦")
# 删除输入框的内容,等同于 keyevent("^a"),keyevent("{BACK}")
dev.keyboard.SendKeys("^a")
dev.keyboard.SendKeys("{DELETE}")
复制代码


其中 '^' 等同于 {VK_CONTROL},所以 "^a" 代表的是 "ctrl+a" ,另外 pywinauto.keyboard 这个模块的详细内容可以参考此链接:pywinauto.readthedocs.io/en/latest/c…


模拟鼠标操作在上述示例中没有涉及,但它的基本用法与 pywinauto.keyboard 模块是相似的,给大家举个简单的例子,模拟鼠标的右键点击操作:


网络异常,图片无法展示
|


dev = device()
dev.mouse.right_click(coords=(1180, 145))
复制代码


pywinauto.mouse 模块的内容可以参考此链接:pywinauto.readthedocs.io/en/latest/c…


② 在Windows应用上使用keyevent


之前很多同学跟我们反馈过这样的问题,为什么他们在Windows应用上输入各种 keyevent 之后,都只是把键码输入到文字框中,而没有实现键码的效果呢?


网络异常,图片无法展示
|


如上图所示,我们的预期是删除输入框的文字,但实际效果是把键码一个个输入到了输入框中。其实原因就是我们文章开头所说的,这个键码是应用在安卓平台上的,照抄到Windows平台是不适用的:


网络异常,图片无法展示
|


而Windows平台的键码,我们可以参考 pywinauto.keyboard 这个模块给出的键码合集:


网络异常,图片无法展示
|


③ 多种截图技巧


实操示例中,我们使用了多条截图语句帮助我们在网易云音乐上进行定位。其中有几个截图的小技巧想分享给大家:


第一点,截图的时候,希望大家 尽量减少截入过多的空白背景 ,空白背景过多容易导致特征点稀少,进而出现截图识别位置错误的问题。


第二点,截图并不一定是越小越精准。当画面中存在多个相似的目标截图时,我们需要灵活地加入一些辅助内容,帮助我们顺利定位到目标。就拿上述示例来说,输入“薛之谦”后,我们想要点击下拉列表的第二个薛之谦,但是列表中有很多个干扰元素:


网络异常,图片无法展示
|


此时,细细地去抠含有薛之谦三个文字的截图就非常不明智了,因为你很难确保程序最终帮你匹配到列表中哪一个位置。但我们尝试换一下思路,适当地将截图扩大一些,增加更多的特征点,让我们的点击目标依然处于截图中心 ,不就可以更准确地定位到我们的目标了吗?


网络异常,图片无法展示
|


最后一点,巧用 target_pos 帮助我们点击截图的不同位置 。默认情况下,程序在画面上找到截图目标后,会点击截图的中心位置,但实际操作中,我们可能需要点击截图的右下角、中心偏右位置等等,这时候我们只需要设置截图 target_pos 的值即可(取值范围1~9)。


网络异常,图片无法展示
|


小结



今天的教程内容就到这里啦

相关文章
|
1月前
|
敏捷开发 测试技术 持续交付
探索自动化测试在敏捷开发中的应用与挑战
本文深入探讨了自动化测试在现代软件开发流程,特别是敏捷开发环境中的重要作用和面临的挑战。通过分析自动化测试的基本原理、实施策略以及在实际项目中的应用案例,揭示了其在提高软件质量和加速产品交付方面的巨大潜力。同时,文章也指出了自动化测试实施过程中可能遇到的技术难题、成本考量及团队协作问题,并提出了相应的解决策略,为软件开发团队提供了有价值的参考和指导。
|
23天前
|
Java 测试技术 数据安全/隐私保护
软件测试中的自动化策略与工具应用
在软件开发的快速迭代中,自动化测试以其高效、稳定的特点成为了质量保证的重要手段。本文将深入探讨自动化测试的核心概念、常见工具的应用,以及如何设计有效的自动化测试策略,旨在为读者提供一套完整的自动化测试解决方案,帮助团队提升测试效率和软件质量。
|
1月前
|
运维 应用服务中间件 Linux
自动化运维的利器:Ansible在配置管理中的应用
【10月更文挑战第39天】本文旨在通过深入浅出的方式,向读者展示如何利用Ansible这一强大的自动化工具来优化日常的运维工作。我们将从基础概念讲起,逐步深入到实战操作,不仅涵盖Ansible的核心功能,还会分享一些高级技巧和最佳实践。无论你是初学者还是有经验的运维人员,这篇文章都会为你提供有价值的信息,帮助你提升工作效率。
|
20天前
|
运维 监控 持续交付
自动化运维在现代数据中心的应用与实践####
本文探讨了自动化运维技术在现代数据中心中的应用现状与实践案例,分析了其如何提升运维效率、降低成本并增强系统稳定性。通过具体实例,展示了自动化工具如Ansible、Puppet及Docker在环境配置、软件部署、故障恢复等方面的实际应用效果,为读者提供了一套可参考的实施框架。 ####
|
1月前
|
jenkins 测试技术 持续交付
探索自动化测试在持续集成中的应用与挑战
本文深入探讨了自动化测试在现代软件开发流程,特别是持续集成(CI)环境中的关键作用。通过分析自动化测试的优势、实施策略以及面临的主要挑战,旨在为开发团队提供实用的指导和建议。文章不仅概述了自动化测试的基本原理和最佳实践,还详细讨论了如何克服实施过程中遇到的技术难题和管理障碍,以实现更高效、更可靠的软件交付。
|
29天前
|
机器学习/深度学习 人工智能 测试技术
探索自动化测试框架在软件开发中的应用与挑战##
本文将深入探讨自动化测试框架在现代软件开发过程中的应用,分析其优势与面临的挑战。通过具体案例分析,揭示如何有效整合自动化测试以提升软件质量和开发效率。 ##
|
1月前
|
运维 监控 安全
自动化运维的利剑:Ansible在现代IT架构中的应用
在数字化浪潮中,企业对IT系统的敏捷性和可靠性要求日益提高。Ansible,一种简单但强大的自动化运维工具,正成为现代IT架构中不可或缺的一部分。它通过声明式编程语言YAM,简化了系统配置、应用部署和任务自动化的过程,显著提升了运维效率和准确性。本文将深入探讨Ansible的核心特性、应用场景以及如何有效整合进现有IT环境,为读者揭示其在自动化运维中的实用价值和未来发展潜力。
|
1月前
|
敏捷开发 监控 jenkins
探索自动化测试框架在敏捷开发中的应用与优化##
本文深入探讨了自动化测试框架在现代敏捷软件开发流程中的关键作用,分析了其面临的挑战及优化策略。通过对比传统测试方法,阐述了自动化测试如何加速软件迭代周期,提升产品质量,并针对实施过程中的常见问题提出了解决方案。旨在为读者提供一套高效、可扩展的自动化测试实践指南。 ##
43 9
|
1月前
|
运维 Devops 应用服务中间件
自动化运维的利剑:Ansible在现代IT架构中的应用
【10月更文挑战第42天】本文旨在揭示自动化运维工具Ansible如何革新现代IT架构,通过简化配置管理和部署流程,提升效率和可靠性。我们将探索Ansible的核心功能、语言特性以及其在DevOps文化中的角色。文章还将展示如何借助Ansible构建模块化和可重用的配置代码,实现快速迭代与部署,并确保系统一致性。通过阅读本文,运维人员将了解如何利用Ansible优化日常任务,加速产品上线速度,同时提高系统的稳健性。
41 5