2015-09-22 16 views
15

ho un test come di seguito:Xcode UI Testing - digitando il testo con TypeText() e la correzione automatica

let navnTextField = app.textFields["First Name"] 
let name = "Henrik" 
navnTextField.tap() 
navnTextField.typeText("Henrik") 
XCTAssertEqual(navnTextField.value as? String, name) 

Il problema è che di default il mio iPhone Simulator ha avuto modo di tastiera polacca a causa delle impostazioni di sistema e " Henrik "viene automaticamente modificato in" ha "in automatico.

Soluzione semplice è rimuovere la tastiera polacca dal iOS Settings. Questa soluzione tuttavia non risolve il problema poiché è possibile ripristinare iPhone Simulator e quindi il test non riuscirà di nuovo.

C'è un modo per impostare il comando automatico prima del caso di test o altro modo per inserire il testo nel campo di testo.

risposta

10

v'è una soluzione da utilizzare per fornire UIPasteboard testo di input:

let navnTextField = app.textFields["First name"] 
navnTextField.tap() 
UIPasteboard.generalPasteboard().string = "Henrik" 
navnTextField.doubleTap() 
app.menuItems.elementBoundByIndex(0).tap() 
XCTAssertEqual(navnTextField.value as? String, name) 

È possibile controllare link with description as a workaround for secure input in GM

Modifica

Per una migliore leggibilità, invece app.menuItems.elementBoundByIndex(0).tap() si può fare app.menuItems["Paste"].tap().

18

Ecco una piccola estensione su XCUIElement per raggiungere questo

extension XCUIElement { 
    // The following is a workaround for inputting text in the 
    //simulator when the keyboard is hidden 
    func setText(text: String, application: XCUIApplication) { 
     UIPasteboard.generalPasteboard().string = text 
     doubleTap() 
     application.menuItems["Paste"].tap() 
    } 
} 

Può essere utilizzato come questo

let app = XCUIApplication() 
let enterNameTextField = app.otherElements.textFields["Enter Name"] 
enterNameTextField.tap() 
enterNameTextField.setText("John Doe", app) 
  • merito va alla @Apan per l'attuazione