Aller au contenu

Recettes JavaScript

Ces recettes utilisent les variables globales disponibles dans Repeato étapes de script et Configuration avancée. Consultez la référence de l’API JavaScript pour connaître toutes les propriétés et méthodes disponibles.

Utilisez une étape Script pour la logique qui doit s’exécuter dans un test, comme effectuer un branchement, saisir des données générées, interroger l’écran actuel ou appeler une API.

Utilisez Configuration avancée pour les hooks du cycle de vie et les comportements à l’échelle d’un lot, comme créer des rapports, collecter les journaux des appareils ou réagir aux tests échoués. Enregistrez chaque écouteur avec une clé stable afin qu’il remplace la même configuration logique et puisse être supprimé ultérieurement.

Effectuer un branchement après l’échec d’une étape

Section intitulée « Effectuer un branchement après l’échec d’une étape »

Ajoutez ceci à une étape Script après une assertion facultative. Remplacez l’ID de l’étape par la destination dans votre test.

if (!testRunner.lastStepResult.success) {
testRunner.setNextStepId('AH23D6')
}

Les ID d’étape peuvent être abrégés tant que le préfixe fourni identifie l’étape visée.

Partager des données générées entre les étapes

Section intitulée « Partager des données générées entre les étapes »

Stockez les valeurs dans data dans une étape Script :

data.email = `tester-${Date.now()}@example.com`
await deviceConnector.sendString(data.email)

Lisez la valeur depuis une étape Script ultérieure lors de la même exécution du test :

log(`Continuing with ${data.email}`)

Les coordonnées tactiles sont normalisées de 0 vers 1. Cet exemple effectue un glissement vertical de 80 % à 20 % de la hauteur de l’écran, en passant par son centre 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)

Terminez toujours un geste commencé avec sendDown() en appelant sendUp().

Les commandes ADB fonctionnent uniquement avec les appareils et émulateurs Android locaux. Les appareils cloud ne les prennent pas en charge.

if (deviceConnector.selectedDeviceData.os === 'android') {
const output = await deviceConnector.sendAdbCommand('shell dumpsys battery')
log(output)
}

Utilisez IDB pour un appareil iOS ou un simulateur connecté :

if (deviceConnector.selectedDeviceData.os === 'ios') {
const output = await deviceConnector.sendIdbCommand('list-targets')
log(output)
}

Lire et écrire dans le presse-papiers de l’appareil

Section intitulée « Lire et écrire dans le presse-papiers de l’appareil »
await deviceConnector.setClipboard('Copied by Repeato')
const clipboardContent = await deviceConnector.getClipboard()
log(clipboardContent)

La prise en charge du presse-papiers dépend du type d’appareil sélectionné et de son connecteur actif.

Interroger l’écran actuel avec la vision par ordinateur

Section intitulée « Interroger l’écran actuel avec la vision par ordinateur »

Interrogez l’écran complet :

const answer = await deviceConnector.vision(
'Return the number displayed in the shopping cart as digits only.',
)
log(answer)

Limitez l’analyse à une région normalisée de l’écran lorsque la zone concernée est connue :

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 en tant que variable globale : aucune importation n’est requise.

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

Conservez les identifiants dans des variables d’environnement ou des fichiers locaux à l’espace de travail exclus du contrôle de version. Ne placez pas de secrets directement dans les scripts de test.

Ajouter les journaux de l’appareil aux résultats de l’étape

Section intitulée « Ajouter les journaux de l’appareil aux résultats de l’étape »

Ajoutez ceci à Configuration avancée:

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 = []
})

Utilisez la même clé pour supprimer ces écouteurs :

testRunner.removeOnStepCompleted('report-device-log')

Ajoutez ceci à Configuration avancée. Le rappel s’exécute après chaque lot, crée un rapport local et le téléverse vers le service de rapports cloud optionnel 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 génération d’un rapport local ne nécessite pas l’étape de téléversement vers le cloud.

audioTools.say('Starting the audio check')
const recordingUrl = await audioTools.recordAudio(5000)
await audioTools.playAudio(recordingUrl)

recordAudio() nécessite l’accès au microphone et renvoie une URL d’objet temporaire après la durée demandée.

FR