2016-03-29 76 views
12

我想使用Xcode UI測試和Fastline Snapshot來製作Cordova應用程序的屏幕截圖。基本上,由於我的整個應用程序只是一個Web視圖,所有xcode UI測試幫助程序方法都變得無關緊要,我只想點擊特定的點,例如tap(x: 10, y: 10)應在點{10px; 10px}處產生水龍頭。如何使用Xcode UITests點擊特定點

這可能很簡單,但我不知道該怎麼做。

謝謝。

回答

18

您可以點擊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。我注意到更新答案的評論已被接受。 –

8

@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中編譯 –

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

通(0,0)(10 ,10)