如何使用Xcode UITests点击特定点

问题描述:

我想使用Xcode UI测试和Fastline Snapshot来制作Cordova应用程序的屏幕截图。基本上,由于我的整个应用程序只是一个Web视图,所有xcode UI测试帮助程序方法都变得无关紧要,我只想点击特定的点,例如tap(x: 10, y: 10)应在点{10px; 10px}处产生水龙头。如何使用Xcode UITests点击特定点

这可能很简单,但我不知道该怎么做。

谢谢。

您可以点击XCUICoordinate API的特定点。不幸的是,你不能只说“参考像素坐标”点击10,10。您需要使用相对于实际视图的相对偏移来创建坐标。

我们可以使用提到的网页视图与相对坐标进行交互。

let app = XCUIApplication() 
let webView = app.webViews.element 
let coordinate = webView.coordinateWithNormalizedOffset(CGVector(dx: 10, dy: 10)) 
coordinate.tap() 

侧面说明,但你有没有尝试直接与网络交互的看法?我使用app.links["Link title"].tap()app.staticTexts["A different link title"].tap()取得了很大的成功。 Here's a demo app I put together demonstrating interacting with a web view.


更新:作为米哈尔W.在评论中指出的那样,你现在可以点击坐标直接,无需担心归偏移。

let normalized = webView.coordinateWithNormalizedOffset(CGVector(dx: 0, dy: 0)) 
let coordinate = normalized.coordinateWithOffset(CGVector(dx: 10, dy: 10)) 
coordinate.tap() 

请注意,我将0,0传递给归一化的向量,然后将实际的点10,10传递给第二个调用。

+1

我不知道这是正确的,因为我需要添加 'coordinateWithOffset' 执行的x/y抽头: 让cooridnate = self.coordinateWithNormalizedOffset(CGVector(DX:0 ,dy:0))。coordinateWithOffset(CGVector(dx:position.x,dy:position.y)) cooridnate.tap() https://forums.developer.apple.com/thread/13373 –

+0

好主意!谢谢@MichałW。我注意到更新答案的评论已被接受。 –

@joe为了远离Joe Masilotti的方法,我把它放在extension中,并给了全球和当地的参数。

func tapCoordinate(at x xCoordinate: Double, and y yCoordinate: Double) { 
    let normalized = app.coordinate(withNormalizedOffset: CGVector(dx: 0, dy: 0)) 
    let coordinate = normalized.withOffset(CGVector(dx: xCoordinate, dy: yCoordinate)) 
    coordinate.tap() 
} 

通过给全球可识别的名字,我可以很容易地理解例如实例:以标准化矢量,然后点实际的

tapCoordinate(at x: 100, and y: 200) 
+0

在Swift 3中为我工作! – mmd1080

+0

这不能在Swift 3中编译 –

<something>.coordinate(withNormalizedOffset: CGVector.zero).withOffset(CGVector(dx:10,dy:60)).tap() 

通(0,0)(10 ,10)