如何使用Xcode UITests点击特定点

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

这可能很简单,但我无法弄清楚如何做到这一点。

谢谢。

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

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

 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.links["Link title"].tap()app.staticTexts["A different link title"].tap() 。 这是一个演示应用程序,我放在一起演示了与Web视图的交互。


更新 :正如Michal 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传递给第二次调用。

@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) 
 .coordinate(withNormalizedOffset: CGVector.zero).withOffset(CGVector(dx:10,dy:60)).tap() 

将(0,0)传递给归一化向量,然后传递给实际点(10,10)