Goniometro - Goniometro e server selenio
Come discusso in precedenza, Protractor è un framework di test end-to-end open source per applicazioni Angular e AngularJS. È il programma Node.js. D'altra parte, Selenium è un framework di automazione del browser che include Selenium Server, le API WebDriver e i driver del browser WebDriver.
Goniometro con selenio
Se parliamo della congiunzione di Goniometro e Selenio, Goniometro può lavorare con il server Selenium per fornire un'infrastruttura di test automatizzata. L'infrastruttura può simulare l'interazione dell'utente con un'applicazione angolare in esecuzione in un browser o su un dispositivo mobile. La congiunzione di Goniometro e Selenio può essere suddivisa in tre partizioni, ovvero test, server e Browser, come mostrato nel diagramma seguente:
Selenium WebDriver Processes
Come abbiamo visto nel diagramma sopra, un test con Selenium WebDriver coinvolge i seguenti tre processi:
- Gli script di test
- Il server
- Il browser
In questa sezione, discutiamo la comunicazione tra questi tre processi.
Comunicazione tra script di test e server
La comunicazione tra i primi due processi - gli script di test e il server dipende dal funzionamento di Selenium Server. In altre parole, possiamo dire che il modo in cui il server Selenium è in esecuzione darà la forma al processo di comunicazione tra gli script di test e il server.
Il server Selenium può essere eseguito localmente sulla nostra macchina come Selenium Server autonomo (selenium-server-standalone.jar) oppure può essere eseguito in remoto tramite un servizio (Sauce Labs). In caso di server Selenium autonomo, ci sarebbe una comunicazione http tra Node.js e il server selenium.
Comunicazione tra il server e il browser
Come sappiamo, il server è responsabile dell'inoltro dei comandi al browser dopo aver interpretato gli stessi dagli script di test. Ecco perché anche il server e il browser richiedono un mezzo di comunicazione e qui la comunicazione avviene con l'aiuto diJSON WebDriver Wire Protocol. Il browser esteso con Browser Driver che viene utilizzato per interpretare i comandi.
Il concetto di cui sopra sui processi Selenium WebDriver e la loro comunicazione può essere compreso con l'aiuto del seguente diagramma:
Mentre si lavora con Goniometro, il primo processo, ovvero lo script di test, viene eseguito utilizzando Node.js ma prima di eseguire qualsiasi azione sul browser invierà un comando aggiuntivo per assicurarsi che l'applicazione in prova sia stabilizzata.
Configurazione di Selenium Server
Selenium Server agisce come un server proxy tra il nostro script di test e il driver del browser. Fondamentalmente inoltra il comando dal nostro script di test al WebDriver e restituisce le risposte dal WebDriver al nostro script di test. Ci sono le seguenti opzioni per impostare il server Selenium che sono incluse inconf.js file di script di test -
Server selenio autonomo
Se vogliamo eseguire il server sulla nostra macchina locale, dobbiamo installare un server selenio autonomo. Il prerequisito per installare un server selenium autonomo è JDK (Java Development Kit). Dobbiamo avere JDK installato sulla nostra macchina locale. Possiamo verificarlo eseguendo il seguente comando dalla riga di comando:
java -version
Ora abbiamo la possibilità di installare e avviare Selenium Server manualmente o dallo script di test.
Installazione e avvio manuale del server Selenium
Per installare e avviare manualmente il server Selenium, è necessario utilizzare lo strumento da riga di comando WebDriver-Manager fornito con Goniometro. I passaggi per l'installazione e l'avvio del server Selenium sono i seguenti:
Step 1- Il primo passo è installare il server Selenium e ChromeDriver. Può essere fatto con l'aiuto dell'esecuzione del seguente comando:
webdriver-manager update
Step 2- Successivamente, dobbiamo avviare il server. Può essere fatto con l'aiuto dell'esecuzione del seguente comando:
webdriver-manager start
Step 3- Alla fine abbiamo bisogno di impostare seleniumAddress nel file di configurazione all'indirizzo del server in esecuzione. L'indirizzo predefinito sarebbehttp://localhost:4444/wd/hub.
Avvio del server Selenium da uno script di test
Per avviare il server Selenium da uno script di test, dobbiamo impostare le seguenti opzioni nel nostro file di configurazione:
Location of jar file - Dobbiamo impostare la posizione del file jar per il server Selenium autonomo nel file di configurazione impostando seleniumServerJar.
Specifying the port- Dobbiamo anche specificare la porta da utilizzare per avviare il Selenium Server autonomo. Può essere specificato nel file di configurazione impostando seleniumPort. La porta predefinita è 4444.
Array of command line options- Abbiamo anche bisogno di impostare l'array di opzioni della riga di comando da passare al server. Può essere specificato nel file di configurazione impostando seleniumArgs. Se hai bisogno di un elenco completo di array di comandi, avvia il server con l'estensione-help bandiera.
Lavorare con Remote Selenium Server
Un'altra opzione per eseguire il nostro test è utilizzare il server Selenium da remoto. Il prerequisito per utilizzare il server in remoto è che dobbiamo avere un account con un servizio che ospita il server. Mentre lavoriamo con Goniometro, abbiamo il supporto integrato per i seguenti servizi che ospitano il server:
TestObject
Per utilizzare TestObject come server Selenium remoto, dobbiamo impostare testobjectUser, il nome utente del nostro account TestObject e testobjectKey, la chiave API del nostro account TestObject.
BrowserStack
Per utilizzare BrowserStack come server Selenium remoto, dobbiamo impostare browserstackUser, il nome utente del nostro account BrowserStack e browserstackKey, la chiave API del nostro account BrowserStack.
Sauce Labs
Per utilizzare Sauce Labs come server Selenium remoto, dobbiamo impostare sauceUser, il nome utente del nostro account Sauce Labs e SauceKey, la chiave API del nostro account Sauce Labs.
Kobiton
Per utilizzare Kobiton come server Selenium remoto dobbiamo impostare kobitonUser, il nome utente del nostro account Kobiton e kobitonKey, la chiave API del nostro account Kobiton.
Connessione diretta al driver del browser senza utilizzare Selenium Server
Un'altra opzione per eseguire il nostro test è connettersi direttamente al driver del browser senza utilizzare il server Selenium. Goniometro può testare direttamente, senza l'uso di Selenium Server, su Chrome e Firefox impostando directConnect: true nel file di configurazione.
Configurazione del browser
Prima di configurare e impostare il browser, dobbiamo sapere quali browser sono supportati da Protractor. Di seguito è riportato l'elenco dei browser supportati da Goniometro:
- ChromeDriver
- FirefoxDriver
- SafariDriver
- IEDriver
- Appium-iOS/Safari
- Appium-Android/Chrome
- Selendroid
- PhantomJS
Per l'impostazione e la configurazione del browser, dobbiamo passare al file di configurazione di Protractor perché la configurazione del browser viene eseguita all'interno dell'oggetto delle funzionalità del file di configurazione.
Configurazione di Chrome
Per configurare il browser Chrome, dobbiamo impostare l'oggetto delle funzionalità come segue
capabilities: {
'browserName': 'chrome'
}
Possiamo anche aggiungere opzioni specifiche per Chrome che sono nidificate in chromeOptions e il suo elenco completo può essere visto su https://sites.google.com/a/chromium.org/chromedriver/capabilities.
Ad esempio, se si desidera aggiungere il contatore FPS in alto a destra, è possibile farlo come segue nel file di configurazione:
capabilities: {
'browserName': 'chrome',
'chromeOptions': {
'args': ['show-fps-counter=true']
}
},
Configurazione di Firefox
Per configurare il browser Firefox, è necessario impostare l'oggetto funzionalità come segue:
capabilities: {
'browserName': 'firefox'
}
Possiamo anche aggiungere opzioni specifiche per Firefox che sono annidate nell'oggetto moz: firefoxOptions e il suo elenco completo può essere visto su https://github.com/mozilla/geckodriver#firefox-capabilities.
Ad esempio, se vuoi eseguire il test su Firefox in modalità provvisoria, puoi farlo come segue nel file di configurazione:
capabilities: {
'browserName': 'firefox',
'moz:firefoxOptions': {
'args': ['—safe-mode']
}
},
Configurazione di un altro browser
Per configurare qualsiasi altro browser diverso da Chrome o Firefox, è necessario installare un file binario separato da https://docs.seleniumhq.org/download/.
Configurazione di PhantonJS
In realtà, PhantomJS non è più supportato a causa dei suoi problemi di arresto anomalo. Invece di quello si consiglia di utilizzare Chrome headless o Firefox headless. Possono essere impostati come segue:
Per configurare Chrome headless, dobbiamo avviare Chrome con il flag –headless come segue -
capabilities: {
'browserName': 'chrome',
'chromeOptions': {
'args': [“--headless”, “--disable-gpu”, “--window-size=800,600”]
}
},
Per configurare Firefox headless, è necessario avviare Firefox con l'estensione –headless bandiera come segue -
capabilities: {
'browserName': 'firefox',
'moz:firefoxOptions': {
'args': [“--headless”]
}
},
Configurazione di più browser per il test
Possiamo anche testare su più browser. Per questo dobbiamo usare l'opzione di configurazione multiCapabilities come segue:
multiCapabilities: [{
'browserName': 'chrome'
},{
'browserName': 'firefox'
}]
Quale Framework?
Due framework di test BDD (Behavior driven development), Jasmine e Mocha sono supportati da Goniometro. Entrambi i framework sono basati su JavaScript e Node.js. La sintassi, il report e lo scaffolding, necessari per scrivere e gestire i test, sono forniti da questi framework.
Successivamente, vediamo come possiamo installare vari framework:
Quadro Jasmine
È il framework di test predefinito per Protractor. Quando installi Goniometro, otterrai la versione 2.x di Jasmine con esso. Non è necessario installarlo separatamente.
Quadro moka
Mocha è un altro framework di test JavaScript in esecuzione fondamentalmente su Node.js. Per utilizzare Mocha come framework di test, è necessario utilizzare l'interfaccia BDD (Behavior driven development) e le asserzioni Chai con Chai As Promised. L'installazione può essere eseguita con l'aiuto dei seguenti comandi:
npm install -g mocha
npm install chai
npm install chai-as-promised
Come puoi vedere, l'opzione -g viene utilizzata durante l'installazione di mocha, è perché abbiamo installato Goniometro a livello globale utilizzando l'opzione -g. Dopo averlo installato, dobbiamo richiedere e configurare Chai all'interno dei nostri file di prova. Può essere fatto come segue:
var chai = require('chai');
var chaiAsPromised = require('chai-as-promised');
chai.use(chaiAsPromised);
var expect = chai.expect;
Dopodiché, possiamo usare Chai As Promised come tale -
expect(myElement.getText()).to.eventually.equal('some text');
Ora, dobbiamo impostare la proprietà del framework su mocha del file di configurazione aggiungendo framework: 'mocha'. Le opzioni come 'reporter' e 'slow' per mocha possono essere aggiunte nel file di configurazione come segue:
mochaOpts: {
reporter: "spec", slow: 3000
}
Quadro di cetriolo
Per utilizzare Cucumber come nostro framework di test, dobbiamo integrarlo con Goniometro con l'opzione framework custom. L'installazione può essere eseguita con l'aiuto dei seguenti comandi
npm install -g cucumber
npm install --save-dev protractor-cucumber-framework
Come puoi vedere, l'opzione -g viene utilizzata durante l'installazione di Cucumber, è perché abbiamo installato Goniometro globalmente, cioè con l'opzione -g. Successivamente, dobbiamo impostare la proprietà framework sucustom del file di configurazione aggiungendo framework: 'custom' e frameworkPath: 'Protractor-cucumber-framework' al file di configurazione denominato cucumberConf.js.
Il codice di esempio mostrato di seguito è un file cucumberConf.js di base che può essere utilizzato per eseguire i file delle caratteristiche del cetriolo con Goniometro -
exports.config = {
seleniumAddress: 'http://localhost:4444/wd/hub',
baseUrl: 'https://angularjs.org/',
capabilities: {
browserName:'Firefox'
},
framework: 'custom',
frameworkPath: require.resolve('protractor-cucumber-framework'),
specs: [
'./cucumber/*.feature'
],
// cucumber command line options
cucumberOpts: {
require: ['./cucumber/*.js'],
tags: [],
strict: true,
format: ["pretty"],
'dry-run': false,
compiler: []
},
onPrepare: function () {
browser.manage().window().maximize();
}
};