Xcode XCUITest XCUICoordinate 不适用于按下和/或拖动
Posted
技术标签:
【中文标题】Xcode XCUITest XCUICoordinate 不适用于按下和/或拖动【英文标题】:Xcode XCUITest XCUICoordinate not working with press and/or drag 【发布时间】:2018-07-05 12:59:16 【问题描述】:我正在运行 Xcode 9.4.1 并尝试使用 XCUICoordinates 执行长按和按下和拖动功能。我的两种方法在 XCUIElements 上都可以正常工作,但是在针对 XCUICoordinates 运行时都失败了。
比如下面的代码
let app = XCUIApplication()
let pointOfInterest = app.buttons["PointOfInterest1"]
let coordinates: XCUICoordinate = app.coordinate(withNormalizedOffset: CGVector(dx: pointOfInterest.frame.origin.x, dy: pointOfInterest.frame.origin.y))
// This does nothing:
coordinates.press(forDuration: 3)
// This selects the points of interest:
pointOfInterest.press(forDuration: 3)
当针对兴趣点 XCUIElement 调用 press() 方法时,一切正常并被选中。当针对同一兴趣点的 XCUICoordinate 调用 press() 方法时,没有任何反应。它无法选择它。
按下和拖动方法也会出现同样的不一致。
这是 Xcode 的 XCUITest 中的一个已知错误,还是我创建的坐标不正确?
【问题讨论】:
【参考方案1】:原来您需要先将 0、0 点设置为变量(“标准化”),然后调用相对于该点的坐标。所以工作代码如下所示:
let app = XCUIApplication()
let pointOfInterest = app.buttons["PointOfInterest1"]
let normalized = app.coordinate(withNormalizedOffset: CGVector(dx: 0, dy: 0))
let coordinates: XCUICoordinate = normalized.coordinate(withNormalizedOffset: CGVector(dx: pointOfInterest.frame.origin.x, dy: pointOfInterest.frame.origin.y))
// This now works:
coordinates.press(forDuration: 3)
// This selects the points of interest:
pointOfInterest.press(forDuration: 3)
【讨论】:
当normalized.coordinate
给出编译错误时,这怎么是正确答案?以上是关于Xcode XCUITest XCUICoordinate 不适用于按下和/或拖动的主要内容,如果未能解决你的问题,请参考以下文章
为啥 XCUITest 在 Xcode 11.4.1 中捕获的流失败
如何从 XCUITest(来自 Xcode 11)中的 xcresult 文件中提取详细信息?
更新到 Xcode 10 后 XCUITest 的测试目标似乎不起作用
如何在 Jenkins 中将屏幕截图附加到 XCUITest 报告。只有通过 XCODE 运行才能看到截图