自动化工具Fastlane笔记三: snapshot自动截图基础+示例

首先, 看到snapshot部分,想必你已经对FastLane已经有了解。如果你对 Fastlane 还不太了解,那么可以先看我上一篇对于 Fastlane基础介绍《24. 自动化工具Fastlane笔记一: 安装, 打包,上传(testFlight,app store)》,再回来阅读此篇文章。

前言

Fastlane中和截图相关的有两部分,snapshotframeitsnapshot负责对应用截图,frameit对图片再加工修饰。

本文这里只针对snapshot,以示例项目的形式给大家尽可能详细的说明。

UI Test

在Fastlane-snapshot部分,介绍了snapshot是基于UI Test来实现的。UI Test是苹果在Xcode7上推出的一个自动化测试模块。

snapshot uses the capabilities of Apple's UI Tests to drive interactions with your app.

如果想要对UI Test进行了解,大家可以在Fastlane doc中的snapshot部分中的《Getting Started Using UI Tests》小结找到官方推荐的文档。

UI Test介绍

好了,下面开始示例

项目示例及步骤

官方的步骤可以在都可以在Fastlane doc中查看, 文档格式要比在github中的markdown形式好的多。 《Setting Up snapshot》小结, 如下图:

官方步骤

  • step0: 执行sudo gem install snapshot,安装snapshot模块
  • step1: 正常创建项目(我的示例项目是之前的一个仿写项目JiKeScrollView)
  • step2: 执行fastlane init创建fastlane文件夹(上一篇文章中有详细介绍)
    fastlane init
  • step3: 执行fastlane snapshot init,创建出SnapfileSnapshotHelper.swift文件。
    fastlane snapshot init之后

上边三步还是比较简单的,如果你fastlane配置的没有问题,很快就执行成功。

下边的步骤主要分为两部分:

  • 一是导入SnapshotHelper.swift(Swift)文件,也就是在OC项目中引入和使用Swift代码
  • 二是UI Test录制手势,和开始截图
  • step4: Add the ./SnapshotHelper.swift file to your UI Test target (You can move the file anywhere you want)SnapshotHelper.swift文件向平常一样拖入项目,选择加入哪个target的时候, 选择加入到JiKeScrollViewUITests(自己的项目名字UITests)就可以了,千万不要勾选其他两个,否则会报错import XCTest找不到
    选择加入的target, 点击 [确定] 以后. 会询问你是否创建桥接文件(只有第一次拖入的时候SnapshotHelper.swift 才会提示, 你如果删除了SnapshotHelper.swift之后, 再次向工程中拖入SnapshotHelper.swift就不会提示了让你创建桥接文件了, 正常现象)。 这个桥接文件对于在OC项目中引用Swift代码, 创建与否都可以。但是反过来就不行了, 如果不提示创建桥接文件, 你可以尝试手动创建该文件。 我们的示例项目是OC项目!
  • step5: 选中target—JiKeScrollViewUITests-> Build Settings -> Defines Module设置为YES。不设置这一项的话,你会在第六步中发现,引用文件JiKeScrollViewUITests-Swift.h(MYUITests-Swift.h)的时候, 会出现报红色警告。 这个警告虽然出现, 但是com+R依然能正常启动和运行。但是Defines Module这一步在我们平常的OC引入Swift文件时候也是必须要有的,我们还是需要设置为YES, 如下图:
  • step6: (Objective C only) Add the bridging header to your test class. (1) #import "MYUITests-Swift.h" 引入头文件 (2)The bridging header is named after your test target with -Swift.h appended. 头文件的名字是 “项目名+ -Swift.h”
    回到示例项目,在JiKeScrollViewUITests.m文件中,我们需要引入"JiKeScrollViewUITests-Swift.h"头文件。(注意: 这个头文件是系统默认生成的,不用我们手动创建,我们在拖入Siwft文件之后,直接引用就可以。 没有智能提示,所以不必惊慌,保证#import'target名称-Swift.h'正确就可以了。)

到这里,com+R一下项目,是不是没有任何报错,直接运行了呢?这里关于OC引入Swift代码的部分就完成了

移步到JiKeScrollViewUITests.m文件中,简单介绍一下文件中的三个方法(其实文件中英文注释已经说明了):

    • (void)setUp: 方法在XCTestCase的测试方法调用之前调用,可以在测试之前创建在test case方法中需要用到的一些对象等
    • (void)tearDown: 当测试全部结束之后调用tearDown方法,法则在全部的test case执行结束之后清理测试现场,释放资源删除不用的对象等
    • (void)testExample: 测试代码执行性能

(引用和更新自 《 Xcode7 UITest UnitTest 自动化测试学习》)

  • step7: 在- (void)setUp方法中初始化Snapshot对象代码, 如下:
    XCUIApplication *app = [[XCUIApplication alloc] init];
    [Snapshot setupSnapshot:app];
    [app launch];
  • step8: 录入UI Test操作,In your UI Test class, click the Record button on the bottom left and record your interaction,官方说点击录制按钮直接录制就可以了,这个地方需要注意的是,你可能发现录制红色按钮是灰色不可点击状态,这就尴尬了。这可怎么办?
    正确的操作是我们把鼠标放到
    • (void)testExample {
      // Use recording to get started writing UI tests.
      }
      这个方法中。这个时候录制按钮才可以点击! 点击,自动启动模拟器,愉快的开始录制我们的手势操作。
可点击

不可点击

关于录制手势,我们每次点击事件,都会在testExample在这个方法中自动生成测试代码,我们要做的是在我们把下边的代码:
- Swift: snapshot("01LoginScreen")
- Objective C: [Snapshot snapshot:@"01LoginScreen" waitForLoadingIndicator:YES];
放到你需要截图的点击事件对应的测试代码位置。
如下图:


以上八步都完成以后,我们com+B一下,看看有没有报警号,如果没有,那么大功快要告成了。

  • step9: 在工程文件家中找到Snapfile文件,打开按照我们需要的编辑。 英文注释很简明详细,我只要快速提醒你, #号是注释就可以了。下边是我的配置:
  • step10: 最后一步,在控制台执行fastlane snapshot,根据上边指定的截图输入位置,我们可以看到截图,并且在浏览器中自动生成html文件了。

到这里,snapshot部分就结束了。

等等,还有点问题

  1. 题目是浅析,本来我打算�用这个当做App Store的展示图片的,但是发现还是挺麻烦的,而且frameit还没有弄,还是交给美工同志实在一点。
    这篇文章并不完美,比如而且遇到一个问题就是对录制一个手势操作,即一个地方加入[Snapshot snapshot:@"01LoginScreen" waitForLoadingIndicator:YES];成功。 这个显然是存在问题的,肯定是可以对很多的手势进行操作的,但是我也没有找出具体的原因。希望有知道的朋友,一定要告诉我一下,不胜感激~!

  2. 执行第十步,会遇到一个错误Incomplete universal character name导致snapshot操作不成功。具体原因现在查到的是因为UTF转码的问题,需要把@"\U5373\U523b\U9996\U9875\U6eda\U52a8\U6548\U679c中的大写U替换成小写U,就可以了。 具体可以看《UITests Incomplete universal character name》

  3. 这里强调一下: OC引入Swift的桥接文件,如果你之前点击了取消,后期再拖入和创建Swift文件是不会再次提示创建的,你需要做的是手动创建。 步骤《OC引入Swift,混编》《在Swift项目中使用OC,在OC项目中使用Swift》

参考文章

《fastlane screenshots for iOS and tvOS》
《fastlane 之截图自动化》

交流


希望能和大家交流技术
Blog:http://www.lilongcnc.cc


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

推荐阅读更多精彩内容