目錄:[Swift]Xcode實際操做html
本文將演示UI Testing系統界面測試功能的使用。swift
若是項目中還沒有引入界面測試功能,請點擊項目屬性面板->【General】面板左下角的【+】圖標app
->Test模板區域,選擇【iOS UI Testing Bundle】->【Next】->保持默認設置【Finish】ide
查看【DemoAppUITests】文件夾下的內容。post
打開界面測試代碼文件【DemoAppUITests.swift】測試
在【override func tearDown() 】測試案例方法的內部點擊,進入該方法。ui
接着點擊左下角的記錄按鈕,將自動打開模擬器,並開始記錄在界面中的各項操做。this
點擊第一個Add 按鈕,添加一個新的視圖,此時在模擬器背後的代碼文件中,已經記錄下剛剛點擊的操做。spa
繼續點擊第二個Switch按鈕,調整兩個視圖的層次關係,code
點擊第三個Remove按鈕,刪除紫色的視圖,
接着依次點擊三個按鈕,重複以前的動做,如今已經記錄下了六個交互操做。
再次點擊左下角的結束記錄按鈕,返回界面測試的代碼文件。
上文的六次點擊操做,都依次被記錄下來,當以後須要重複剛剛的測試步驟時,
只需點擊方法名稱左側的菱形按鈕,便可播放測試記錄。
當模擬器打開後,自動重複執行剛剛的六個測試步驟。
1 import XCTest 2 3 class DemoAppUITests: XCTestCase { 4 5 override func setUp() { 6 // Put setup code here. This method is called before the invocation of each test method in the class. 7 8 // In UI tests it is usually best to stop immediately when a failure occurs. 9 continueAfterFailure = false 10 11 // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method. 12 XCUIApplication().launch() 13 14 // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. 15 } 16 17 override func tearDown() { 18 // Put teardown code here. This method is called after the invocation of each test method in the class. 19 //在測試案例方法的內部點擊,進入該方法。 20 } 21 22 func testExample() { 23 // Use recording to get started writing UI tests. 24 // Use XCTAssert and related functions to verify your tests produce the correct results. 25 //上文的六次點擊操做,都依次被記錄下來, 26 //當以後須要重複剛剛的測試步驟時, 27 //只需點擊方法名稱左側的菱形按鈕, 28 //便可播放測試記錄。 29 let app = XCUIApplication() 30 31 //點擊第一個Add 按鈕,添加一個新的視圖 32 let addButton = app.buttons["Add"] 33 addButton.tap() 34 35 //繼續點擊第二個Switch按鈕,調整兩個視圖的層次關係, 36 let switchButton = app.buttons["Switch"] 37 switchButton.tap() 38 39 //點擊第三個Remove按鈕,刪除紫色的視圖 40 let removeButton = app.buttons["Remove"] 41 removeButton.tap() 42 43 //接着依次點擊三個按鈕,重複以前的動做 44 addButton.tap() 45 switchButton.tap() 46 removeButton.tap() 47 } 48 }
視圖控制器的代碼文件【ViewController.swift】
1 import UIKit 2 3 class ViewController: UIViewController { 4 5 override func viewDidLoad() { 6 super.viewDidLoad() 7 // Do any additional setup after loading the view, typically from a nib. 8 //建立一個原點在(30,50),尺寸爲(200,200)的矩形常量,做爲視圖的顯示區域 9 let rect = CGRect(x: 30, y: 50, width: 200, height: 200) 10 //建立一個相應的UIView視圖 11 let view = UIView(frame: rect) 12 //設置視圖的背景顏色爲棕色 13 view.backgroundColor = UIColor.brown 14 //將視圖添加到當前視圖控制器的根視圖 15 self.view.addSubview(view) 16 17 //建立一個按鈕,當點擊此按鈕時,將動態添加另外一個視圖 18 let btAdd = UIButton(frame: CGRect(x: 30, y: 350, width: 80, height: 30)) 19 //設置按鈕的背景色爲灰色 20 btAdd.backgroundColor = UIColor.gray 21 //設置按鈕在正常狀態下的標題,其餘狀態還包括按鈕被按下等狀態 22 btAdd.setTitle("Add", for: UIControl.State()) 23 //給按鈕綁定點擊事件,這樣點擊按鈕時,將執行添加視圖方法 24 btAdd.addTarget(self, action: #selector(ViewController.addView(_:)), for: UIControl.Event.touchUpInside) 25 //將按鈕添加到當前視圖控制器的根視圖 26 self.view.addSubview(btAdd) 27 28 //一樣建立第二個按鈕,當點擊這個按鈕時,將切換根視圖中,兩個視圖的層次順序 29 let btBack = UIButton(frame: CGRect(x: 120, y: 350, width: 80, height: 30)) 30 //設置按鈕背景色爲灰色 31 btBack.backgroundColor = UIColor.gray 32 //設置按鈕在正常狀態下的標題文字 33 btBack.setTitle("Switch", for: UIControl.State()) 34 //給按鈕綁定點擊事件,當點擊按鈕時,交換兩個視圖的層次順序 35 btBack.addTarget(self, action: #selector(ViewController.bringViewBack(_:)), for: UIControl.Event.touchUpInside) 36 //將按鈕添加到當前視圖控制器的根視圖 37 self.view.addSubview(btBack) 38 39 //建立第三個按鈕,當點擊這個按鈕時,將從當前視圖控制器的根視圖中,刪除新添加的視圖 40 let btRemove = UIButton(frame: CGRect(x: 210, y: 350, width: 80, height: 30)) 41 //設置按鈕背景色爲灰色 42 btRemove.backgroundColor = UIColor.gray 43 //設置按鈕在正常狀態下的標題文字 44 btRemove.setTitle("Remove", for: UIControl.State()) 45 //而後給按鈕綁定點擊事件,當點擊按鈕時,執行刪除視圖的操做 46 btRemove.addTarget(self, action: #selector(ViewController.removeView(_:)), for: UIControl.Event.touchUpInside) 47 //將按鈕添加到當前視圖控制器的根視圖 48 self.view.addSubview(btRemove) 49 } 50 51 //建立第一個按鈕的點擊事件 52 @objc func addView(_ sender:UIButton!) 53 { 54 //建立一個原點在(60,90),尺寸爲(200,200)的矩形常量,做爲視圖的顯示區域 55 let rect = CGRect(x: 60, y: 90, width: 200, height: 200) 56 //建立一個相應的UIView視圖 57 let view = UIView(frame: rect) 58 //設置視圖的背景顏色爲紫色 59 view.backgroundColor = UIColor.purple 60 //給這個視圖指定一個標誌,這樣就能夠在之後須要的時候,經過標誌找到這個視圖 61 view.tag = 1 62 //添加到當前視圖控制器的根視圖 63 self.view.addSubview(view) 64 } 65 66 //建立第二個按鈕的點擊事件 67 @objc func bringViewBack(_ sender:UIButton!) 68 { 69 //首先經過給視圖對象設置的標誌值,找到新添加的視圖 70 let view = self.view.viewWithTag(1) 71 //將新添加的視圖,移到全部兄弟視圖的後方 72 self.view.sendSubviewToBack(view!) 73 } 74 75 //建立第三個按鈕的點擊事件 76 @objc func removeView(_ sender:UIButton!) 77 { 78 //經過給視圖對象設置的標誌值,找到新添加的視圖 79 let view = self.view.viewWithTag(1) 80 //將新添加的視圖刪除,也就是從當前視圖控制器的根視圖中刪除 81 view?.removeFromSuperview() 82 } 83 }