如何在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))

 

posted @ 2021-02-08 21:09  Teapot-  阅读(339)  评论(0编辑  收藏  举报