如何在XCUITest里使用坐标定位element
先定义点击函数tapCoordinate
extension XCUIApplication { func tapCoordinate(at point: CGPoint) { let normalized = coordinate(withNormalizedOffset: .zero) let offset = CGVector(dx: point.x, dy: point.y) let coordinate = normalized.withOffset(offset) coordinate.tap() } }
再写一个测试函数用于验证
func testClick(){ let app = XCUIApplication() app.launch() sleep(5) let point = CGPoint(x: 328.0, y: 392.0) app.tapCoordinate(at: point) }
使用coordinate函数直接定位使用的是CGVector,无法直接定位到页面上的点,需要使用CGPoint才能定位。需要注意的是,CGPoint的xy值的类型是CGFLoat,传Float进去是不生效的。需要强制类型转换把Float转成CGFloat
配合app.debugDescription获得的UI树使用
运行testClick()可以看到代码自动点击屏幕上对应的内容
在测试的时候发现,如果使用了swipeUp()方法上滑页面,再使用tapCoordinate()点击,页面会在给point变量赋值的时候跳回上滑前的页面
解决办法:不定义point,直接传值到tapCoordinate里,如下
app.tapCoordinate(at: CGPoint(x: 328.0, y: 392.0))