iOS UITest KIF
KIF
KIF is iOS UI Test Library made by Square(GitHub kif-frameworks)
Compare to iOS UI Automation with Instruments, we can write Test code using Objective-C.
You can write test with SenTestKit(Old) and XCTest. It means you use both logic and UI tests.
* As KIF author mentioned, KIF includes private API, so don’t include App compile targets. We should use only test target.
How to use
Original code is static library style.
You can download from Git.(use git or download as zip)
Other people explains how to download with git, so I explain how to use codes itself.
Copy source codes
Code source codes under KIF group
KIF/Additions, KIF/Classes are core codes, please copy them.
* Careful *
If you want to copy source codes on your test, you need some changes
Especially, you use XCode6 above, Precompile header is not required, so you need change for it.
Change
If you don’t use Precompile header, you add header import in KIFTypist.h
KIF/Classes/KIFTypist
#import <Foundation/Foundation.h> @interface KIFTypist : NSObject
Add first line #import
KIF is originally static library so, you need to change for it.
KIF/Classes/Actors/KIFUITestActor-ConditionalTests.h
#import "KIF.h"
Original code is
Source compile should be fine. Let’s start Test.
With Unit Test
Key point is touch, wait, …
As example, write small
To find UI and touch, accessibilityLabel is useful for KIF.
accessibilityLabel is name we can add to UI.
accessibilityLabel
In Interfacebuilder, you can add it as property.
In code
UIButton *button = [UIButton alloc] init]; button.accessibilityLabel = @"button1";
button1 is label.
Test Sample
This is sample
#import <UIKit/UIKit.h> #import <XCTest/XCTest.h> #import "KIF.h" @interface KIFSample_Tests : KIFTestCase @end @implementation KIFSample_Tests - (void)testClick { [tester tapScreenAtPoint:CGPointMake(20, 20)]; // Touch left-top point [tester tapViewWithAccessibilityLabel:@"buttonA"]; // buttonA label } @end
This is simple test example. tester is macro in KIF.h
Only tap left top position.
We can use XCTAssert series.
API
There are some useful methods
Touch
We can find touch place point or accessibilityLabel
[tester tapScreenAtPoint:CGPointMake(20, 20)]; [tester tapViewWithAccessibilityLabel:@"buttonA"];
The point is calculated in methods. Please look at source codes.
Wait
Only wait(s)
[tester waitForTimeInterval:3];
Wait until UI item disappear using accessibilityLabel
[tester waitForAbsenceOfViewWithAccessibilityLabel:@"buttonA"];
enterText
Fill textfield
[tester enterText:@"jookoon" intoViewWithAccessibilityLabel:@"username"];
How to get current UIViewController
UIViewController *currentController = [UIApplication sharedApplication].keyWindow.rootViewController.presentedViewController;