如何在 Xcode UI 测试脚本中执行点击和拖动?

Posted

技术标签:

【中文标题】如何在 Xcode UI 测试脚本中执行点击和拖动?【英文标题】:How do I perform a tap and drag in Xcode UI Test scripts? 【发布时间】:2015-12-08 19:44:54 【问题描述】:

例如, 我有一个草图板应用程序,我想通过在上面绘图来测试它。我想指定一个(x,y)坐标并使其点击并拖动到另一个(x,y)坐标。

这在 Xcode UI 测试中可行吗?

Joe 为这个问题提供了一个解决方案: 使用 Objective C,我的代码看起来像这样:

XCUICoordinate *start = [element2 coordinateWithNormalizedOffset:CGVectorMake(0, 0)];
XCUICoordinate *finish = [element2 coordinateWithNormalizedOffset:CGVectorMake(0.5, 0.5)];
[start pressForDuration:0 thenDragToCoordinate:finish];

element2 是我必须执行拖动的 XCUIElement。

【问题讨论】:

【参考方案1】:

您可以使用XCUICoordinate 在 UI 测试中点击和拖动元素。这是how to pull to refresh 通过表格单元格坐标的示例。

let firstCell = app.staticTexts["Adrienne"]
let start = firstCell.coordinateWithNormalizedOffset(CGVectorMake(0, 0))
let finish = firstCell.coordinateWithNormalizedOffset(CGVectorMake(0, 6))
start.pressForDuration(0, thenDragToCoordinate: finish)

如果您没有要引用的元素,您应该能够根据XCUIApplication 创建任意坐标。

let app = XCUIApplication()
let fromCoordinate = app.coordinateWithNormalizedOffset(CGVector(dx: 0, dy: 10))
let toCoordinate = app.coordinateWithNormalizedOffset(CGVector(dx: 0, dy: 20))
fromCoordinate.pressForDuration(0, thenDragToCoordinate: toCoordinate)

UI 测试没有官方文档,但如果您有兴趣了解更多详细信息,我已经删除了标题并将XCTest Reference 放在一起。

【讨论】:

谢谢乔!像魅力一样工作!我唯一遇到的问题是试图找到执行操作的元素。【参考方案2】:

或从 Swift 4 开始:

let view = window.staticTexts["FooBar"]
let start = view.coordinate(withNormalizedOffset: CGVector(dx: 10, dy: 20))
let finish = view.coordinate(withNormalizedOffset: CGVector(dx: 100, dy: 80))
start.press(forDuration: 0.01, thenDragTo: finish)

【讨论】:

以上是关于如何在 Xcode UI 测试脚本中执行点击和拖动?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Xcode10 Ui 测试中点击标签的特定单词?

Xcode UI 测试 - 如何在 WebView 中查找和点击()元素

无法在 Xcode UI 测试中点击 UIBarButtonItem

如何在不使用坐标方法的情况下在 XCode UI 测试中点击字符串语句的特定部分/单词

Xcode 7 中的特定 UI 测试

XCode 不会通过控制点击来绑定 nib 和源头文件