Prueba de la extensión de acción con testings de interfaz de usuario

¿Es posible realizar testings de interfaz de usuario en los objectives de extensión de acción? No puedo crear un objective de testing de interfaz de usuario con la extensión de acción como el "objective que se debe probar". Estoy intentando cargar la extensión de acción desde Safari (o fotos, aunque se prefiere Safari / ambos)

Si grabo mis interacciones puedo llegar tan lejos como:

app.icons["Safari"].tap()

Entonces puedo agregar manualmente:

XCUIDevice.shanetworkingDevice().pressButton(.Home)

antes del código generado, pero no funciona como se esperaba (el simulador se deja en la pantalla de inicio).

También he intentado:

UIApplication.shanetworkingApplication().openURL(NSURL(string: "https://google.com")!)

pero eso tampoco abre Safari.

Ni siquiera estoy seguro de si podré interactuar de forma automática con la Extensión de acción si se inicia, pero con suerte será posible.

Entonces, es posible cambiar las aplicaciones con XCUITest, pero no está documentado. Si revisa WebDriverAgent de Facebook , hicieron un volcado de cabecera e hicieron un ayudante para lanzarlo desde el trampolín. Puedes llamar:

 XCUIApplication* safari = [[XCUIApplication alloc] initWithPrivatePath:nil bundleID:@"com.apple.safari"]; [safari launch]; 

Y luego interactúa con Safari como lo haces con tu aplicación. Sin embargo, me he encontrado con un problema similar en el que XCUITest no lanzará la extensión. Una vez abierto (es decir, toca físicamente el button de extensión mientras se ejecuta la testing), el cornetworkingor de testing funciona perfectamente y puede interactuar con su extensión en el mismo context que su aplicación. Sin embargo, hacer que el cornetworkingor de testing pulse para iniciar la extensión no hace nada. También tengo una pregunta del Foro de Apple Dev sobre este tema.

Actualización :

Resulta que si usas la aplicación para presionar la pantalla en la location del button, la extensión se cargará y podrás interactuar con ella. Tenga en count que la API para tocar una coorderada es muy mala. Las x, y son multiplicadores del marco de la cosa de la que creó la coorderada. Código de ejemplo relevante:

 // app is your XCUIApplication // In this case we are tapping in the horizontal middle and at the y coordinate 603 (this is for a 6+ screen size) XCUICoordinate* coordinateOfRowThatLaunchesYourExtension = [app coordinateWithNormalizedOffset:CGVectorMake(0.5, 603.0 / 736.0)]; [coordinateOfRowThatLaunchesYourExtension tap]; 

Esto presionará el button para su extensión en la hoja de acción, después de que se haya invocado el selector de extensión de Apple. Por cualquier razón / error en XCUITest simplemente presionar su aplicación en la hoja de acción no funciona:

 [app.sheets.staticTexts[@"MyApp"] tap];