[Xcode 實際操做]7、文件與數據-(23)UI Testing系統界面測試功能的使用

目錄:[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 }
相關文章
相關標籤/搜索