¿Cómo deshabilitar la autocomplete cuando se ejecutan las testings de interfaz de usuario de Xcode?

Como parte de mis testings de interfaz de usuario, estoy generando una cadena aleatoria como títulos para mis objects. El problema es que cuando este título se XCUIElement.typeText() través de un keyboard (usando XCUIElement.typeText() ), iOS a veces acepta un valor sugerido automáticamente.

Por ejemplo, es posible que desee que escriba una cadena generada automáticamente de "calg", pero la opción correcta automática seleccionará "calf" en su lugar. Cuando bash search este valor más adelante con una aserción, no existe y falla incorrectamente.

¿Hay alguna forma de decirle a las testings de la interfaz de usuario que no deberían estar usando la corrección automática, o hay soluciones alternativas que pueda usar?

No creo que pueda desactivar la corrección automática a través del código de su objective de testing de interfaz de usuario.

Sin embargo, puede desactivarlo para la vista de text individual desde su código de producción. Para asegurarse de que la corrección automática todavía está UITextField y ejecutada y que se envía la aplicación, una solución sería subclass UITextField y encender una variable de entorno.

Primero configure su testing de interfaz de usuario para establecer la propiedad XCUIApplication en XCUIApplication .

 class UITests: XCTestCase { let app = XCUIApplication() override func setUp() { super.setUp() continueAfterFailure = false app.launchEnvironment = ["AutoCorrection": "Disabled"] app.launch() } func testAutoCorrection() { app.textFields.element.tap() // type your text } } 

Luego, subclass (y usa) UITextField para search este valor en el dictionary de entorno del process. Si está configurado, apague la corrección automática. Si no, simplemente llama al super.

 class TestableTextField: UITextField { override var autocorrectionType: UITextAutocorrectionType { get { if NSProcessInfo.processInfo().environment["AutoCorrection"] == "Disabled" { return UITextAutocorrectionType.No } else { return super.autocorrectionType } } set { super.autocorrectionType = newValue } } } 

A less que necesite sugerir automáticamente para cualquier escenario de testing, ¿intentó desactivar la corrección automática en la configuration del dispositivo / simulador?

Configuraciones-> General -> Teclado -> Corrección automática

Aquí es cómo lo deshabilité en mi testing de interfaz de usuario

  app.textFields.element(boundBy: 0).tap() let keyboards = app.keyboards.count XCTAssert(keyboards > 0, "You need enable the keyboard in the simulator.") app.buttons["Next keyboard"].press(forDuration: 2.1) let pnetworkingictiveOn = app.switches["Pnetworkingictive"].value as! String == "1" if pnetworkingictiveOn { app.switches["Pnetworkingictive"].tap() } else { app.buttons["Next keyboard"].tap() } app.buttons["Next keyboard"].press(forDuration: 2.1) let pnetworkingictiveOff = app.switches["Pnetworkingictive"].value as! String == "0" XCTAssert(pnetworkingictiveOff, "Pnetworkingictive mode is not disabled") app.buttons["Next keyboard"].tap()