티스토리 뷰

반응형

 

안녕하세요 :) Zedd입니다.

원래 오늘 UI Test에서의 Assertion에 대해서 공부하려고 했는데..

그 전에 알아두면 좋을 개념들이 있어서 이거 먼저 보려고 합니다.

 

오늘은 XCUIApplication, XCUIElement 그리고 XCUIElementQuery에 대해서 공부해봅시다.

UI Testing API에는 크게 3가지가 있는데요.

  • XCUIApplication

  • XCUIElement

  • XCUIElementQuery

가 있습니다.

 

XCUIApplication


 

XCUIApplication은 저번글에서도 말했지만 앱을 실행 및 종료할 수 있는 앱의 "프록시"입니다.

Launch는 "항상"새로운 프로세스를 생성하며 기존 인스턴스를 암시적으로 종료합니다.

 

 

XCUIElement


XCUIElement는 뭔가 Element니까 느낌적인 느낌으로 UI Element같아요.

맞습니다. 앱의 UI element가 XCUIElement타입입니다. 

XCUIApplication의 표현을 빌리자면, 앱 안의 UI element에 대한 프록시입니다.

우리가 썻던 코드중 일부를 보겠습니다.  

app이 XCUIApplication이고, textField가 XCUIElement타입입니다.

 

 

XCUIElementQuery


XCUIElementQuery는 그냥 말그대로 UI element를 찾기위한 쿼리입니다.

 

그럼 여기서 XCUIElementQuery는 뭘까요? 

 

app안에서 UI Element를 찾기위한 쿼리잖아요!?

그러니까 저 textFields가 XCUIElementQuery입니다.

XCUIElementQuery는 엄~~~~~~~~~~청나게 많아요.

 

 

이정도!?

 

그럼 우리의 예제앱에서 XCUIElement를 찾아봅시다.

일단 크게 UITableView와 UITextField 그리고 우상단의 Button이 있네요.

또! UITableView안의 cell들도 XCUIElement라고 볼 수 있습니다.

 

그럼 UITableView와 cell들을 가져와보겠습니다. 

이렇게! 

 

이렇게하면 table과 cell이 XCUIElement일까요!? 

 

아닙니다!

table과 cell은 여전히 XCUIElementQuery타입이에요.

위 코드는 현재 View안의 table과 cell을 전부 가져오는 코드입니다.

근데 난 특정한 View..

그러니까 유니크한 하나의 View를 가지고 상호작용 할 것이기 때문에 더 명확하게 쿼리를 줘야합니다.

잘 이해가 안가시죠!!!! 예를 하나 들어볼게요.

 

제가 TextField를 2개로 만들어줬습니다.

자..이렇게 하면 현재 화면 안에 있는 textfield를 전부 가져오는 것이기 때문에

textField.count를 해보면 2가 나오게 됩니다.

2개의 textfield에 동시에 칠 순 없잖아요!?

저는 action을 줄 유니크한 textfield하나를 가져와야합니다.

다양한 방법이 있는데 가장 간편한 것이 subscript를 통해 가져오는 것 입니다. 

이렇게요! 이거말고 다른 방법도 있는데,

가장 중요한건

Accessibility label(또는 Accessibility identifier)로 UI Element를 식별한다!!!!

만 기억하시면 됩니다. 

UI Test에서의 코어 기술은 

XCTest프레임워크와 Accessibility의 조합...이거든요!!

 

스토리보드로 가봅시다.

이렇게 Accessibility label(또는 Accessibility identifier도 가능)을 지정해주고

해당 String으로 접근을 하면 됩니다. 

그래서 이런 코드가 나오게 된거죠. 

여기서 한가지 정말!! 중요한 사실은 UITesting에서 UI Element는 유니크해야한다는 사실입니다.

 

만약 현재 View에 해당 Accessibility label(또는 Accessibility identifier)을 가진 요소가 없다거나,

 

같은 Accessibility label(또는 Accessibility identifier)를 가지고 있는 요소가 있다면

첫번쨰 texfield의 Accessibility label도 "textField"임

테스트는 실패하게 됩니다.

해당 Accessibility label(또는 Accessibility identifier)를 가진 UI Element는 반드시 하나여야합니다. 

ㅇㅋ???

참고로 

다 똑같은 textField를 가져오게 되는 코드들입니다. 

 


자꾸 Accessibility label(또는 Accessibility identifier).. 이러는데 

UITest에서는 Accessibility identifier를 사용하셔야 합니다.

이유는 아래 글을 참고해주세요.

zeddios.tistory.com/1094

 

accessibilityLabel / accessibilityIdentifier

안녕하세요 :) Zedd입니다. 제가 이 글에서 이렇게 말했었는데요. 네 맞는 말입니다! UITest에서는 유니크한 accessibilityLabel 또는 accessibilityIdentifier로 UI Element를 가져올 수 있어요. 그러면 access..

zeddios.tistory.com


 

XCUIApplication, XCUIElement 그리고 XCUIElementQuery를 공부해봤는데요, 

크게 어려운 내용은 없었죠!? 

이제 이거 알면 끝난거임 ㅋ

다음 글에서는 진짜로 Assertion해볼게요!

반응형

'공부' 카테고리의 다른 글

@testable import에 대한 고찰  (4) 2020.07.28
Clean Architecture  (5) 2020.07.17
UITest (2) - Recording UI Test  (1) 2020.07.08
UITest (1) - UITest란?  (0) 2020.07.06
Xcode Source Control  (3) 2020.07.03