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 运行才能看到截图

如何识别 XCUITest 在 xcode 中运行时抛出的一些随机寡妇

Xcode XCUITest XCUICoordinate 不适用于按下和/或拖动