1、KIFはじめに
KIFは、機能的な、それを維持するために立っています。UI操作を再利用するために、ターゲットの特定、独自のAPI -それは、アクセシビリティによって制御するためのテストフレームXCTestに基づいてUIです。それはXCTest上に構築されているので、あなたができるように完璧なテストは、コマンドラインスクリプトを含むXCodeのツールを(意味
必須KIFフレームワークは、アクセシビリティをサポートするために、あなたのコードを使用します。以前に接触していない場合は、Appleのドキュメントを見てとることができiOS用のアクセシビリティプログラミングガイドを。
簡単に言えば、アクセシビリティ視覚障害の人があなたのアプリケーションを使用することができます。各コントロールは、記述AccessibilityLabelを持っています。VoiceOverのをオンにすると、あなたはコントロールが対応する説明を聞い選択してクリックすることができます。典型的には、制御コードによって自己定義またはストーリーボードを設定して、支持体のアクセスを制御するのUIKit。
2、KIF使用
1)cocopod導入KIFフレーム
pod 'KIF', '~> 3.0'
2)インポートで作成したUIテストファイルでは、テストクラスはにクラスを継承し KIFTestCase
import KIF
3)プロジェクトで構成されています
(1)“Build Phases”:
设置 Target Dependencies , UI 自动化测试固然要依赖应用程序的 App 产物,所以需保证应用程序 Target 被添加在 Test Target 的 Target Dependencies 中。
(2)“Build Settings”:
设置 “Bundle loader” 为:$(BUILT_PRODUCTS_DIR)/MyApp.app/MyApp;
设置 “Test Host” 为:$(BUILT_PRODUCTS_DIR); 设置 “Wrapper Extensions” 为:xctest。
4)AccessibilityLabel属性設定制御
3つの構成があります。
(1)は、実行時属性(KVC)によって提供されます
(2)GUIによって設定され、選択制御を、図に示す位置を見つけるために、特性を満たすAccessibilityLabel
(3)コードによって設定されました
kifBtn.accessibilityLabel = "KIF"
5)特定用途
(1)KIF OCを書き込む場合、スイフトを直接参照(マクロによって定義された)鍵方式テスター、システムを使用することができないのGitHubにREADMEを、拡張することによって達成
UIのテストファイルに書き込み
extension XCTestCase {
func tester(file : String = #file,_ line : Int = #line)->KIFUITestActor{
return KIFUITestActor(inFile: file, atLine: line, delegate: self)
}
func system(file : String = #file,_ line : Int = #line)->KIFSystemTestActor{
return KIFSystemTestActor(inFile: file, atLine: line, delegate: self)
}
}
(2)KIF使用
ステップ:
点击button按钮-->跳转至登录界面-->输入用户名、密码,点击login-->跳转至tab导航界面,切换不同tab的操作流程
class LoginTestCase: KIFTestCase {
/// 所有测试进行前调用,可以做一些必要或者共有的初始化操作
override func beforeAll() {
}
/// 测试点击登陆后进入其他View
func test00Login() {
tester().tapView(withAccessibilityLabel: "button")
tester().waitForView(withAccessibilityLabel: "login")
let nameTextField = tester().waitForView(withAccessibilityLabel: "UserName") as! UITextField
let pwdTextField = tester().waitForView(withAccessibilityLabel: "Password") as! UITextField
tester().enterText("User", intoViewWithAccessibilityLabel: "UserName")
tester().enterText("123456", intoViewWithAccessibilityLabel: "Password")
// 点击
tester().tapView(withAccessibilityLabel: "login")
XCTAssertTrue(!nameTextField.text!.isEmpty, "User name can't be nil")
XCTAssertTrue(!pwdTextField.text!.isEmpty, "Password can't be nil")
// 等待某个View出现,也可以通过该函数得到该View的实例
tester().waitForView(withAccessibilityLabel: "Scene1")
}
/// 测试切换不同的View
func test01TabButtons() {
tester().tapView(withAccessibilityLabel: "Tab2")
tester().waitForView(withAccessibilityLabel: "Scene2")
tester().tapView(withAccessibilityLabel: "Tab3")
tester().waitForView(withAccessibilityLabel: "Scene3")
}
/// 测试输入
func test02Input() {
tester().tapView(withAccessibilityLabel: "Tab1")
tester().waitForView(withAccessibilityLabel: "InputTextField")
// 输入文字
tester().enterText("Hello KIF", intoViewWithAccessibilityLabel: "InputTextField")
// TODO: 如何确定键盘弹出的done按钮的accessibilityLabel?
tester().tapView(withAccessibilityLabel: "Scene1View")
// 得到View实例
let textfield = tester().waitForView(withAccessibilityLabel: "InputTextField") as! UITextField
// 判断是否相等
XCTAssertEqual(textfield.text, "Hello KIF")
// 清除当前文字重新输入新的
tester().clearText(fromAndThenEnterText: "Test Geometry", intoViewWithAccessibilityLabel: "InputTextField")
tester().tapView(withAccessibilityLabel: "Scene1View")
}
/// 有的时候无法确定accessibilityLabel或者是自定义的空间没有accessibilityLabel,可以使用Geometry计算位置进行
func test03Geometry() {
tester().wait(forTimeInterval: 2)
let stepper = tester().waitForView(withAccessibilityLabel: "stepper") as! UIStepper
let stepCenter = stepper.window?.convert(stepper.center, from: stepper.superview)
// 算出-和+的位置
var minusButton = stepCenter
minusButton?.x -= stepper.frame.width / 4
var plusButton = stepCenter
plusButton?.x += stepper.frame.width / 4
for _ in 0 ..< 10 {
tester().wait(forTimeInterval: 1)
tester().tapScreen(at: minusButton!)
}
// 延时1秒
tester().wait(forTimeInterval: 1)
tester().tapScreen(at: plusButton!)
tester().wait(forTimeInterval: 1)
tester().tapScreen(at: plusButton!)
tester().wait(forTimeInterval: 1)
// 设置超时时间(默认为10秒)
KIFUITestActor.setDefaultTimeout(60)
tester().tapView(withAccessibilityLabel: "Tab2")
KIFUITestActor.setDefaultTimeout(10)
}
}
参考地址: