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}`)Eine Ziehbewegung ausführen
Abschnitt „Eine Ziehbewegung ausführen“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.
Audio aufnehmen und abspielen
Abschnitt „Audio aufnehmen und abspielen“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.