2014-07-18 14 views
15

Ogni esempio di goniometro che riesco a trovare su Internet sembra utilizzare browser.get con un URI Web.Apertura di un file con il rapportatore

browser.get('http://localhost:8000'); 

Mi piacerebbe usare selenio per semplice navigare in un percorso file:// in modo che non ho bisogno di un server web locale in esecuzione al fine di eseguire i test. Tutto ciò di cui ho bisogno è una semplice pagina HTML e alcune risorse.

Questo non sembra funzionare però.

browser.get('file:///Users/myusername/dev/mpproject/spec/support/index.html'); 

Quando si incolla quell'URI nella finestra del mio browser ottengo una pagina HTML. Quando provo ad aprirlo con il goniometro ottengo un timeout.

Come è possibile eseguire i test su questa pagina con il rapportatore? La risposta ideale funzionerà con un percorso file relativo dalla radice myproject.

risposta

-4

Penso che ci sia un errore di battitura. Nel metodo "ottieni" dovresti includere l'URL tra virgolette "".

Provare a utilizzare le virgolette come di seguito:

WebDriver driver=new FirefoxDriver(); 
driver.get('file:///E:/Programming%20Samples/HTML%20Samples/First%20Program.html'); 
+0

[apici doppie e singole sono equivalenti in JavaScript] (http://stackoverflow.com/q/242813/574190) in modo che non poteva fare la differenza. Ho provato però e non funziona. –

+0

Per quanto ne so, quando si utilizza il metodo dirver.get è necessario fornire doppi apici ... Quando si usano virgolette singole si lamenta un messaggio di errore compilato. – Uday

0

Qual è il log degli errori?

Questo potrebbe essere qualcosa collegato a "Caricamento" angolare. Per questo puoi provare browser.driver.ignoreSynchronization = true;

Il registro degli errori sarà sicuramente di aiuto nel tentativo di comprendere il problema.

13

Sto postando la soluzione che ho found in here che mi ha aiutato a eseguire Protractor con un protocollo di file.

Per impostazione predefinita, goniometro utilizzare data:text/html,<html></html> come resetUrl, ma location.replace dal data: al protocollo file: non è consentito (ci arriveremo "non consentito risorsa locale" errore), quindi abbiamo sostituire resetUrl con uno con la file: protocollo:

exports.config = { 
    // ... 

    baseUrl: 'file:///absolute/path/to/your/project/index.html', 

    onPrepare: function() { 

     // By default, Protractor use data:text/html,<html></html> as resetUrl, but 
     // location.replace from the data: to the file: protocol is not allowed 
     // (we'll get ‘not allowed local resource’ error), so we replace resetUrl with one 
     // with the file: protocol (this particular one will open system's root folder) 
     browser.resetUrl = 'file://'; 
    } 

    // ... 
}; 

Se si desidera eseguire un percorso relativo alla cartella del progetto, allora si potrebbe utilizzare strumenti di Node.js, perché goniometro viene eseguito in un ambiente Node.js. Ad esempio, __dirname restituirà un percorso assoluto a una directory in cui viene salvato il file di configurazione del goniometro. Come uso risultato:

exports.config = { 
    // ... 

    baseUrl: 'file://' + __dirname + '/spec/support/index.html' 

    // ... 
}; 

Inoltre, se l'applicazione non fa richieste XHR ad alcuni punti finali, non consentite dalla file:, potrebbe essere necessario eseguire il browser di test con le bandiere personalizzate. Nel mio caso era Chrome:

exports.config = { 
    // ... 

    capabilities: { 
     browserName: 'chrome', 
     chromeOptions: { 
      // --allow-file-access-from-files - allow XHR from file:// 
      args: ['allow-file-access-from-files'] 
     } 
    } 

    // ... 
} 
+1

Ti benedica per questa meravigliosa soluzione! Tutto è esattamente ciò di cui avevo bisogno –

+0

Come aprire il file html locale nella specifica del test, quindi? Ho provato a non usare 'browser.get' e' browser.get() 'senza argomenti, supponendo che avrebbe quindi aperto la baseUrl specificata. Ma nessuno dei due ha funzionato, ma non carica la pagina e di conseguenza i test falliscono. – CGFoX

+0

In realtà, ha funzionato con 'browser.get ('')' ma solo dopo aver aggiunto 'browser.ignoreSynchronization = true;' all'interno di 'onPrepare'. – CGFoX

4

Ho avuto lo stesso errore e risolto applicando la correzione di Michael Radionov ma rimuovendo la baseUrl. Qui è la mia messa a punto:

protractor.config.js:

exports.config = { 

    capabilities: { 
    browserName: 'chrome' 
    }, 

    specs: [ 
    '*.js' 
    ], 

    onPrepare: function() { 
    // By default, Protractor use data:text/html,<html></html> as resetUrl, but 
    // location.replace from the data: to the file: protocol is not allowed 
    // (we'll get ‘not allowed local resource’ error), so we replace resetUrl with one 
    // with the file: protocol (this particular one will open system's root folder) 
    browser.ignoreSynchronization = true; 
    browser.waitForAngular(); 
    browser.sleep(500); 
    browser.resetUrl = 'file:///'; 
    } 

}; 

e2etest.JS:

'use strict'; 

describe("Buttons' tests are started", function() { 

    it('Should retrieve 20 records into table', function() { 

     browser.get('file:///C:/Users/path_to_file/index.html'); 

     /* Test codes here */ 

    }); 

}); 
+0

Questo ha risolto il mio problema. Lo combinerei ancora con un baseUrl per avere URL più belli nelle specifiche del test. Per me, ha funzionato anche senza la funzione sleep, che probabilmente accelera il test. – CGFoX

Problemi correlati