Xcode UI 测试 - 拖放

Posted

技术标签:

【中文标题】Xcode UI 测试 - 拖放【英文标题】:Xcode UI Testing - Drag and Drop 【发布时间】:2015-08-19 11:36:42 【问题描述】:

我正在尝试创建 XCTestCase 以在我的大纲视图中测试重新排序(在 OS X 应用程序中)。当我使用 UI 测试记录功能时,Xcode 会打印:

window.outlines.staticTexts["<cell which I want to move>"].click()

我尝试在大纲视图内部或外部拖动单元格,Xcode 生成相同的无用代码。

有人知道如何在 Xcode 7 中正确测试拖放吗?

【问题讨论】:

你试过public func pressForDuration(duration: NSTimeInterval, thenDragToElement otherElement: XCUIElement) @NickMcConnell 没有这样的方法。恐怕它只在 ios 上可用。 抱歉帮不上忙 【参考方案1】:

不确定这是否是新的,但在 Xcode 7.2 中,如果您查看 XCUIElement 的标头,则有一个适用于 OS X 的 clickForDuration(thenDragToElement:) 函数。似乎对我有用 NSOutlineView

这是来自标题...

/*!
 * Clicks and holds for a specified duration (generally long enough to start a drag operation) then drags
 * to the other element.
 */
public func clickForDuration(duration: NSTimeInterval, thenDragToElement otherElement: XCUIElement)

【讨论】:

像魅力一样工作,谢谢!之前没见过这个功能,可能是Xcode 7.2加入的 也适用于 Xcode 8/ Swift 3,但函数为:func press(forDuration duration: TimeInterval, thenDragTo otherElement: XCUIElement)。对于 Swift 2.3,它是 func pressForDuration(duration: TimeInterval, thenDragToElement otherElement: XCUIElement)【参考方案2】:

使用 Xcode 9.4.1 斯威夫特:

func press(forDuration duration: TimeInterval, thenDragTo otherElement: XCUIElement)

例子:

let ele: XCUIElement = XCUIApplication()!.otherElements.matching(identifier: "element_identifier").element(boundBy: 0)
ele.press(forDuration: <timeIntervalInSec>, thenDragTo: <destination_XCUIElement>)

参考:API Doc

【讨论】:

【参考方案3】:

同样的问题。没有解决方案。看起来可访问性不支持 d-n-d,Apple 文档说:Provide alternatives for drag-and-drop operations.

【讨论】:

【参考方案4】:

我唯一能建议的是尝试检查正在测试的代码的可访问性功能。 UI 测试需要有可访问性信息才能理解 UI 中发生的事情。请参阅视频中大约 39:30 的 Apple WWDC15 UI Testing video,了解如何解决 UI 录制无法正确生成代码的问题。

【讨论】:

以上是关于Xcode UI 测试 - 拖放的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 7 UI 测试与 Xcode Bot 的集成程度如何?它是不是显示 UI 测试步骤?

设置 UI 测试 Xcode 7 后单元测试永远不会运行

在 UI 测试期间,如何使用 Xcode 7 截取我的 UI 截图?

Xcode 7 UI 测试顺序

Xcode 8:UI 测试找不到正在测试的库

Xcode 中的批量 UI 测试