2015-12-03 22 views
13

Sadece XCode 7 UI testini sırasında Swift uygulamada klavyeyi gizlemek ve bu sorunu vurmak:nasıl UI testi

Bir metin alanına metni girin ve ardından düğmesine tıklamanız gerekiyor. Ne yazık ki bu düğme, metin alanına metin girerken görünen klavyenin arkasına gizlenmiştir. XCode görünür hale getirmek için sayfayı kaydırmaya çalışıyor ancak görünümüm kaydırılamıyor, dolayısıyla başarısız oluyor. Benim ViewController dokunuşları yakalamasındandır bunu yapabilirim

let textField = app.textFields["placeholder"] 
    textField.tap() 
    textField.typeText("my text") 
    app.childrenMatchingType(.Window).elementBoundByIndex(0).tap() // hide keyboard 
    app.buttons["hidden button"].tap() 

:

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 
    view.endEditing(false) 
    super.touchesBegan(touches, withEvent: event) 
} 

benim çözümü konusunda gerçekten mutlu değilim, başka bir şekilde nasıl var

Benim şu anki çözüm budur UI testi sırasında klavyeyi gizlemek için?

+0

klavye düğmesini gizler u sorun varsa, u sadece düğme kadar setContentOffset' 'ile bütün görünümü yukarı itebilir görünür durumda, görünümünüz kaydırılabilir veya – Tj3n

+2

1 değilse sorun olmaz.Klavye görünürken bir düğmeye erişemiyorsanız, bu bir UX sorunu mu? 2. Bunlar sadece testlerdir. Testlerin hacky kodu olması beklenir, bu yüzden sorunun ne olduğunu burada görmüyorum :) Sadece çalışırsa, bırakın. –

cevap

2

Sorunuzun yanıtı, test kodunuzda değil, uygulama kodunuzda bulunur. Bir kullanıcı ekran üstü yazılım klavyesini kullanarak metin giremez ve ardından düğmeye basamazsa, sınamayı klavyeden çıkarmanız gerekir (bir kullanıcı için, düğmeye basmak için), veya görüntüyü kaydırılabilir hale getirin .

+0

"Testi klavyeyi reddetme" - Bunu nasıl gerçekleştireceğiniz konusunda herhangi bir öneriniz var mı? XCUIElement'in resignFirstResponder gibi bir fikri yoktur. – Rayfleck

+0

app.keyboards.buttons ["Klavyeyi gizle]].() – Rayfleck

+0

'a dokunun. Gizlemek için klavyeden dokunabilirsiniz. App.tap() veya app.swipeDown() gibi bir şey yapmalıdır. – caffeinum

1

Testleri çalıştırmadan önce, klavyenin simülatörde kapalı olduğundan emin olun.

Donanım-> Klavye-> Donanım Klavye Bağlayın. Eğer FirstResponder istifaya Metin alanları kurduysanız

Sonra macun kurulu

textField.tap() 
UIPasteboard.generalPasteboard().string = "Some text" 
textField.doubleTap() 
app.menuItems["paste"].tap() 
+0

Neden aşağı oy? – 365SplendidSuns

10

kullanarak metin girmek ardından textFieldShouldReturn() temsilci yönteminde,

textField.typeText("\n") 
(ya textField.resignFirstResponder() veya self.view.endEditing(true) aracılığıyla)

bunu yapacak.

Joe's blog bir soruya dayanarak
3

, ben simülatörü üzerinde birkaç koşular sonrasında klavyeler bu kod parçası kullanarak gizlemek için başarısız olan bir sorunu vardır: Yani

XCUIApplication().keyboard.buttons["Hide keyboard"] 

, ben bunu değişti: (teşekkürler o kadar ise musluktan sonra açık klavye stills sakla düğmesi, ben benim durumumda çok klavye kapanır bir "\ n", yazarsanız Joe)

XCUIApplication().keyboard.buttons["Hide keyboard"] 
let firstKey = XCUIApplication().keys.elementBoundByIndex(0) 
if firstKey.exists { 
    app.typeText("\n") 
} 

Ya burada yapmaya çalışacağım algıladığını.

Bu da zor olabilir, çünkü bazen simülatör klavye yazmanın odağını kaybetti ve bu da testin başarısız olmasına neden olabilir, ancak deneyimlerimde başarısızlık oranı aldığım diğer yaklaşımlardan daha düşük.

Umarım bu yardımcı olabilir.

+0

Her durumda sorunsuz çalışıyor –

2

Hep programlı Swift UITesting klavyeyi gizlemek için kullanırız

XCUIApplication().keyboards.buttons["Hide keyboard"].tap() 
+0

iPhone'da benim için çalışmıyor. Bu sadece iPad olabilir mi? –

+0

'XCUIApplication' türünün bir üyesi 'klavye' içermez. @charlieSeligman Kod, cihazda çalışıyor mu, yoksa kod sadece simülatör için mi çalışıyor? –

1
XCUIApplication().toolbars.buttons["Done"].tap()