Upgrade to Pro — share decks privately, control downloads, hide ads and more …

XCUITest by PageObjectPattern

Avatar for lcr3 lcr3
October 30, 2020

XCUITest by PageObjectPattern

社内向け勉強会資料
煩雑になっていらUIXCTestをPageObjectPatternに沿ってリファクタしたお話

Avatar for lcr3

lcr3

October 30, 2020

More Decks by lcr3

Other Decks in Programming

Transcript

  1. // 1-2 ίϯλΫτIDͱύεϫʔυΛೖྗͯ͠ϩάΠϯͰ͖Δ func testLogin() { let loginIDField = app.textFields["ϩάΠϯID"]

    let passwordField = app.secureTextFields["ύεϫʔυ"] let defaultLoginIDPlaceholder = "ϩάΠϯID" let defaultPasswordPlaceholder = "ύεϫʔυ" let inputLoginId = "999000000000" let inputPassword = “password" let deleteButtonLabel = "ςΩετΛফڈ" let loginButtonLabel = "ϩάΠϯ" let contactlistViewControllerTitleLabel = "SelfNameLabel" loginIDField.tap() // ϩάΠϯCIDςΩετϑΟʔϧυΛλοϓ if let loginId = loginIDField.value as? String, loginId != defaultLoginIDPlaceholder { app.buttons[deleteButtonLabel].tap() // ͢ͰʹೖྗࡁΈͷ৔߹࡟আ͢Δ } loginIDField.typeText(inputLoginId) // ϩάΠϯCIDΛೖྗ passwordField.tap() // ύεϫʔυςΩετϑΟʔϧυΛλοϓ͢Δ if let password = passwordField.value as? String, password != defaultPasswordPlaceholder { app.buttons[deleteButtonLabel].tap() // ͢ͰʹೖྗࡁΈͷ৔߹࡟আ͢Δ } passwordField.typeText(inputPassword) // ύεϫʔυΛೖྗ app.buttons[loginButtonLabel].tap() // ϩάΠϯϘλϯΛλοϓ XCTAssert(app.staticTexts[contactlistViewControllerTitleLabel].exists) } ݱঢ়ͷςετίʔυ ςετͷ४උ ૢ࡞ ݕূ
  2. PageObjectPatter Λద༻ // 1-2 ίϯλΫτIDͱύεϫʔυΛೖྗͯ͠ϩάΠϯͰ͖Δ func testLogin() { // setup

    let inputCid = "999000000000" let inputPassword = "password" // execute let contactList = LoginPage(app: app) .typeCid(inputCid) .typePassword(inputPassword) .tapLoginButton() // verify XCTxContext("ϩάΠϯ͕੒ޭ͠ɺൃ৴ը໘͕දࣔ͞Ε͍ͯΔ͜ͱ") { XCTAssertEqual(contactList.selfCidText, inputCid) } } ςετͷ४උ ૢ࡞ ݕূ
  3. protocol Page { var app: XCUIApplication { get } init(app:

    XCUIApplication) } class LoginPage: Page { let app: XCUIApplication required init(app: XCUIApplication) { self.app = app } } ४ڌ
  4. class LoginPage: Page { // … private var cidTextField: XCUIElement

    { return app.textFields["LoginIdTextField"] } private var passwordTextField: XCUIElement { return app.secureTextFields["PasswordTextField"] } private var loginButton: XCUIElement { return app.buttons["LoginButton"] } private var deleteButton: XCUIElement { return app.buttons["ςΩετΛফڈ"] } } ࢀর࣌ʹຖճཁૉΛ୳͢Α͏ʹ͢ΔͨΊɺܭࢉܕͷϓϩύςΟͱͯ͠΋ͭ Pageͷཁૉ
  5. Pageͷϝιου class LoginPage: Page { // … func typeCid(_ inputCid:

    String) -> LoginPage { cidTextField.tap() cidTextField.typeText(inputCid) return self } func typePassword(_ inputPassword: String) -> LoginPage { passwordTextField.tap() passwordTextField.typeText(inputPassword) return self } func tapLoginButton() -> ContactListPage { loginButton.tap() return ContactListPage() } }