我想使用Xcode UI測試和Fastline Snapshot來製作Cordova應用程序的屏幕截圖。基本上,由於我的整個應用程序只是一個Web視圖,所有xcode UI測試幫助程序方法都變得無關緊要,我只想點擊特定的點,例如tap(x: 10, y: 10)
應在點{10px; 10px}
處產生水龍頭。如何使用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傳遞給第二個調用。
@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)
在Swift 3中爲我工作! – mmd1080
這不能在Swift 3中編譯 –
<something>.coordinate(withNormalizedOffset: CGVector.zero).withOffset(CGVector(dx:10,dy:60)).tap()
通(0,0)(10 ,10)
我不知道這是正確的,因爲我需要添加 '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 –
好主意!謝謝@MichałW。我注意到更新答案的評論已被接受。 –