Zaman Damgalı Etkinlik Eşleştirme Hatası: Eşleşen öğe bulunamadı


94

Xcode'da bir UItest oluşturmaya çalışıyorum. UIview'u kaydırmaya çalıştığımda bir hata alıyorum:

Timestamped Event Matching Error: Failed to find matching element

hata penceresi

görüntü açıklamasını buraya girin

Bu, UIView'a dokunmaya çalışırsam da olur.


Biraz daha açıklayabilir misin?
Dieter Meemken

Bir şeyler yapmayı düşünen UIview'e dokunmaya veya dokunmaya çalışıyorum (jest yeniden oluşturucu var) ancak hareketi yaptığımda bu hata oluyor. Çalışmasını sağlamanın tek yolu sorgulardır, ancak bu gerçekten karmaşıktır ve başka bir yol olduğundan eminim
shay

Yanıtlar:


47

Kaydırdığınız UIView nesnesi için 'Erişilebilirlik' seçeneğinin etkinleştirildiğini doğrulamalısınız, örneğin:

görüntü açıklamasını buraya girin


1
Bir Web Görünümü için Erişilebilirliği açmak, Web Görünümü'ndeki metni çözerken testlerimin başarısız olmasına neden oldu. Web Görünümü'nü barındıran UIView için Erişilebilirliği KAPALI duruma getirmek, testlerin başarılı olmasını sağladı. Bu yüzden sakının.
askielboe

1
Benim için çalışmasını sağlayacak başka bir nokta olarak, ona bir etiket vermem gerekiyordu
Sean Lintern

fastlaneBir tableView ekran görüntülerini almak için bu gönderiyi yararlı buldum . stackoverflow.com/a/39331154/4475605
Adrian

Bu nerede? Bunu nasıl ayarlarım?
Cory McAboy

@CoryMcAboy, özel görünümünüz için koddan ayarlayabilirsiniz:isAccessibilityElement = true
Gleb Tarasov

15

Genellikle bu sorun, kaydetmek istediğiniz öğenin üst öğesi, ErişilebilirlikElement = true olarak ayarlandığında görülür. Genel olarak, alt öğeye erişmek için ana öğeyi yanlış olarak ayarlamanız gerekir. Örneğin: bir görünümün içinde bir UILabeliniz varsa, erişilebilirlik görünüm için false ve UILabel için true olarak ayarlanmalıdır.


1
Bu tam olarak yeniden üretilebilirdi. Dediğin gibi üst öğe çalışmıyor isAccessibilityElement = true olarak ayarlandı! Onu yanlışa geri döndürdükten sonra tekrar çalıştı.
pommes

3

Görünüşe göre bunun hala bir sorun olduğu Xcode 9.3'te yaptığım şey şuydu:

  • Xcode'dan çık
  • Simülatörün ayarlarını sıfırlayın (Donanım -> Tüm içeriği ve ayarları silin)
  • Simülatörden Çık
  • Mevcut uygulama için türetilmiş verileri silin
  • Xcode'u yeniden başlatın
  • Tekrar kaydetmeyi deneyin - bu sefer benim için çalıştı.

Tanımlayıcıyı bir düğme için "skipButton" olarak sağladım ve düğmeyi belirlerken her zaman başarısız oluyor, düğmeyi app.buttons ["skipButton '] olarak tanımlıyorum, yardımınız için teşekkür
ederim

Bu adımlar benim için işe yaramadı. Aslında, daha önce sorundan etkilenmeyen widget'lar etkilendi.
Geoff S

neden bunun içeriği yok?
karga

2

Yeni bir test kaydetmek için henüz bir çözüm olduğunu düşünmüyorum. Ancak, zaten var olan bir testle dokunmaya zorlayan bir uzantı kullanıyorsanız çalışır.

Kullanım örneği:

extension XCUIElement {

    func forceTapElement() {
        if self.hittable {
            self.tap()
        }
        else {
            let coordinate: XCUICoordinate = self.coordinateWithNormalizedOffset(CGVectorMake(0.0, 0.0))
            coordinate.tap()
        }  
    }
}

func testSomethingWithCells() {

   let app = XCUIApplication()
   let cells = app.tables.cells
   sleep(1)
   cells.elementBoundByIndex(0).forceTapElement()
}

Orijinal gönderiyi buradan kontrol edebilirsiniz:

Xcode UI testi - UI Test Başarısızlığı - Arama alanı "İptal" düğmesine dokunduğunuzda görünür (AX eylemiyle) kaydırılamadı


elementBoundByIndex ',' element (boundBy :) 'olarak yeniden adlandırıldı, Ör: cell.element (boundBy: 0) .tap ()
Sujananth

2

Ara sıra bu problemle karşılaşıyorum. Uygulamanın dizinini DerivedData'dan silmek yardımcı oluyor gibi görünüyor.


1

Kendim için işe yarayan bir çözüm, nesneyi farklı bir şekilde tanımlamaktı.
Xcode 8'de aşağıdakileri kullanabildim:

XCUIApplication().tables.cells["Camera Roll"].buttons["Camera Roll"].tap()

Xcode 9 ile bu soruda bahsedilen hatayı aldım. Aşağıdakiler kullanılarak sona erdirildi, bu da işe yaradı (orijinal seçenekten daha titiz olsa da)

XCUIApplication().cells.element(boundBy: 1).tap()

@Geliştirici test işlevinizde
Huy-Anh Hoang
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.