Zum Inhalt springen

JavaScript-Rezepte

Diese Rezepte verwenden die in Repeato verfügbaren globalen Objekte Skript-Schritten und Erweiterte Konfiguration. Siehe die JavaScript-API-Referenz für alle verfügbaren Eigenschaften und Methoden.

Wähle den richtigen Ausführungskontext

Abschnitt „Wähle den richtigen Ausführungskontext“

Verwende einen Script-Schritt für Logik innerhalb eines Tests, etwa Verzweigungen, das Eingeben generierter Daten, das Abfragen des aktuellen Bildschirms oder das Aufrufen einer API.

Verwende Erweiterte Konfiguration für Lifecycle-Hooks und batchweite Abläufe, etwa zum Erstellen von Berichten, Sammeln von Geräteprotokollen oder Reagieren auf fehlgeschlagene Tests. Registriere jeden Listener mit einem stabilen Schlüssel, damit er dieselbe logische Konfiguration ersetzt und später entfernt werden kann.

Nach einem fehlgeschlagenen Schritt verzweigen

Abschnitt „Nach einem fehlgeschlagenen Schritt verzweigen“

Füge dies nach einer optionalen Assertion zu einem Script-Schritt hinzu. Ersetze die Schritt-ID durch das Ziel in deinem Test.

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

Schritt-IDs dürfen abgekürzt werden, solange das angegebene Präfix den gewünschten Schritt eindeutig identifiziert.

Generierte Daten zwischen Schritten teilen

Abschnitt „Generierte Daten zwischen Schritten teilen“

Speichere Werte auf data in einem Script-Schritt:

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

Lies den Wert in einem späteren Script-Schritt desselben Testlaufs aus:

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

Touch-Koordinaten werden normalisiert von 0 bis 1. Dieses Beispiel zieht vertikal von 80 % auf 20 % der Bildschirmhöhe durch die horizontale Mitte.

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)

Beende eine mit sendDown() gestartete Geste immer durch Aufrufen von sendUp().

Einen Plattformbefehl ausführen

Abschnitt „Einen Plattformbefehl ausführen“

ADB-Befehle funktionieren nur mit lokalen Android-Geräten und -Emulatoren. Cloud-Geräte unterstützen sie nicht.

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

Verwende IDB für ein verbundenes iOS-Gerät oder einen Simulator:

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

Gerätezwischenablage lesen und schreiben

Abschnitt „Gerätezwischenablage lesen und schreiben“
await deviceConnector.setClipboard('Copied by Repeato')
const clipboardContent = await deviceConnector.getClipboard()
log(clipboardContent)

Die Unterstützung der Zwischenablage hängt vom ausgewählten Gerätetyp und seinem aktiven Connector ab.

Den aktuellen Bildschirm mit Vision abfragen

Abschnitt „Den aktuellen Bildschirm mit Vision abfragen“

Frage den gesamten Bildschirm ab:

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

Beschränke die Analyse auf einen normalisierten Bildschirmbereich, wenn der relevante Bereich bekannt ist:

const answer = await deviceConnector.vision('Is the status indicator green?', {
x: 0.7,
y: 0,
width: 0.3,
height: 0.2,
})
log(answer)

Eine HTTP-API mit Axios aufrufen

Abschnitt „Eine HTTP-API mit Axios aufrufen“

Axios ist global verfügbar, daher ist kein Import erforderlich.

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

Bewahre Zugangsdaten in Umgebungsvariablen oder arbeitsbereichslokalen Dateien auf, die von der Versionsverwaltung ausgeschlossen sind. Lege Geheimnisse nicht direkt in Testskripten ab.

Geräteprotokolle zu Schrittergebnissen hinzufügen

Abschnitt „Geräteprotokolle zu Schrittergebnissen hinzufügen“

Füge dies hinzu zu Erweiterte Konfiguration:

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

Verwende beim Entfernen dieser Listener denselben Schlüssel:

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

Einen Batch-Bericht exportieren und hochladen

Abschnitt „Einen Batch-Bericht exportieren und hochladen“

Füge dies hinzu zu Erweiterte Konfiguration. Der Callback wird nach jedem Batch ausgeführt, erstellt einen lokalen Bericht und lädt ihn zum optionalen Repeato-Cloud-Berichtsdienst hoch.

batchRunner.addOnBatchCompleted('upload-report', async batchRun => {
const reportPath = await batchRunner.createBatchRunExport()
const reportUrl = await batchRunner.uploadReport(reportPath)
log({
successful: batchRun.wasSuccessful,
reportPath,
reportUrl,
})
})

Die lokale Berichtserstellung erfordert keinen Cloud-Upload.

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

recordAudio() erfordert Mikrofonzugriff und liefert nach der angeforderten Dauer eine temporäre Objekt-URL.

DE