protractorAan de slag met gradenboog


Opmerkingen

Gradenboog is een end-to-end testframework voor AngularJS-toepassingen.

Gradenboog is een wrapper (gebouwd op de bovenkant) rond Selenium WebDriver, dus het bevat alle functies die beschikbaar zijn in de Selenium WebDriver. Bovendien biedt Protractor enkele nieuwe locatiestrategieën en -functies die zeer nuttig zijn om de AngularJS-toepassing te automatiseren. Voorbeelden hiervan zijn dingen als: waitForAngular, By.binding, By.repeater, By.textarea, By.model, WebElement.all, WebElement.evaluate, etc.

versies

Versie Gegevens vrijgeven
0.0.1 2016/08/01

Eerste test met gradenboog

Gradenboog heeft slechts twee bestanden nodig om het eerste test-, spec (testcode) en configuratiebestand uit te voeren. Het spec-bestand bevat testcode en de andere bevat configuratiegegevens zoals spec-bestandspad, browserdetails, test-url, framework-parameters enz. Om de eerste test te schrijven zullen we alleen seleniumserveradres en spec-bestandspad verstrekken. De andere parameters zoals browser , time-out, kader wordt opgehaald naar standaardwaarden.

De standaardbrowser voor Gradenboog is Chrome.

conf.js - Configuratiebestand

exports.config = {
  seleniumAddress: 'http://localhost:4444/wd/hub',
  specs: ['spec.js']
};
 

spec.js - Spec (testcode) bestand

describe('first test in protractor', function() {
  it('should verify title', function() {
    browser.get('https://angularjs.org');

    expect(browser.getTitle()).toEqual('AngularJS — Superheroic JavaScript MVW Framework');
  });
});
 

seleniumAddress - Pad naar de server waarop de webdriverserver actief is.

specs - Een array-element dat het pad van testbestanden bevat. De meerdere paden kunnen worden opgegeven met door komma's gescheiden waarden.

beschrijven - Syntaxis van Jasmine framework. syntaxis describe

Gradenboog installeren en instellen (op Windows)

Vereisten: Gradenboog vereist dat de volgende afhankelijkheden worden geïnstalleerd voorafgaand aan de installatie:

  • Java JDK 1.7 of hoger
  • Node.js v4 of hoger

Installatie:

Download en installeer Node.js vanaf deze URL: https://nodejs.org/en/

Om te zien of de Node.js-installatie succesvol is, kun je de omgevingsvariabelen controleren. Het 'Pad' onder Systeemvariabelen wordt automatisch bijgewerkt.

Padvariabele om de installatie van Node.js te controleren


U kunt ook hetzelfde controleren door het commando npm -version in te voeren in de opdrachtprompt die u de geïnstalleerde versie zal geven.

opdracht om de installatie van Node.js te controleren


Nu kan Gradenboog op twee manieren worden geïnstalleerd: lokaal of wereldwijd.

We kunnen gradenboog in een opgegeven map of projectmaplocatie installeren. Als we in een projectmap installeren, moeten we elke keer als we uitvoeren alleen vanaf die locatie uitvoeren.

Om lokaal in de projectmap te installeren, navigeert u naar de projectmap en typt u de opdracht

npm install protractor


Om Protractor wereldwijd te installeren, voert u de opdracht uit:

$ npm install -g protractor
 

Hiermee worden twee opdrachtregelprogramma's geïnstalleerd, protractor en webdriver-manager .
Run protractor --version om te controleren of de gradenboog met succes is geïnstalleerd.

webdriver-manager wordt gebruikt om de binaire bestanden van het stuurprogramma van de browser te downloaden en de selenium-server te starten.
Download de binaire bestanden van het stuurprogramma van de browser met:

$ webdriver-manager update
 

Start de selenium-server met:

$ webdriver-manager start
 

Om het internet explorer-stuurprogramma te downloaden, voert u de opdracht webdriver-manager update --ie in de opdrachtprompt uit. Hiermee wordt IEDriverServer.exe in uw seleniummap gedownload

In afwachting van tests

Met Gradenboog kunnen tests worden ingesteld als in behandeling. Dit betekent dat gradenboog de test niet uitvoert, maar in plaats daarvan uitvoert:

Pending:
1) Test Name
Temporarily disabled with xit
 

Of, indien uitgeschakeld met xdescribe ():

Pending:
1) Test Name
No reason given
 

combinaties

  • Een xit () binnen een xdescribe () zal de xit () -reactie uitvoeren.
  • Een xit () in een fdescribe () wordt nog steeds behandeld als in behandeling.
  • Een fit () in een xdescribe () wordt nog steeds uitgevoerd en er worden geen openstaande tests uitgevoerd.

Gradenboog: E2E-tests voor hoekige bedrijfstoepassingen

Gradenboog installatie en configuratie

Stap 1 : Download en installeer NodeJS vanaf hier. Zorg ervoor dat u de nieuwste versie van het knooppunt hebt. Hier gebruik ik node v7.8.0. U moet de Java Development Kit (JDK) hebben geïnstalleerd om selenium te kunnen gebruiken.

Stap 2 : Open uw terminal en typ de volgende opdracht in om de gradenboog wereldwijd te installeren.

npm install -g protractor
 

Hiermee worden twee hulpprogramma's geïnstalleerd, zoals gradenboog en webdriverbeheer. U kunt uw gradenbooginstallatie verifiëren door het volgende commando te volgen: protractor –version. Als Gradenboog met succes is geïnstalleerd, geeft het systeem de geïnstalleerde versie weer (versie 5.1.1). Anders moet u de installatie opnieuw controleren. Stap 3: Update de webdrivermanager om de benodigde binaire bestanden te downloaden.

webdriver-manager update
 

Stap 4: Volgend commando zal een Selenium Server opstarten. Met deze stap wordt de webdrivermanager op de achtergrond uitgevoerd en wordt geluisterd naar tests die via gradenboog worden uitgevoerd.

webdriver-manager start U kunt informatie over de status van de server bekijken op http://localhost:4444/wd/hub/static/resource/hub.html.

Eerste testcase schrijven met gradenboog:

Voordat we beginnen met het schrijven van de testcase, moeten we twee bestanden voorbereiden, namelijk het configuratiebestand en het spec-bestand.

In configuratiebestand:

//In conf.js
exports.config = {
    baseUrl: ‘http://localhost:8800/adminapp’,
    seleniumAddress: ‘http://localhost:4444/wd/hub',
    specs: [‘product/product_test.js’],
    directConnect : true,
    capabilities :{
        browserName: ‘chrome’
    }
}
 

Basiskennis van de in het configuratiebestand gebruikte terminologieën:

baseUrl - Een basis-URL voor uw applicatie die wordt getest.

seleniumAddress - Om verbinding te maken met een Selenium Server die al actief is.

specs - Locatie van uw spec-bestand

directConnect : true - Hiermee maakt u rechtstreeks verbinding met de stuurprogramma's van de browser.

mogelijkheden - gebruik de optie voor mogelijkheden als u in één browser test. Gebruik de array multiCapabilities als u in meerdere browsers test.

U kunt meer configuratie-optie te vinden van hier . Ze hebben alle mogelijke terminologie met de definitie ervan beschreven.

In Spec-bestand:

//In product_test.js

    describe(‘Angular Enterprise Boilerplate’, function() {
      it('should have a title', function() {
        browser.get('http://localhost:8800/adminapp’);
        expect(browser.getTitle()).toEqual(‘Angular Enterprise Boilerplate’);
      });
    });
 

Basisbegrip van de in het spec-bestand gebruikte terminologieën:

Standaard gebruikt Protractor het jasmijnraamwerk voor zijn testinterface. de syntaxis 'beschrijven' en 'het' komt uit het jasmijnkader. U kunt hier meer over leren. Eerste testcase uitvoeren:

Voordat u de testcase uitvoert, moet u ervoor zorgen dat uw webdriverbeheer en uw toepassing op verschillende tabbladen van uw terminal worden uitgevoerd.

Voer nu de test uit met:

Protractor app/conf.js
 

U zou moeten zien dat de Chrome-browser wordt geopend met de URL van uw toepassing en zichzelf sluit. De testoutput moet 1 tests, 1 bewering, 0 fouten zijn.

Bravo! U hebt met succes uw eerste testcase uitgevoerd.

Selectieve looptests

Gradenboog kan selectief groepen tests uitvoeren met behulp van fdescribe () in plaats van beschrijven ().

fdescribe('first group',()=>{
    it('only this test will run',()=>{
        //code that will run
    });
});
describe('second group',()=>{
    it('this code will not run',()=>{
        //code that won't run
    });
});
 

Gradenboog kan selectief tests uitvoeren binnen groepen met behulp van fit () in plaats van it ().

describe('first group',()=>{
    fit('only this test will run',()=>{
        //code that will run
    });
    it('this code will not run',()=>{
        //code that won't run
    });
});
 

Als er geen fit () in een fdescribe () staat, wordt elke it () uitgevoerd. Een fit () blokkeert echter de aanroepen () binnen dezelfde descript () of fdescribe ().

fdescribe('first group',()=>{
    fit('only this test will run',()=>{
        //code that will run
    });
    it('this code will not run',()=>{
        //code that won't run
    });
});
 

Zelfs als een fit () voorkomt in een descript () in plaats van een fdescribe (), wordt deze uitgevoerd. Ook wordt it () binnen een fdescribe () die geen fit () bevat, uitgevoerd.

fdescribe('first group',()=>{
    it('this test will run',()=>{
        //code that will run
    });
    it('this test will also run',()=>{
        //code that will also run
    });
});
describe('second group',()=>{
    it('this code will not run',()=>{
        //code that won't run
    });
    fit('this code will run',(){
        //code that will run
    });
});
 

Schrijf een gradenboogtest

Open een nieuwe opdrachtregel of terminalvenster en maak een schone map om te testen.

Gradenboog heeft twee bestanden nodig om te worden uitgevoerd, een spec-bestand en een configuratiebestand.

Laten we beginnen met een eenvoudige test die naar het voorbeeld van de takenlijst op de AngularJS-website navigeert en een nieuw taakitem aan de lijst toevoegt.

Kopieer het volgende naar spec.js

beschrijven ('angularjs homepage todo list', function () {it ('zou een todo moeten toevoegen', function () {browser.get (' https://angularjs.org ');

element(by.model('todoList.todoText')).sendKeys('write first protractor test');
element(by.css('[value="add"]')).click();

var todoList = element.all(by.repeater('todo in todoList.todos'));
expect(todoList.count()).toEqual(3);
expect(todoList.get(2).getText()).toEqual('write first protractor test');

// You wrote your first test, cross it off the list
todoList.get(2).element(by.css('input')).click();
var completedAmount = element.all(by.css('.done-true'));
expect(completedAmount.count()).toEqual(2);});});