如何在 Xcode 9 中拖放元素以进行 xcode-ui-testing
How to drag and drop an element for xcode-ui-testing in Xcode 9
UI 测试 ios-app,开发于 Xcode 8 和 swift 3.2.
我在升级 Xcode 版本 8 到 9
后遇到拖放问题
我想将一个元素 [i.e. button]
拖放到另一个元素 [i.e. on homepage]
。
对于Xcode 8,我使用以下方法实现它:
let sourceElement = app.buttons["Video_Button"]
let destElement = app.scrollViews.scrollViews.images.element(boundBy: 0)
sourceElement.press(forDuration: 0.5, thenDragTo: destElement)
但是上面的代码在 Xcode 9 和 Swift 3.2 中不起作用。
实际上问题在 iOS 11.0.
在 iOS 11.0 中,一些分层元素无法 tap 或 press 或 longpress.
您必须使用元素中心点才能执行 tap 或 press 或 longpress.
** 问题的解决方案的代码片段粘贴在下面。
首先创建一个扩展方法,用于按下元素的中心并将该元素拖动到目标元素中心。
扩展方法如下
extension XCUIElement {
func dragAndDropUsingCenterPos(forDuration duration: TimeInterval,
thenDragTo destElement: XCUIElement) {
let sourceCoordinate: XCUICoordinate = self.coordinate(withNormalizedOffset: CGVector(dx:0.5, dy:0.5))
let destCorodinate: XCUICoordinate = destElement.coordinate(withNormalizedOffset: CGVector(dx:0.5, dy:0.5))
sourceCoordinate.press(forDuration: duration, thenDragTo: destCorodinate)
}
}
然后像下面这样调用扩展方法
sourceElement.dragAndDropUsingCenterPos(forDuration: 0.5, thenDragTo: destElement)
希望它能解决您的问题。让我知道您的反馈。
UI 测试 ios-app,开发于 Xcode 8 和 swift 3.2.
我在升级 Xcode 版本 8 到 9
后遇到拖放问题我想将一个元素 [i.e. button]
拖放到另一个元素 [i.e. on homepage]
。
对于Xcode 8,我使用以下方法实现它:
let sourceElement = app.buttons["Video_Button"]
let destElement = app.scrollViews.scrollViews.images.element(boundBy: 0)
sourceElement.press(forDuration: 0.5, thenDragTo: destElement)
但是上面的代码在 Xcode 9 和 Swift 3.2 中不起作用。
实际上问题在 iOS 11.0.
在 iOS 11.0 中,一些分层元素无法 tap 或 press 或 longpress.
您必须使用元素中心点才能执行 tap 或 press 或 longpress.
** 问题的解决方案的代码片段粘贴在下面。
首先创建一个扩展方法,用于按下元素的中心并将该元素拖动到目标元素中心。
扩展方法如下
extension XCUIElement {
func dragAndDropUsingCenterPos(forDuration duration: TimeInterval,
thenDragTo destElement: XCUIElement) {
let sourceCoordinate: XCUICoordinate = self.coordinate(withNormalizedOffset: CGVector(dx:0.5, dy:0.5))
let destCorodinate: XCUICoordinate = destElement.coordinate(withNormalizedOffset: CGVector(dx:0.5, dy:0.5))
sourceCoordinate.press(forDuration: duration, thenDragTo: destCorodinate)
}
}
然后像下面这样调用扩展方法
sourceElement.dragAndDropUsingCenterPos(forDuration: 0.5, thenDragTo: destElement)
希望它能解决您的问题。让我知道您的反馈。