• [Xcode 实际操作]七、文件与数据-(23)UI Testing系统界面测试功能的使用


    目录:[Swift]Xcode实际操作

    本文将演示UI Testing系统界面测试功能的使用。

    如果项目中尚未引入界面测试功能,请点击项目属性面板->【General】面板左下角的【+】图标

    ->Test模板区域,选择【iOS UI Testing Bundle】->【Next】->保持默认设置【Finish】

    查看【DemoAppUITests】文件夹下的内容。

    打开界面测试代码文件【DemoAppUITests.swift】

    在【override func tearDown() 】测试案例方法的内部点击,进入该方法。

    接着点击左下角的记录按钮,将自动打开模拟器,并开始记录在界面中的各项操作。

    点击第一个Add 按钮,添加一个新的视图,此时在模拟器背后的代码文件中,已经记录下刚刚点击的操作。

    继续点击第二个Switch按钮,调整两个视图的层次关系,

    点击第三个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,  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,  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,  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,  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,  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 }
  • 相关阅读:
    各个数字类型取值范围以及推理
    进制转换原理
    位运算操作符_
    读取文件内容
    java中thread的start()和run()的区别
    二进制的负数转换
    位运算符号
    Hadoop的辉煌还能延续多久?
    Hadoop 新 MapReduce 框架 Yarn 详解
    MapReduce工作原理讲解
  • 原文地址:https://www.cnblogs.com/strengthen/p/10054040.html
Copyright © 2020-2023  润新知