2015-12-03 48 views
13

我剛開始用的UI測試中的XCode 7時如何隱藏鍵盤斯威夫特應用程序,並擊中這個問題:UI測試

我需要將文本輸入到一個文本框,然後點擊一個按鈕。不幸的是,這個按鈕隱藏在輸入文本到文本框中時出現的鍵盤後面。 XCode正在嘗試滾動以使其可見,但我的視圖不可滾動,因此失敗。

我目前的解決辦法是這樣的:

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

我能做到這一點,因爲我的ViewController被攔截亮點:

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

我不是真正的快樂我的解決方案,還有沒有其他的路怎麼在UI測試期間隱藏鍵盤?

+0

如果u有問題與鍵盤隱藏按鍵,U可以只是'setContentOffset'推動整個視圖截至按鈕可見,如果你的觀點是滾動或不 – Tj3n

+2

1這並不重要。如果在鍵盤可見時無法訪問按鈕,是不是UX問題?這些只是測試。測試預計將有hacky代碼,所以我不明白你的問題在這裏:)只要離開它,如果它工作。 –

回答

2

的回答你的問題不在於你的測試代碼,但在你的應用程序代碼。如果使用屏幕上的軟鍵盤用戶不能輸入文字,然後在按鈕上點擊,您應該使測試取消鍵盤(作爲用戶將不得不爲了輕按按鈕),或使視圖滾動。

+0

「讓測試關閉鍵盤」 - 你有什麼建議,如何做到這一點? XCUIElement沒有resignFirstResponder這樣的概念。 – Rayfleck

+0

app.keyboards.buttons [「Hide hide」]。tap() – Rayfleck

+0

我相信你可以輕敲鍵盤來隱藏它。像app.tap()或app.swipeDown()應該這樣做。 – caffeinum

1

只要確保鍵盤在運行測試之前在模擬器關閉。

硬件 - >鍵盤 - >連接硬件鍵盤。

然後使用粘貼板

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

爲什麼選擇投票? – 365SplendidSuns

10

輸入文本如果您已經設置了您的文本字段辭職FirstResponder(通過textField.resignFirstResponder()self.view.endEditing(true))在textFieldShouldReturn()委託方法,然後

textField.typeText("\n") 

將做到這一點。

3

基於對Joe's blog一個問題,我已經在模擬器上幾運行後的鍵盤無法使用這段代碼隱藏的問題:

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

所以,我把它改爲:(感謝喬)

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

我試着在這兒做,如果鍵盤劇照水龍頭打開後隱藏按鈕,如果是,我鍵入「\ n」,這在我的情況下也關閉鍵盤檢測。

這也恰好是棘手的,因爲有時模擬器失去了鍵盤打字的焦點,這可能使測試失敗,但在我的經驗,失敗率比我所採取的其他方法低。

我希望這可以提供幫助。

+0

在所有情況下都能正常工作 –

2

我總是用這個來編程隱藏鍵盤斯威夫特UITesting:

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

在iPhone上不適用於我。難道這只是iPad? –

+0

類型'XCUIApplication'的值沒有成員'鍵盤'。 @charlieSeligman代碼在設備中工作還是代碼僅適用於模擬器? –

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