Handbuch | Tutorial | Standardbibliothek | Release Notes

Release Notes

17
Testen von Electron Anwendungen
4.5+

Electron ist ein Framework zur Ausführung von Cross-Plattform Desktop-Anwendungen mit Hilfe des Webbrowsers Chromium und des Node.js-Frameworks. Diese Anwendungen können mittels HTML, CSS und JavaScript entwickelt werden und auf native Funktionen des Betriebssystems wie Menüs, Dateien oder die Taskleiste zugreifen.

Seit QF-Test Version 4.5 können Anwendungen, die mit dem Electron Framework entwickelt wurden, getestet werden. Sämtliche Features, die QF-Test für das Web bietet, können auch hier verwendet werden.

17.1
Electron Client starten

Die Verbindung zur Electron Anwendung gleicht nahezu der einer Web-Anwendung über den WebDriver-Verbindungsmodus (siehe Abschnitt 14.2).

Mit Hilfe des Schnellstart-Assistenten (vgl. Kapitel 3) lässt sich die passende 'Vorbereitung' Sequenz erstellen. Dies ermöglicht den einfachen Start der Anwendung.

Die Electron spezifischen Angaben im Schnellstart-Assistenten werden weiter unten in diesem Kapitel erläutert. Die verbleibenden optionalen Einstellungen sind im Schnellstart-Assistenten selbst beschrieben.

17.1.1
Electron Einstellungen im Schnellstart-Assistenten

Wählen Sie in der Rubrik "Typ der Anwendung" des Schnellstart-Assistenten den Punkt Eine Electron Anwendung.

Geben Sie in der Rubrik "Electron Anwendung" Ihre Anwendung inklusive Pfad an, wobei Sie das Dateiauswahlmenü nutzen können, das über den Button rechts des Eingabefelds aktiviert werden kann. Wenn Sie beim Start der Anwendung eigene Kommandozeilenargumente benötigen, so können Sie diese hier ebenfalls angeben.

In der Rubrik "ChromeDriver" können Sie entweder direkt die passende Electron Version zu Ihrer Applikation angeben oder diese über den Button "Electron Version ermitteln" durch QF-Test feststellen lassen.

Electron basiert auf Node.js, welches in der JavaScript-Laufzeitumgebung "V8" ausgeführt wird. Diese kann mit Hilfe des ChromeDrivers angesteuert werden. Electron kann mit verschiedenen Node-Versionen laufen, die jeweils einen anderen ChromeDriver benötigen. Wenn der passende ChromeDriver bereits installiert ist, zeigt QF-Test dies im unteren Eingabefeld an. Falls dieses Feld leer ist, laden Sie den passenden ChromeDriver durch Klick auf den Button "ChromeDriver herunterladen". Dieser wird dann im Unterverzeichnis chromedriver des QF-Test Installationsverzeichnisses gespeichert.

17.2
Electron spezifische Funktionalität in QF-Test

Neben den Features, die QF-Test für das Web bietet, steht für Electron die nachfolgend beschriebene Funktionalität zur Verfügung.

17.2.1
Native Menüs

Zur Ansteuerung der nativen Menüs der Electron Anwendung verwenden Sie bitte einen 'Auswahl' Knoten, bei dem Sie im Attribut 'QF-Test ID der Komponente' die 'QF-Test ID' des Knotens Webseite des SUT angeben.

Im Attribut 'Detail' tragen Sie den Menüpunkt mit der folgenden Syntax ein: clickmenu:@/<Menüpfad>, wobei statt <Menüpfad> das Menü mit dem oder den Untermenüpunkten, getrennt durch /, einzutragen ist. Wenn Sie zum Beispiel im Menü Datei den Unterpunkt Speichern unter aktivieren wollen, lautet der Eintrag clickmenu:@/Datei/Speichern unter.

17.3
Technische Anmerkung zum Testen von Electron-Anwendungen

Damit QF-Test auf die Electron-APIs zugreifen kann, d.h. um Interaktionen mit nativen Menüs aufzunehmen oder abzuspielen, muss QF-Test die Electron API über den Render-Prozess der getesteten Anwendung aufrufen. Dazu sollte die nodeIntegration Property des BrowserWindow nicht auf false gesetzt werden. Zusätzlich muss contextIsolation deaktiviert bleiben und enableRemoteModule den Wert true behalten.

 mainWindow = new BrowserWindow({
    webPreferences: {
        nodeIntegration: true,    // = Aktueller Standard-Wert
        enableRemoteModule: true, // = Aktueller Standard-Wert
        contextIsolation: false,  // = Aktueller Standard-Wert
        ...
    },
    ...
  })
Beispiel 17.1:  Einfaches Beispiel für eine Electron Anwendung, die gut getestet werden kann

Wenn Sie vermeiden wollen, dass die vollständige Node-Integration im Render-Prozess zugänglich ist, können Sie die API-Integration mit Hilfe eines preload-Skripts verfügbar machen:

  mainWindow = new BrowserWindow({
    webPreferences: {
        nodeIntegration: false,
        ...
        preload: `${__dirname}/preload.js` // absolute pathname required
    },
    ...
  })
Beispiel 17.2:  Die Einstellungen für den eingeschränkten Node Zugriff
  // Expose require API in test mode:
  if (process.env.NODE_ENV === 'test') {
    window.electronRequire = require;
  }
Beispiel 17.3:  Die zugehörige Datei preload.js

Da QF-Test die NODE_ENV-Umgebungsvariable immer mit dem Wert test belegt, können Sie hierdurch dynamisch die Zugriffssicherheit während des Tests auf die benötigten Werte herabsetzen:

  const inTestMode = (process.env.NODE_ENV === 'test');
  mainWindow = new BrowserWindow({
    webPreferences: {
        nodeIntegration: ! inTestMode,
        enableRemoteModule: inTestMode,
        contextIsolation: ! inTestMode,
        ...
    },
    ...
  })
Beispiel 17.4:  Dynamisches Beispiel für eine Electron Anwendung, die gut getestet werden kann