2016-03-29 16 views
12

'u kullanarak belirli bir noktaya dokunma Cordova uygulamasının ekran görüntülerini yapmak için Xcode UI sınamalarını Fastline Snapshot ile kullanmak istiyorum. Temel olarak, tüm uygulamamın sadece bir web görünümü olduğu için, tüm xcode UI test yardımcı yöntemleri alakasız hale gelir ve sadece belirli noktalara dokunmak istiyorum. tap(x: 10, y: 10), {10px; 10px} noktasında bir musluk üretmelidir.Xcode UITests

Muhtemelen bu çok basit, ancak nasıl yapılacağını anlayamıyorum.

Teşekkürler.

cevap

18

XCUICoordinate API ile belirli bir noktaya dokunabilirsiniz. Maalesef sadece bir piksel koordinatını referans alan "10,10" düğmesine basamazsınız. Gerçek bir görünüme göre bir göreli ofset ile koordinat oluşturmanız gerekir.

Belirtilen koordinat ile etkileşimde bulunmak için söz konusu web görünümünü kullanabiliriz.

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

Yan not, ancak doğrudan web görünümü ile etkileşim çalıştı mı? app.links["Link title"].tap() veya app.staticTexts["A different link title"].tap()'u kullanarak çok fazla başarı elde ettim. Here's a demo app I put together demonstrating interacting with a web view.


Güncelleme: Michal W. Açıklamalarda belirttiği gibi, artık ofset normale endişesi duymadan, doğrudankoordinat dokunabilirsiniz.

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

Normalleştirilmiş vektöre 0,0 geçtiğime ve ardından ikinci aramaya 10,10 gerçek noktaya dikkat edin.

+1

ben x/y alma işlemi yapmaya 'coordinateWithOffset' eklemek için gerektiği kadar doğru olduğundan emin değilim 0 , dy: 0)) koordineWithOffset (CGVector (dx: konum.x, dy: konum.y)) cooridnate.tap() https://forums.developer.apple.com/thread/13373 –

+0

İyi fikir! Teşekkür @ MichałW. Cevabı zaten kabul edildiğine göre güncellemede kaydettim. –

8

@joe Joe Masilotti'nin yaklaşımından biraz daha uzaklaşmak için, benimkini extension numaralı telefona koydum ve genel ve yerel param sistemlerine öncelikli ifadeler verdim. (10

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

Swift 3'te benim için çalıştı! – mmd1080

+0

Bu, Swift 3'te derlenmiyor –

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

Geçiş (0,0) normalize vektör ve daha sonra gerçek noktaya:

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() 
} 

küresel tanımlanabilir bir ad vererek kolayca örneğin örneğini anlayabileceği izin cooridnate = self.coordinateWithNormalizedOffset (CGVector (dx:, 10)