2014-01-09 11 views
5

Für normale Webseiten gibt es verschiedene Werkzeuge, um automatisierte UI-Tests von Anwendungen, z. Selenium. Wie mache ich das für Chrome Packaged Apps? In meinen Anwendungen werden häufig Chrome-App-spezifische APIs verwendet, sodass das Hosten als eine normale Webseite zum Testen nicht funktioniert.Wie kann das Testen von Chrome-Apps automatisiert werden?

Alle Best Practices oder Tools dafür?

Antwort

0

In gewisser Hinsicht denke ich, dass das Testen von Chrome-Apps dem Testen von nativen Anwendungen ähnelt. Typische Ansätze sind das Erstellen zusätzlicher Haken in Ihrem Code für Tests und die Verwendung von vom Betriebssystem bereitgestellten Automatisierungswerkzeugen (Accessibility Services, OSX Automator, etc.) .)

Hier ist eine Sache, die helfen kann:

<path to chrome> --load-and-launch-app=<path to app code directory> 

, die bei der Inbetriebnahme, wird es dazu führen, eine entpackte Version von App-Quellcode zu laden (äquivalent zu schlagen: chrom einer Befehlszeilen Flag unterstützt "entpackte Erweiterung laden ..." auf der Seite chrome: // extensions) und senden Sie dann chrome.app.runtime.onLaunche d Ereignis zu Ihrem Code.

2

Wenn Sie das App-Fenster-Handle erhalten können, wird Selenium Webdriver weiterhin funktionieren. Ich entdeckte dies zufällig, als ich am Ende einer Reihe von fehlgeschlagenen Tests einen Anruf an driver.getAllWindowHandles() hatte. Die Tests sind fehlgeschlagen, weil sie nicht den Verweis auf das Anwendungsfenster-Handle hatten, sondern - unerwartet - den letzten Aufruf, bei dem zwei Fenster-Handles zurückgegeben wurden.

Es scheint, als ob das App-Fenster-Handle nie nach dem Aufruf driver.getAllWindowHandles() erscheint, aber wenn Sie diese Funktion aufrufen, erhält sein Callback schließlich ein Array von Fenster-Handles, die die Browser-Handles [0] und App [1] enthalten . Ich habe dies über Rekursion, aber nicht mit einer einfachen while-Schleife (etwas, was Web-Treiber asynchron ist) zu arbeiten.

Zum Beispiel, wenn Sie die Javascript-Implementierung von Webdriver graben, versuchen Sie den folgenden Test von dieser relevanten bug report.

describe('A chrome app html page', function() { 
    var appHandle = ""; 
    var recursionDepth= 0, maxDepth = 100; // edit as necessary. 
    function getAppWindow(){ 
    browser.driver.getAllWindowHandles().then(function(handles){ 
     if(handles.length == 1){ 
     recursionDepth += 1; 
     if (recursionDepth == maxDepth) return false; 
     getAppWindow(); 
     } 
     if(handles.length == 2){ 
     browser.driver.switchTo().window(handles[1]); 
     browser.driver.getWindowHandle().then(function(currentHandle){ 
      console.log("handles are" + handles); 
      console.log("current handle is " + currentHandle); 
      appHandle = currentHandle; 
     }); 
     } 
    }); 
    } 
    getAppWindow(); 
    it('is on the second window handle', function(){ 
    expect(browser.driver.getWindowHandle()).toEqual(appHandle); 
    }, 20000); 
}); 

Sie müssen die --load-und-Start-app = Flagge irgendwo gesetzt, wie Antony aus helfend hingewiesen hat. Meine Winkelmesserkonfigurationsdatei sieht so aus:

exports.config = { 
    seleniumAddress: '<address of server>', 
    capabilities: { 
    'browserName': 'chrome', 
    'chromeOptions':{ 
     'args': ['load-and-launch-app=<path to app code directory>'] 
    } 
    }, 
    specs: ['<path to tests>'] 
} 
Verwandte Themen