Ir al contenido

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.

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.

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.

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}`)

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().

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 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)

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')

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.

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.

ES