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

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

前言



上一篇推送我们聊到了Windows应用的实操案例,而今天我们想跟大家聊一聊 iOS设备的实操案例 。因为之前很多同学都反馈说,官方教程里面,绝大多数都是安卓设备的实操,Windows应用和iOS设备的测试实操很少,所以这两周特意给大家安排上。


不过在进入主题之前,我们需要明白,大部分情况下,在iOS上做自动化测试和在安卓设备上做自动化测试的思路是一致的,只有少部分接口会有所不同,比如 有些接口只支持安卓设备,不支持iOS设备 ;另外 有些接口在iOS设备和安卓设备的表现会略微不同 。这些内容我们在下文中都会给同学们详细讲解下。


案例分析



① 需求及预期效果


今天我们依然用1个很简单的例子来带大家入门:打开iOS设备上的备忘录app,新建1个备忘录并输入一些文本信息,删除新建的备忘录,回到应用初始页。具体步骤如下:


  • 打开备忘录
  • 新建1个备忘录
  • 使用 text 接口做一些输入验证
  • 删除一些字符
  • 删除新建的备忘录
  • 回到备忘录的初始页


预期效果如下:


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


② 实现代码


# -*- encoding=utf8 -*-
__author__ = "AirtestProject"
from airtest.core.api import *
auto_setup(__file__)
# 重启备忘录
keyevent("HOME")
stop_app('com.apple.mobilenotes')
start_app('com.apple.mobilenotes')
from poco.drivers.ios import iosPoco
poco = iosPoco()
# 新建备忘录,输入文字
if exists(Template(r"tpl1597634812825.png", threshold=0.8, record_pos=(-0.002, -0.923), resolution=(828, 1792))):
    poco("新建备忘录").click()
    text("这是标题")
    text("This is context",enter = False)
    text("展示不换行输入")
    sleep(1.0)
    text("展示删除操作~~~",enter = False)
    sleep(1.0)
    text("\b\b\b已删除3个~符号")
    if poco("ICNoteEditorView").child("备忘录").exists():
        poco("ICNoteEditorView").child("备忘录").click()
# 删除备忘录
if poco("Table").offspring("这是标题").exists():
    poco("Table").offspring("这是标题").click()
    poco("删除备忘录").click()
    poco("ICNoteEditorView").child("备忘录").click()
复制代码


知识点详解



① 启动应用


iOS设备也可以使用 start_app(package) 接口来启动应用,唯一与安卓设备不同的,只是参数 package 的称呼有点不一样。iOS 的 packageBundle ID,而Android 的叫 packageName


Bundle ID 是iOS应用的唯一标识 。对于常见的一些原生应用, 找某度问一下就可以知道他们的 Bundle ID 了。如果是自己公司内部开发的iOS应用,也可以找对应的开发咨询一下。另外网上也有很多如何获取 Bundle ID 的小技巧,同学们可以自行搜索下。


PS:查看安卓应用的 packageName 可以直接使用IDE自带的 “安卓助手” ,详情可以看往期推文 “IDE这个隐藏的小助手,还没用过你就亏啦!


② text()输入


iOStext() 接口默认会 在给定的输入字符后面加一个换行符 \n 。如果不想要输入之后出现换行的效果,可以把 enter = False 传到 text() 接口里面:


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


# 完成输入以后,不会进行换行操作
text("This is context",enter = False)
# 完成输入后,会直接换行
text("展示不换行输入")
复制代码


安卓text() 接口也有 enter 这个参数,但是它表示的是 在完成文字输入以后按一下回车键 (相当于 keyevent("ENTER") ),比如在一些游戏输入时,用户输入有效内容之后需要点击Enter确认,text() 接口的 enter 参数就可以完成这个操作,它的默认值也是 True


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


更特别的是,安卓平台的 text() 接口还有1个 search 参数,用于按下输入法键盘中的 search键 ,这个参数是安卓平台独有的。


③ iOS的删除操作


因为iOS平台不支持 keyevent("KEYCODE_DEL") ,所以在iOS设备上,没办法像安卓那样直接使用 keyevent("KEYCODE_DEL") 来删除文本。


但我们需要换一种思路,通过输入退格符号 \b 来实现iOS的删除操作


text("展示删除操作~~~",enter = False)
text("\b\b\b已删除3个~符号")
复制代码


不过1个退格符1次只能删除1个字符,要实现删除输入框所有文本的效果,我们需要 写一个循环连续运行N次 “输入退格符” 的操作


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


# 必须使用enter = False,否则删除1个字符之后就直接换行了
for i in range(10):
    text("\b",enter = False)
复制代码


④ other节点的定位问题


另外很多同学反馈,在做iOS测试的过程中,最让人头疼的就是使用poco框架时,好多节点都被识别成Other,给定位带来了极大的困扰


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


并且如果直接使用IDE的录制功能,自动生成的节点定位语句有可能会非常长,回放时容易报错,不是最优的定位方式。正确的方法是,观察UI树结构,看一下目标节点附近有没有非Other的节点,然后通过非Other的节点,用相对选择器/空间顺序选择器进行定位。


举个例子,在上述的备忘录脚本中,我们想定位左上角的返回备忘录按钮,如果直接使用 poco("备忘录") 来定位,有可能定位到别的叫“备忘录”的控件;如果双击该节点,自动生成的定位语句是 poco(rect="{'y': 44, 'x': 0, 'width': 83, 'height': 44}") ,回放时会报错找不到该控件。


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


所以我们可以观察下目标控件附件的树结构,发现他有一个非other的父节点,该节点的name属性在整棵树中也是唯一的,所以我们利用相对选择器,写出来的定位语句为 poco("ICNoteEditorView").child("备忘录")


⑤ iOS支持的接口详情


iOS平台下,Airtest的api支持情况:


接口 是否支持
start_app 支持
stop_app 支持
snapshot 支持
home 支持
touch 支持
swipe 支持
text 支持
wait 支持
exists 支持
find_all 支持
assert_exists 支持
assert_not_exists 支持
wake 不支持,可以考虑用home替代
keyevent 仅支持HOME
clear_app 不支持
install 不支持
uninstall 不支持


小结



好了,今天的教程就到这里啦,虽然例子非常简单,但还是希望新手同学先学习再上手,才会事半功倍哦~

相关文章
|
25天前
|
人工智能 数据可视化 测试技术
AI 时代 API 自动化测试实战:Postman 断言的核心技巧与实战应用
AI 时代 API 自动化测试实战:Postman 断言的核心技巧与实战应用
274 11
|
11月前
|
敏捷开发 测试技术 持续交付
探索自动化测试在敏捷开发中的应用与挑战
本文深入探讨了自动化测试在现代软件开发流程,特别是敏捷开发环境中的重要作用和面临的挑战。通过分析自动化测试的基本原理、实施策略以及在实际项目中的应用案例,揭示了其在提高软件质量和加速产品交付方面的巨大潜力。同时,文章也指出了自动化测试实施过程中可能遇到的技术难题、成本考量及团队协作问题,并提出了相应的解决策略,为软件开发团队提供了有价值的参考和指导。
|
机器学习/深度学习 人工智能 自然语言处理
探索AI在文本生成中的应用与挑战自动化测试框架的搭建与实践
【8月更文挑战第27天】本文将深入探讨人工智能(AI)在文本生成领域的应用,包括其技术原理、实际应用案例以及面临的主要挑战。通过分析AI文本生成的工作原理和实际效果,我们将揭示这项技术如何改变内容创作、新闻撰写、对话系统等多个领域。同时,我们也将讨论AI文本生成带来的伦理和质量问题,以及如何平衡创新与风险,确保技术的健康发展。
|
11月前
|
jenkins 测试技术 持续交付
探索自动化测试在持续集成中的应用与挑战
本文深入探讨了自动化测试在现代软件开发流程,特别是持续集成(CI)环境中的关键作用。通过分析自动化测试的优势、实施策略以及面临的主要挑战,旨在为开发团队提供实用的指导和建议。文章不仅概述了自动化测试的基本原理和最佳实践,还详细讨论了如何克服实施过程中遇到的技术难题和管理障碍,以实现更高效、更可靠的软件交付。
220 19
|
11月前
|
机器学习/深度学习 人工智能 测试技术
探索自动化测试框架在软件开发中的应用与挑战##
本文将深入探讨自动化测试框架在现代软件开发过程中的应用,分析其优势与面临的挑战。通过具体案例分析,揭示如何有效整合自动化测试以提升软件质量和开发效率。 ##
|
11月前
|
敏捷开发 监控 jenkins
探索自动化测试框架在敏捷开发中的应用与优化##
本文深入探讨了自动化测试框架在现代敏捷软件开发流程中的关键作用,分析了其面临的挑战及优化策略。通过对比传统测试方法,阐述了自动化测试如何加速软件迭代周期,提升产品质量,并针对实施过程中的常见问题提出了解决方案。旨在为读者提供一套高效、可扩展的自动化测试实践指南。 ##
130 9
|
前端开发 机器人 测试技术
【RF案例】Web自动化测试弹窗处理
在进行Web自动化测试时,常会遇到不同类型的弹窗,如ajax、iframe、新窗口及alert/Confirm等。这些弹窗可通过Selenium进行定位与处理。其中,ajax弹窗直接定位处理;iframe需先选中再操作;新窗口类似iframe处理;而alert/Confirm则需特殊方法应对。在Robot Framework中,需先定义并获取窗口后使用特定关键字处理。此外,还有部分div弹窗需在消失前快速定位。希望本文能帮助大家更好地处理各类弹窗。
272 6
【RF案例】Web自动化测试弹窗处理
|
敏捷开发 IDE 测试技术
自动化测试框架的选择与应用
【9月更文挑战第16天】在软件开发周期中,测试环节扮演着至关重要的角色。随着敏捷开发和持续集成的流行,自动化测试成为提升软件质量和效率的关键手段。本文将探讨如何根据项目需求选择合适的自动化测试框架,并通过实际案例分析展示其在软件开发过程中的应用。我们将从单元测试、集成测试到端到端测试等多个层面,讨论自动化测试的最佳实践和常见问题解决策略。
|
11月前
|
Java 测试技术 API
软件测试中的自动化测试框架选择与应用##
在快速迭代的软件开发周期中,选择合适的自动化测试框架对于提高软件质量和开发效率至关重要。本文探讨了当前流行的几种自动化测试框架的特点和适用场景,旨在为软件开发团队提供决策依据。 ##
|
11月前
|
机器学习/深度学习 人工智能 安全
探索AI在软件工程中的最新应用:自动化测试与代码审查
探索AI在软件工程中的最新应用:自动化测试与代码审查

热门文章

最新文章