无法在横向模式下点击(x,y)坐标

时间:2016-11-12 00:52:54

标签: swift3 xcode8 ios-ui-automation xcode-ui-testing

在Xcode 8 / Swift 3中,使用坐标(withNormalizedOffset:CGVector)与XCUIElement交互似乎只能在纵向模式下工作。

为了测试这个功能,我创建了一个单个屏幕项目,其中一个按钮位于视图中心。然后我运行了以下UI测试:

func testExample() {

    XCUIDevice.shared().orientation = .portrait

    let window = XCUIApplication().windows.element(boundBy: 0)

    let centerPoint = window.coordinate(withNormalizedOffset: CGVector(dx: 0.5, dy: 0.5))

    centerPoint.tap()
}

这成功点击按钮。但是,如果我在landscapeLeft或landscapeRight中运行相同的测试,则不会点按该按钮。打印坐标的屏幕点显示它在纵向和横向模式下都位于按钮的框架内。

Xcode 7 / Swift 2中所有方向的相同逻辑都是成功的:

func testExample() {

    XCUIDevice.sharedDevice().orientation = .LandscapeLeft

    let window = XCUIApplication().windows.elementBoundByIndex(0)

    let centerPoint = window.coordinateWithNormalizedOffset(CGVectorMake(0.5, 0.5))

    centerPoint.tap()
}

我错过了什么,或者这是一个合法的框架错误?它是否与从Swift 2中的CGVectorMake到Swift 3中的CGVector(dx:dy :)的转换有关?

2 个答案:

答案 0 :(得分:3)

同样的问题 - 屏幕点是正确的,但实际的手势坐标搞砸了。这个解决方法为我做了诀窍:

<form method="POST" enctype='multipart/form-data' action="upload.cgi">

 <input type=file name=upload>
 <input type=submit name=press value="OK">
</form>

已知问题:不适用于您的应用不支持的方向。

答案 1 :(得分:0)

优秀的答案。 我有一个相同的坐标问题测试[Xcode 8 Swift 3] SpriteKit横向模式应用程序,我最初错误地记录到SpriteKit。 SmartXCUICoordinate让我重回正轨。

我在你的评论下添加了两种方法     //根据需要包装其他XCUICoordinate方法

//support UILongPressGestureRecognizer
func longPress(){
    realCoordinate.press(forDuration: 2.25)
}
//support drag an element to a second element
//For SpriteKit this drags one SKNode to a second SKNode)
func pressThenDragTo(element:  XCUIElement){
    realCoordinate.press(forDuration: 0.1, thenDragTo: element.smartCoordinate(withNormalizedOffset: CGVector(dx: 0.5, dy: 0.5)).realCoordinate)
}