XCUITest-在iOS测试中的妙用(番外篇)

前言吹一波

  iPhone的自动化测试,只要有Mac条件,XCUITest就是绝配啦
  (😎Apple爸爸的先天优势好吧😎)

XCUITest的基本知识参见:

https://www.jianshu.com/p/adb289c1d839
关键词:iOS UI自动化 Xcode 测试 Swift Mac


1.脱离iOS App源码进行UI自动化

  「该部分手把手教学,再不行可能是基础知识匮乏,辛苦google吧」

  可能能做出很多夸张的事情,看你发挥啦!

  鉴于之前的一些Demo都是基于App源码本身添加target来展开UI自动化测试的,后来实验发现完全不用依赖源码。

  但是结合源码的UITest可以方便增加accessbility属性来配合元素定位,也可以发现一些非主线程更新UI等危险操作的存在(还是有不少好处的)。

创建一个新的Xcode项目:

Xcode->File->New->Project(快捷按键 Shift+Command+N )

1.png

  项目模板如果不太懂就选择Single View App吧。该项目作为UITest这个target的依赖,没有什么实质作用。

2.png

下一步注意包含Include UI Tests,项目名称和组织名称你开心就好。

3.png

完成后如图所示:

4.png

代码-Safari浏览器,载入百度网页的过程

let safariApp = XCUIApplication.init(bundleIdentifier: "com.apple.mobilesafari") 
let wechatApp = XCUIApplication(bundleIdentifier: "com.tencent.xin") 
let qqApp = XCUIApplication(bundleIdentifier: "com.tencent.mqq")
 //如果要测试自己公司的App,那么问下开发bundle identifier就好了,上面的三个分别是iPhone自带的浏览器、腾讯微信、腾讯QQ程序 
safariApp.launch() 
app.buttons["URL"].tap() 
//防止如果浏览器打开后有一个默认的网页,则点击输入框右边👉的叉号来清空 
if (app.buttons["清除文本"].exists){ 
    app.textFields["URL"].buttons["清除文本"].tap()
 } 
app.textFields["URL"].typeText("http://www.baidu.com") 
//点击键盘上的确认按钮,也是前往按钮 app.buttons["前往"].tap() 
//至此,完成了打浏览器,载入百度网页的过程

  这不是官方推荐的操作,因为此时app对象不是默认的宿主app。也就是wait for app to idle等操作无法正确地合理地判断app状态了。
还是推荐在被测试的源码内集成XCUITest Target。

2.「多App交互」测试外部App登录(微信登录、微博登录、QQ登录)

  交给XCUITest自动化,都是极速完成

  建议打开XCUITest的脚本录制功能操作一遍来构成基本代码。

Login-05-29 10_09_00.gif

  速度比手工都快速,各种app的交互成为可能,足见XCUITest的巨大潜力。

  实例是网页调起QQ等软件进行登录的过程,同样,自己的App调起这些常用的App进行登录类似。

  注意操作QQ、微信等其它app的时候使用上文代码中定义的qqApp、wechatApp等对象。

  也就是说操作的不同的App都要是对应的XCUIApplication对象。

3.「important」查看XCUIElement的结构树(当前的UI元素树)

在断点处,lldb命令行执行:

po app.debugDescription()

  如果查看不方便,将选中的部分复制到sublimeText等第三方文本编辑器

将\n 替换成换行Enter键,效果如下:


部分UI元素树结构.png

是Safari浏览器打开一个登陆网页之后的元素树的一部分。

4.万能点击

(不建议,但是极端情况可以解决问题)

  如果遇到实在处理不了的情况,比如XCUITest元素树中都找不到某元素

  可以考虑使用点击操作暂时绕过

【充电站】了解UI在iOS系统中的倍数渲染,2x、3x等

比如Xs Max这样的高分辨率肯定是3x渲染了。

7-alipay.jpg

icon_alipay.png → iPhone 早期的低分辨率手机(不考虑)

icon_alipay@2x.png → iPhone4/4S/5/5S/6/6S/7对应尺寸,这就是2倍图

icon_alipay@3x.png → iPhone6P/6SP/7P使用的尺寸,3倍图,也就是现在高端iPhone使用的图

  举栗子:如果iphone Xs Max(UI图=3x机型)截图在Photoshop中测量出的要点击的点的位置是[x=30,y=18],则代码中tapAtPoint(x,y)的取值应该是[x=10,y=6]

下面这个函数Demo可以直接粘贴,然后调用,点击App内的某个坐标的点。

func tapCoordinate(in app:XCUIApplication, at xCoordinate: Double, and yCoordinate: Double) { 
    let normalized = app.coordinate(withNormalizedOffset: CGVector(dx: 0, dy: 0)) 
    let coordinate = normalized.withOffset(CGVector(dx: xCoordinate, dy: yCoordinate)) coordinate.tap()
 }

比如这个图片:(实际像素尺寸为1240*212)

8icon.png

  QQ 和 微信icon 的中心点在截图中的水平距离是290像素,代码中认为1倍距离,即距离为290/3

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,064评论 5 466
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,606评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,011评论 0 328
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,550评论 1 269
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,465评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,919评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,428评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,075评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,208评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,185评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,191评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,914评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,482评论 3 302
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,585评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,825评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,194评论 2 344
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,703评论 2 339