Recetas de JavaScript
Estas recetas usan las variables globales disponibles en Repeato pasos de script y Configuración avanzada. Consulta la referencia de la API de JavaScript para consultar todas las propiedades y métodos disponibles.
Elige el contexto de ejecución adecuado
Sección titulada «Elige el contexto de ejecución adecuado»Usa un paso de script para la lógica que pertenece a una prueba, como ramificar, introducir datos generados, consultar la pantalla actual o llamar a una API.
Usa Configuración avanzada para hooks del ciclo de vida y comportamientos de todo el lote, como crear informes, recopilar registros del dispositivo o reaccionar a pruebas fallidas. Registra cada listener con una clave estable para que reemplace la misma configuración lógica y pueda eliminarse posteriormente.
Ramifica después de un paso fallido
Sección titulada «Ramifica después de un paso fallido»Añade esto a un paso de script después de una aserción opcional. Sustituye el ID del paso por el destino de tu prueba.
if (!testRunner.lastStepResult.success) { testRunner.setNextStepId('AH23D6')}Los ID de los pasos pueden abreviarse siempre que el prefijo proporcionado identifique el paso previsto.
Comparte datos generados entre pasos
Sección titulada «Comparte datos generados entre pasos»Almacena valores en data en un paso de script:
data.email = `tester-${Date.now()}@example.com`await deviceConnector.sendString(data.email)Lee el valor desde un paso de script posterior en la misma ejecución de prueba:
log(`Continuing with ${data.email}`)Realiza un gesto de arrastre
Sección titulada «Realiza un gesto de arrastre»Las coordenadas táctiles se normalizan de 0 a 1. Este ejemplo arrastra verticalmente del 80 % al 20 % de la altura de la pantalla pasando por su centro horizontal.
await deviceConnector.sendDown(0.5, 0.8)await deviceConnector.sendMove(0.5, 0.5)await deviceConnector.sendMove(0.5, 0.2)await deviceConnector.sendUp(0.5, 0.2)Termina siempre un gesto iniciado con sendDown() llamando a sendUp().
Ejecuta un comando de la plataforma
Sección titulada «Ejecuta un comando de la plataforma»Los comandos ADB solo funcionan con dispositivos Android y emuladores locales. Los dispositivos en la nube no los admiten.
if (deviceConnector.selectedDeviceData.os === 'android') { const output = await deviceConnector.sendAdbCommand('shell dumpsys battery') log(output)}Usa IDB para un dispositivo iOS o simulador conectado:
if (deviceConnector.selectedDeviceData.os === 'ios') { const output = await deviceConnector.sendIdbCommand('list-targets') log(output)}Lee y escribe el portapapeles del dispositivo
Sección titulada «Lee y escribe el portapapeles del dispositivo»await deviceConnector.setClipboard('Copied by Repeato')
const clipboardContent = await deviceConnector.getClipboard()log(clipboardContent)La compatibilidad con el portapapeles depende del tipo de dispositivo seleccionado y de su conector activo.
Consulta la pantalla actual con visión
Sección titulada «Consulta la pantalla actual con visión»Consulta la pantalla completa:
const answer = await deviceConnector.vision( 'Return the number displayed in the shopping cart as digits only.',)
log(answer)Limita el análisis a una región normalizada de la pantalla cuando conozcas el área relevante:
const answer = await deviceConnector.vision('Is the status indicator green?', { x: 0.7, y: 0, width: 0.3, height: 0.2,})
log(answer)Llama a una API HTTP con Axios
Sección titulada «Llama a una API HTTP con Axios»Axios está disponible como variable global, por lo que no es necesario importarlo.
const response = await axios.post( 'https://api.example.com/test-events', { testId: testRunner.currentTest.id, successful: testRunner.currentTestRun.wasSuccessful, }, { headers: { Authorization: `Bearer ${process.env.TEST_API_TOKEN}`, }, },)
log(`API response: ${response.status}`)Guarda las credenciales en variables de entorno o archivos locales del espacio de trabajo excluidos del control de versiones. No coloques secretos directamente en los scripts de prueba.
Añade registros del dispositivo a los resultados del paso
Sección titulada «Añade registros del dispositivo a los resultados del paso»Añade esto a Configuración avanzada:
let logBuffer = []
deviceConnector.addOnDeviceLog('report-device-log', logEntry => { logBuffer.push(logEntry)})
testRunner.addOnStepCompleted('report-device-log', stepResult => { if (logBuffer.length > 0) { stepResult.setMessage(`${stepResult.message}\n${logBuffer.join('\n')}`) } logBuffer = []})Usa la misma clave al eliminar estos listeners:
testRunner.removeOnStepCompleted('report-device-log')Exporta y carga un informe por lotes
Sección titulada «Exporta y carga un informe por lotes»Añade esto a Configuración avanzada. La devolución de llamada se ejecuta después de cada lote, crea un informe local y lo carga en el servicio opcional de informes en la nube de Repeato.
batchRunner.addOnBatchCompleted('upload-report', async batchRun => { const reportPath = await batchRunner.createBatchRunExport() const reportUrl = await batchRunner.uploadReport(reportPath)
log({ successful: batchRun.wasSuccessful, reportPath, reportUrl, })})La generación de informes locales no requiere el paso de carga en la nube.
Graba y reproduce audio
Sección titulada «Graba y reproduce audio»audioTools.say('Starting the audio check')
const recordingUrl = await audioTools.recordAudio(5000)await audioTools.playAudio(recordingUrl)recordAudio() requiere acceso al micrófono y devuelve una URL de objeto temporal tras la duración solicitada.