Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
Tags
- Swift
- UIKit
- Xcode
- displayscale
- 이진삽입정렬
- cgimage
- SPM
- xcrun swift-demangle
- WWDC24
- Architecture
- ios바이너리분석
- mainrunloop
- swiftconcurrency
- updatecycle
- 뷰를그리는메서드
- swift6.1
- uicollectionview
- mangle
- swift-demangle
- task
- 다이나믹링크분석
- XCUITest
- applaucnchprocess
- 뷰의레이아웃을계산하는메서드
- mach-o파일분석
- actor
- modulararchitecture
- swift6
- IOS
- ciimage
Archives
- Today
- Total
꾸준한 기록
UITest 사용 메서드 본문
1️⃣ app.coordinate(withNormalizedOffset:) 의 역할
XCUIApplication 혹은 XCUIElement 객체에서 이 메서드는 해당 요소의 상대적 좌표계를 기준으로 한 터치 지점(XCUICoordinate)을 반환합니다.
즉, 화면에서 특정 위치를 정확히 지정해 터치나 드래그를 수행할 때 사용합니다.
let element = app.otherElements["canvas"]
let start = element.coordinate(withNormalizedOffset: CGVector(dx: 0.1, dy: 0.5))
let end = element.coordinate(withNormalizedOffset: CGVector(dx: 0.9, dy: 0.5))
start.press(forDuration: 0.1, thenDragTo: end)
위 코드는 element 내부의 왼쪽 10% 지점에서 오른쪽 90% 지점까지 드래그하는 동작을 수행합니다.
즉, normalized offset (정규화된 오프셋) 을 이용해 위치를 비율로 지정합니다.
2️⃣ CGVector(dx:, dy:) 의 의미
CGVector는 2D 벡터로, dx, dy는 각각 x축과 y축의 이동량(또는 비율) 을 나타냅니다.
UITest의 withNormalizedOffset:에서는 이 값이 비율로 해석됩니다.
- dx = 0 → 왼쪽 끝
- dx = 1 → 오른쪽 끝
- dy = 0 → 위쪽 끝
- dy = 1 → 아래쪽 끝
예를 들어:
CGVector(dx: 0.5, dy: 0.5)
➡️ 요소의 정중앙
CGVector(dx: 0, dy: 0)
➡️ 요소의 왼쪽 상단
CGVector(dx: 1, dy: 1)
➡️ 요소의 오른쪽 하단
3️⃣ 실제 좌표(XCUICoordinate)의 변환 원리
withNormalizedOffset:은 내부적으로 다음 과정을 거칩니다.
- 해당 요소의 프레임(rect) 을 가져옵니다.
- dx, dy를 곱해 해당 프레임 내부의 절대 위치(x, y) 를 계산합니다.
- 이 좌표를 XCUICoordinate 객체로 반환합니다.
- 반환된 객체로 tap(), press(forDuration:), drag(to:) 등 액션을 수행합니다.
즉, UITest에서 tap() 이 인식되지 않거나 위치가 어긋날 때, 이 방식으로 정밀 제어가 가능합니다.
🔍 요약
항목설명
| app.coordinate(withNormalizedOffset:) | 앱 또는 요소의 상대 좌표(비율)로 좌표 객체 생성 |
| CGVector(dx:, dy:) | x, y 방향의 비율 (0.0~1.0) |
| 반환값 | XCUICoordinate (터치/드래그 등 수행 가능) |
| 사용 목적 | 정밀한 터치, 스와이프, 드래그 동작 구현 |
'iOS' 카테고리의 다른 글
| SPM에서 모듈과 함께 리소스 배포 설정 (0) | 2025.04.18 |
|---|---|
| UIScrollView와 UICollectionViewLayout의 contentSize 차이 (0) | 2025.04.16 |
| Display Scale과 이미지 pixel 과의 관계 (0) | 2024.09.25 |
| 바이너리 분석시 사용하는 command - otool, ns, dyld_info (0) | 2024.09.23 |
| CIImage와 CGImage 차이 (0) | 2024.09.19 |