Skip to content

Performing UITest (E2E testing) on iOS (Swift5.0)OSでUITest(E2Eテスト)を行う(Swift5.0)

   

Then I implemented UITest for that app.

Reference: 【Swift】初めてのUITest導入

alt alt

import UIKit
class UITestSample_20190404: UIViewController {
var leftValueTextField: UITextField!
var rightValueTextField: UITextField!
var resultButton: UIButton!
var resultLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .white
let width = view.frame.width
leftValueTextField = UITextField()
leftValueTextField.accessibilityIdentifier = "leftValueTextField"
leftValueTextField.frame = CGRect(x: width * 0.05, y: 200, width: width * 0.4, height: 60)
leftValueTextField.layer.borderWidth = 1
leftValueTextField.addTarget(self, action: #selector(textFieldDidChange), for: .editingChanged)
leftValueTextField.textAlignment = .center
leftValueTextField.keyboardType = .numberPad
view.addSubview(leftValueTextField)
rightValueTextField = UITextField()
rightValueTextField.accessibilityIdentifier = "rightValueTextField"
rightValueTextField.frame = CGRect(x: width * 0.55, y: 200, width: width * 0.4, height: 60)
rightValueTextField.layer.borderWidth = 1
rightValueTextField.addTarget(self, action: #selector(textFieldDidChange), for: .editingChanged)
rightValueTextField.textAlignment = .center
rightValueTextField.keyboardType = .numberPad
view.addSubview(rightValueTextField)
resultButton = UIButton()
resultButton.accessibilityIdentifier = "resultButton"
resultButton.frame = CGRect(x: width * 0.2, y: 300, width: width * 0.6, height: 60)
resultButton.setTitle("=", for: .normal)
resultButton.setTitleColor(.black, for: .normal)
resultButton.titleLabel?.font = UIFont.boldSystemFont(ofSize: 38)
resultButton.isEnabled = false
resultButton.layer.borderWidth = 1
resultButton.addTarget(self, action: #selector(resultButtonOnTap), for: .touchDown)
view.addSubview(resultButton)
resultLabel = UILabel()
resultLabel.accessibilityIdentifier = "resultLabel"
resultLabel.frame = CGRect(x: width * 0.2, y: 400, width: width * 0.6, height: 60)
resultLabel.textAlignment = .center
view.addSubview(resultLabel)
}
@objc func textFieldDidChange() {
guard let leftText = leftValueTextField.text, let rightText = rightValueTextField.text else {
return
}
setResultButtonStatus(leftText: leftText, rightText: rightText)
}
@objc func resultButtonOnTap() {
guard let leftText = leftValueTextField.text, let rightText = rightValueTextField.text else {
return
}
guard let leftNumber = Float(leftText), let rightNumber = Float(rightText) else {
return
}
setResultLabel(leftNumber: leftNumber, rightNumber: rightNumber)
}
func setResultButtonStatus(leftText: String, rightText: String) {
if leftText.isEmpty || rightText.isEmpty {
resultButton.isEnabled = false
} else {
resultButton.isEnabled = true
}
}
func setResultLabel(leftNumber: Float, rightNumber: Float) {
resultLabel.text = String(format: "%.1f", leftNumber * rightNumber)
}
}
import XCTest
class UITestSample_20190404Tests: XCTestCase {
override func setUp() {
// Put setup code here. This method is called before the invocation of each test method in the class.
// In UI tests it is usually best to stop immediately when a failure occurs.
continueAfterFailure = false
// UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method.
XCUIApplication().launch()
// 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.
}
override func tearDown() {
// Put teardown code here. This method is called after the invocation of each test method in the class.
}
func testSampleListViewController_20190404() {
let app = XCUIApplication()
// 「Get 「=」 Button
let resultButton = app.buttons["resultButton"]
// 「=」 Button is disable
XCTAssertFalse(resultButton.isEnabled)
// Get LeftTestField
let leftValueTextField = app.textFields["leftValueTextField"]
// Focus LeftTestField
leftValueTextField.tap()
// Input 12
leftValueTextField.typeText("12")
// 「=」 Button is disable
XCTAssertFalse(resultButton.isEnabled)
// Get RightTestField
let rightValueTextField = app.textFields["rightValueTextField"]
// Focus RightTestField
rightValueTextField.tap()
// Input 4
rightValueTextField.typeText("4")
// 「=」 Button is enabled
XCTAssertTrue(resultButton.isEnabled)
// Tap 「=」 Button
app.buttons["resultButton"].tap()
let resultLabel = app.staticTexts["resultLabel"]
// Assert resultLabel.label = 48
XCTAssertEqual(resultLabel.label, "48.0")
}
}

  1. Switch RootViewController with animation (Swift4.2)
  2. Parse a local Json file and display it in table view (Swift4.2)
  3. Adopting UITest with Swift(Swift4.2)
  4. Display items in a table with UITableView(Swift4.2)
  5. Screen transition in NavigationController(Swift4.2)
  6. Switching the Root of NavigationController(Swift4.2)
  7. Selecting an image with ImagePickerController(Swift4.2)