2016-03-24 16 views
2

Giriş sayfam için UI testleri yazmaya çalışıyorum. Sayfada bazı intro animasyonları, bir arama alanı (bağlanacak doğru sunucuyu bulmak için) vardır ve sonra doğru sunucuyu seçtiklerinde bir kullanıcı adı ve şifre alanı belirir.EarlGrey Hatası - "Klavye ilk yanıtlayıcı statüsünü istifa ettikten sonra kaybolmadı"

[[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"searchTextField")] 
assertWithMatcher:grey_sufficientlyVisible()]; 
[[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"searchTextField")] performAction:grey_typeText(@"gtX9Vn23k1")]; 
[[EarlGrey selectElementWithMatcher:grey_anyOf([self matcherForUITableViewCell], nil)] performAction:grey_tap()]; 

[[[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"usernameTextField")] 
assertWithMatcher:grey_interactable()] performAction:grey_tap()]; 
[[[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"usernameTextField")] 
    assertWithMatcher:grey_interactable()] performAction:[GREYActions actionForTypeText:@"Why isnt this working?"]]; 

Bu test başarısız:

İşte şimdiye kadar benim test.

EarlGrey, ilk metin alanını (searchTextField) doğru şekilde seçer ve yazar.

EarlGrey doğru tablo görünümünü hücresini seçer!

EarlGrey sonra doğru usernameTextField seçer, ama sonra bir zaman aşımından sonra aşağıdaki hatayı vererek metin yazmak için başarısız:

Exception: ActionFailedException 
Reason: Action 'Type "Why isnt this working"' failed. 
Element matcher: (respondsToSelector(accessibilityIdentifier) && accessibilityID("usernameTextField")) 
Complete Error: Error Domain=com.google.earlgrey.ElementInteractionErrorDomain Code=1 "Keyboard did not disappear after resigning first responder status of <GHDLoginTextField: 0x7fa96a616bd0; baseClass = UITextField; frame = (150 387; 468 29); text = ''; opaque = NO; autoresize = RM+BM; tintColor = UIDeviceWhiteColorSpace 1 1; gestureRecognizers = <NSArray: 0x7fa96a55d5d0>; layer = <CALayer: 0x7fa96a616a80>>" UserInfo={NSLocalizedDescription=Keyboard did not disappear after resigning first responder status of <GHDLoginTextField: 0x7fa96a616bd0; baseClass = UITextField; frame = (150 387; 468 29); text = ''; opaque = NO; autoresize = RM+BM; tintColor = UIDeviceWhiteColorSpace 1 1; gestureRecognizers = <NSArray: 0x7fa96a55d5d0>; layer = <CALayer: 0x7fa96a616a80>>} 

"Klavye ait ilk savunan durumunu istifa ettikten sonra kaybolmadı"

Burada neler olduğunu bilen var mı? Tuhaf bir şekilde, btw, EarlGrey hatalardan hemen önce bir sonraki alanı (Şifre alanı) seçer gibi görünüyor. Şifre alanını seçmek için hiç kullanıcı arayüzüm yok.

GÜNCELLEME: Bu metin alanında "Next" (Geri) anahtarını kullanıyorum, böylece bir kullanıcı dönüş anahtarına dokunduğunda onları bir sonraki alana (parola alanı) atacağım. Bunu yapmak için, Next (İleri) tuşuna basıldığında, bu metin alanında firstResponder'den istifa ediyorum ve parola alanına "becomeFirstResponder" (Yanıtlama Sonrası Yanıtlayıcı) öğesini çağırın.

Bu, "resignFirstResponder" çağrısını kaldırırsam, metnimi doğru şekilde yazdığı için, EarlGray'ın hata yapmasına neden oluyor. Soru şu ki: Bunu söylemediğimde NEDEN "Sonraki" tuşa vuruyor?

+0

Yazmaya çalışmadığında otomatik düzeltme hala klavye için mi çalışıyor? EarlGrey, Autocorrect öğesinin açık olduğunu tespit ederse, ilk yanıtlayıcıyı iptal eder, metin alanından otomatik düzeltmeyi kapatır ve sonra geri döner. TTBOMK, şu anda değiştiriliyor. –

+0

Düzeltme ve Yazım Denetimi ikisi de kapalı. Klavye türü varsayılan. Görünüm "Varsayılan" dır. Geri dönüş tuşu "İleri" dir (kullanıcı, kullanıcı adı alanından şifre alanına girer). – ermterm

+0

"[[[EarlGrey selectElementWithMatcher: grey_accessibilityID (@" kullaniciadiTextField ")] assertWithMatcher: grey_interactable()] performAction: grey_tap()]; takip eden tipText'in de tüm bu kontrolleri yapması gerektiğinden biraz fazla gibi görünüyor. Bunu kaldırabilir misin? –

cevap

0

EarlGray kaynağında bir hataya benziyor. GREYActions.m

// If the view already is the first responder and had autocorrect enabled, it must 
    // resign and become first responder for the autocorrect type change to take effect. 
    [firstResponder resignFirstResponder]; 

Çizgi 182 görünümü daha önce otomatik düzeltme etkinleştirmiştik olmadığını belirlemek için yerinde hiçbir denetimi yoktur. Bu nedenle, TÜM metin alanları "resignFirstResponder" olarak adlandırılacaktır. Bu, benim gibi kurulumlar için sorunludur, çünkü istifaFirstResponder ilkResponder durumunu başka bir metin alanına geçirir.

+0

Bunlar için bir github sorunu açmalısınız https://github.com/google/EarlGrey/issues –

+0

Bitti. @gran_profaci – ermterm

+0

Yardımlarınız için teşekkürler. Bu senin problemini çözüyor mu? –

İlgili konular