ºÝºÝߣ

ºÝºÝߣShare a Scribd company logo
Jak to zrobi? w JavaScript
Mini warsztat automatyzacji test¨®w
Podzi?kowania
? Chcia?bym na wst?pie podzi?kowa? ?ukaszowi ?ukasikowi i Wojtkowi ?uczakowi za
inspiracje i pomoc w zmaganiach z JavaScript.
Wst?p
? Materia? mini warsztatu zak?ada, ?e uczestnik posiada
? podstawow? wiedz? o testowanie aplikacji web
? podstawow? wiedz? z zakresu programowania w dowolnym j?zyku
? podstawow? wiedz? o css i xpath
? Materia? nie ma za zadanie nauczy? programowania w JavaScript
? Materia? dostarcza i opisuje wzorce, dzi?ki kt¨®rym mo?na stworzy? testy nie znaj?c
dok?adnie JavaScript
? Repozytorium z przyk?adami znajduje si? pod adresem
https://github.com/jacekokrojek/jak-to-zrobic-w-js
node.js
? ?rodowisko pozwalaj?ce wykonywa? kod JavaScript
? Podstawowe komendy:
? node ¨C uruchamia kod JavaScript
? node ¨C uruchamia interpreter
? node <plik> - uruchamia kod z pliku
? npm ¨C zarz?dza pakietami
? npm install [nazwa_modu?u][@wersja] [- g]
? npm ls
? npm uninstall
Zadanie
Uruchom pow?ok? JavaScript, zdefiniuj poni?sze zmienne i wykorzystaj polecenie
console.log() do wy?wietlenia ich warto?ci.
var manuTitle = "Strona g?¨®wna";
var pageTitle = "Agile & Automation Days " + "| Konferencja i Warsztaty";
var year = 2015;
var pageTitleWithYear = pageTitle + " " + year;
Zadanie
Uruchom pow?ok? JavaScript, zdefiniuj poni?sze zmienne i wykorzystaj polecenie
console.log() do wy?wietlenia ich warto?ci.
var menuTitle0 = "Strona g?¨®wna";
var menuTitle1 = "O wydarzeniu";
var menuTitles = [menuTitle0, menuTitle1]
Czy umiesz wy?wietli? ka?dy z element¨®w tablicy menuTitles osobno ?
Zadanie
Uruchom pow?ok? JavaScript, zdefiniuj poni?sze zmienne i wykorzystaj polecenie
console.log() do wy?wietlenia ich warto?ci.
var menuItem0 = { index: 0, title: "Strona g?¨®wna"};
var menuItem1 = { index: 1, title: "O wydarzeniu "};
var menuItems = [ menuItem0, menuItem1 ];
Czy umiesz wy?wietli? tytu? ka?dego z element¨®w tablicy osobno?
Protractor
? Pracuje w ?rodowisku node.js
? Umo?liwia testowanie zachowania aplikacji w przegl?darce
? Bazuj?ce na funkcjach Selenium Webdriver
? Dost?p do funkcji WebDriver poprzez obiekt browser lub browser.driver
? Rozszerza i u?atwia korzystanie funkcji WebDriver
? Do uruchomienia testu wymagane s? dwa elementy
? Plik konfiguracyjny
? Kod testu
Jasmine
? Narz?dzie organizuj?ce testy w JavaScript
? Dostarcza szablon testu
? Dostarcza bogaty zestaw asercje (ang.machers) np.
? expect(true).toEqual(true)
? expect(true).not.toEqual(false)
Przyk?adowy test
? Przyk?adowy kod ??cz?cy funkcje Protractor i Jasmine
describe('Agile & Automation Days homepage', function() {
it('should have Agile & Automation Days ¡­'), function(){
var expectedTitle = "Agile & Automation Days " +"
"| Konferencja i Warsztaty";
browser.driver.get('http://aadays.pl/');
var pageTitle = browser.driver.getTitle();
expect(pageTitle).toEqual(expectedTitle);
});
Gulp
? Narz?dzie buduj?ce i automatyzuj?ce zadania
? Konwencja code over configuration
function runSpec(confName, suiteName) {
return gulp.src([])
.pipe(protractor ( { configFile: confName, args: ['--suite', suiteName] } ) )
.on('end', function() {
console.log('Test completed.');
})
.on('error', function (e) {
throw e
});
}
Zadanie
Uruchom przyk?adowy test poleceniem:
gulp test-minimal
JasmineReporter
? Dla Jasmin zosta?o napisanych kilka modu?¨®w poprawiaj?cych spos¨®b raportowania
wynik¨®w.
? jasmine-reporters ¨C zapisuje wyniki w formacie JUnitXML
? jasmine-spec-reporter ¨C Wy?wietla wyniki wykorzystuj?c nazwy specyfikacji oraz
test¨®w
? protractor-html-screenshot-reporter ¨C zapisuje wyniki test¨®w w formacie HTML
wraz z screenshot'ami tworzonymi na zako¨½czenie testu
Zadanie
Uruchom przyk?adowy test poleceniem:
gulp test-test-with-reporter
Por¨®wnaj spos¨®b raportowanie wynik¨®w.
element
? Funkcja element pozwala na odnajdywanie elementu na stronie
element(by.css('p.copyright'));
element(by.xpath('//h3[contains(text(),"Agenda")]'));
element(by.tagName ('a'));
? Na elemencie mo?emy wykonywa? operacje
element(by.css('p.copyright')).isPresent();
element(by.css('p.copyright')).getText();
element(by.css('p.copyright')).getInnerHtml();
element(by.css('a.btn-big')).click();
Zadanie
Uzupe?nij kod 2 kolejnych specyfikacji
element.all
? Funkcja element.all pozwala na odnajdywanie wielu element¨®w na stronie i tworzenie
z nich tablicy
element.all(by.css('div.frontpage-block-wrap > h3'));
element.all(by.css('figcaption'));
? Do element¨®w w tablicy mamy dost?p poprzez funkcje
element.all(by.css('div.frontpage-block-wrap > h3')).first();
element.all(by.css('div.frontpage-block-wrap > h3')).last();
element.all(by.css('div.frontpage-block-wrap > h3')).get(1);
Zadanie
Uzupe?nij kod 2 kolejnych specyfikacji
* Wykonaj zadanie korzystaj?c z funkcji map oraz filter
require and export
? Funkcja require wczytuje modu? JavaScript
var homePage = require("home.js"); // var homePage = require("home");
var homePage = require("data.json"); // var homePage = require("data");
? Funcja export pozwala wyeksportowa? obiekt
module.exports = {config: {db_host:"localhost", db_port: "3303" }}
module.exports = new HomePage();
Page object pattern w JavaScript
? W JavaScript istnieje kilka mo?liwo?ci tworzenia obiektu, jedna z nich to
var HomePage = function() {
this.registerButton = element(by.css('a.btn-big'));
this.get = function() {
browser.driver.get('http://aadays.pl/');
};
this.clickRegisterButton = function() {
this.registerButton.click();
};
};
var homePage = new HomePage(); // module.exports = new HomePage();
Zadanie
Zmodyfikuj kod obiektu home.js o funkcj? pozwalaj?c? na sprawdzanie tekst¨®w link¨®w
w stopce strony. Nast?pnie zmodyfikuj specyfikacj? home.spec.js tak aby sprawdza?a
poprawno?? link¨®w w stopce.
Zmodyfikuj specyfikacje smoke.spec.js tak aby zawiera?a test sprawdzaj?cy czy
u?ytkownik jest przeniesiony do strony 'O wydarzeniu' po naci?ni?ciu odpowiedniego
link'a ze stopki.
Importowanie modu?¨®w
? Mo?emy tworzy? modu?y nie tylko dla stron ale r¨®wnie? dla ich powtarzaj?cych si?
fragment¨®w a nast?pnie importowa? je do wybranych stron.
var HomePage = function() {
this.footer = require('../modules/footer');
¡­
}
module.exports = new HomePage();
Zadanie
Wyodr?bnij modu? stopki i zaimportuj go do modu?u home.js
Dziedziczenie w JavaScript
? Klasa bazowa i jej funkcje powinna by? zdefiniowana jak poni?ej
var Page = function () {};
Page.prototype.load = function (url) {
browser.get('http://aadays.pl/' + url);
};
Page.prototype.getTitle = function() {
return browser.driver.getTitle();
};
module.exports = Page;
Dziedziczenie w JavaScript
? Obiekt dziedzicz?cy powinien nale?y zdefiniowa? w nast?puj?cy spos¨®b:
var Page = require('page');
var HomePage = function() {
Page.call(this);
this.registerButton = element(by.css('a.btn-big'));
this.clickRegisterButton = function() {
this.registerButton.click();
};
};
HomePage.prototype = Object.create(Page.prototype);
HomePage.prototype.constructor = HomePage;
Zadanie
Bazuj?c na pliku page.example.js stw¨®rz obiekt paga.js, kt¨®ry b?dzie funkcj? bazow?
dla obiektu homePage. Dodaj do obiektu page.js modu? stopki.
Zmodyfikuj pliki event.js oraz home.js tak aby zdefiniowane w nich obiekty dziedziczy?y
funkcje z obiektu page.
Co jeszcze
? Repozytorium zawiera przyk?ady
? Przesuwania element¨®w strony
? Logowania
? Pobierania informacji o czasie ?adowania strony
? Screenshot'y

More Related Content

What's hot (20)

JavaScript, Modu?y
JavaScript, Modu?yJavaScript, Modu?y
JavaScript, Modu?y
Mariusz Nowak
?
Laravelowe paczki do uwierzytelniania
Laravelowe paczki do uwierzytelnianiaLaravelowe paczki do uwierzytelniania
Laravelowe paczki do uwierzytelniania
Laravel Poland MeetUp
?
Hugo - make webdev fun again
Hugo - make webdev fun againHugo - make webdev fun again
Hugo - make webdev fun again
Marcin Gajda
?
Functional widgets in Rails
Functional widgets in RailsFunctional widgets in Rails
Functional widgets in Rails
Sebastian Sito
?
Automatyzacja utrzymania jako?ci w ?rodowisku PHP
Automatyzacja utrzymania jako?ci w ?rodowisku PHPAutomatyzacja utrzymania jako?ci w ?rodowisku PHP
Automatyzacja utrzymania jako?ci w ?rodowisku PHP
Laravel Poland MeetUp
?
Podstawy AngularJS
Podstawy AngularJSPodstawy AngularJS
Podstawy AngularJS
Sages
?
Daj si? wyr?czy? - Joomla Day Polska 2014
Daj si? wyr?czy? - Joomla Day Polska 2014Daj si? wyr?czy? - Joomla Day Polska 2014
Daj si? wyr?czy? - Joomla Day Polska 2014
Tomasz Dziuda
?
Co nowego w VS 2013 dla programist¨®w ASP.NET?
Co nowego w VS 2013 dla programist¨®w ASP.NET?Co nowego w VS 2013 dla programist¨®w ASP.NET?
Co nowego w VS 2013 dla programist¨®w ASP.NET?
Bartlomiej Zass
?
DynamoDB ¨C podstawy modelowania danych dla opornych
DynamoDB ¨C podstawy modelowania danych dla opornychDynamoDB ¨C podstawy modelowania danych dla opornych
DynamoDB ¨C podstawy modelowania danych dla opornych
The Software House
?
Platforma Kontentowa
Platforma KontentowaPlatforma Kontentowa
Platforma Kontentowa
Rafa? Filipek
?
Apache http server - proste i zaawansowane przypadki u?ycia
Apache http server - proste i zaawansowane przypadki u?yciaApache http server - proste i zaawansowane przypadki u?ycia
Apache http server - proste i zaawansowane przypadki u?ycia
Wojciech Lichota
?
Pan Oponka - Biografia
Pan Oponka - BiografiaPan Oponka - Biografia
Pan Oponka - Biografia
Filip Tepper
?
Metaprogramowanie w JS
Metaprogramowanie w JSMetaprogramowanie w JS
Metaprogramowanie w JS
Dawid Rusnak
?
Wprowadzenie do PHPUnit
Wprowadzenie do PHPUnitWprowadzenie do PHPUnit
Wprowadzenie do PHPUnit
Micha? Kowalik
?
[BDD] Introduction to Behat (PL)
[BDD] Introduction to Behat (PL)[BDD] Introduction to Behat (PL)
[BDD] Introduction to Behat (PL)
Piotr Pelczar
?
Xdebug ¨C debugowanie i profilowanie aplikacji PHP
Xdebug ¨C debugowanie i profilowanie aplikacji PHPXdebug ¨C debugowanie i profilowanie aplikacji PHP
Xdebug ¨C debugowanie i profilowanie aplikacji PHP
3camp
?
Obalamy mity o wydajno?ci frameworka Laravel cz. II
Obalamy mity o wydajno?ci frameworka Laravel cz. IIObalamy mity o wydajno?ci frameworka Laravel cz. II
Obalamy mity o wydajno?ci frameworka Laravel cz. II
Laravel Poland MeetUp
?
Seam framework in_action
Seam framework in_actionSeam framework in_action
Seam framework in_action
Micha? Orman
?
Hugo - make webdev fun again
Hugo - make webdev fun againHugo - make webdev fun again
Hugo - make webdev fun again
Marcin Gajda
?
Functional widgets in Rails
Functional widgets in RailsFunctional widgets in Rails
Functional widgets in Rails
Sebastian Sito
?
Automatyzacja utrzymania jako?ci w ?rodowisku PHP
Automatyzacja utrzymania jako?ci w ?rodowisku PHPAutomatyzacja utrzymania jako?ci w ?rodowisku PHP
Automatyzacja utrzymania jako?ci w ?rodowisku PHP
Laravel Poland MeetUp
?
Podstawy AngularJS
Podstawy AngularJSPodstawy AngularJS
Podstawy AngularJS
Sages
?
Daj si? wyr?czy? - Joomla Day Polska 2014
Daj si? wyr?czy? - Joomla Day Polska 2014Daj si? wyr?czy? - Joomla Day Polska 2014
Daj si? wyr?czy? - Joomla Day Polska 2014
Tomasz Dziuda
?
Co nowego w VS 2013 dla programist¨®w ASP.NET?
Co nowego w VS 2013 dla programist¨®w ASP.NET?Co nowego w VS 2013 dla programist¨®w ASP.NET?
Co nowego w VS 2013 dla programist¨®w ASP.NET?
Bartlomiej Zass
?
DynamoDB ¨C podstawy modelowania danych dla opornych
DynamoDB ¨C podstawy modelowania danych dla opornychDynamoDB ¨C podstawy modelowania danych dla opornych
DynamoDB ¨C podstawy modelowania danych dla opornych
The Software House
?
Apache http server - proste i zaawansowane przypadki u?ycia
Apache http server - proste i zaawansowane przypadki u?yciaApache http server - proste i zaawansowane przypadki u?ycia
Apache http server - proste i zaawansowane przypadki u?ycia
Wojciech Lichota
?
Pan Oponka - Biografia
Pan Oponka - BiografiaPan Oponka - Biografia
Pan Oponka - Biografia
Filip Tepper
?
Metaprogramowanie w JS
Metaprogramowanie w JSMetaprogramowanie w JS
Metaprogramowanie w JS
Dawid Rusnak
?
[BDD] Introduction to Behat (PL)
[BDD] Introduction to Behat (PL)[BDD] Introduction to Behat (PL)
[BDD] Introduction to Behat (PL)
Piotr Pelczar
?
Xdebug ¨C debugowanie i profilowanie aplikacji PHP
Xdebug ¨C debugowanie i profilowanie aplikacji PHPXdebug ¨C debugowanie i profilowanie aplikacji PHP
Xdebug ¨C debugowanie i profilowanie aplikacji PHP
3camp
?
Obalamy mity o wydajno?ci frameworka Laravel cz. II
Obalamy mity o wydajno?ci frameworka Laravel cz. IIObalamy mity o wydajno?ci frameworka Laravel cz. II
Obalamy mity o wydajno?ci frameworka Laravel cz. II
Laravel Poland MeetUp
?
Seam framework in_action
Seam framework in_actionSeam framework in_action
Seam framework in_action
Micha? Orman
?

Viewers also liked (15)

Wszystko o infografice
Wszystko o infograficeWszystko o infografice
Wszystko o infografice
SzkoleniaCognity
?
Testy akceptacyjne w pigu?ce.
Testy akceptacyjne w pigu?ce.   Testy akceptacyjne w pigu?ce.
Testy akceptacyjne w pigu?ce.
Future Processing
?
How to Improve Your Technical Test Ability - AADays 2015 Keynote
How to Improve Your Technical Test Ability - AADays 2015 KeynoteHow to Improve Your Technical Test Ability - AADays 2015 Keynote
How to Improve Your Technical Test Ability - AADays 2015 Keynote
Alan Richardson
?
Fierce Case Study: Symetra
Fierce Case Study: SymetraFierce Case Study: Symetra
Fierce Case Study: Symetra
Fierce Inc
?
2016 Retention Strategies
2016 Retention Strategies2016 Retention Strategies
2016 Retention Strategies
Mike KEPPELL
?
Women_Alternative_Investments_Brochure_v14web
Women_Alternative_Investments_Brochure_v14webWomen_Alternative_Investments_Brochure_v14web
Women_Alternative_Investments_Brochure_v14web
Brian Clavin
?
DEEPAK
DEEPAKDEEPAK
DEEPAK
Deepak tanwar
?
Politie verklaart oorlog aan dronken bestuurders
Politie verklaart oorlog aan dronken bestuurdersPolitie verklaart oorlog aan dronken bestuurders
Politie verklaart oorlog aan dronken bestuurders
Thierry Debels
?
2013 09 21 §â§Ö§Ô§å§Ý§ñ§â§ß§í§Ö §Ó§í§â§Ñ§Ø§Ö§ß§Ú§ñ
2013 09 21 §â§Ö§Ô§å§Ý§ñ§â§ß§í§Ö §Ó§í§â§Ñ§Ø§Ö§ß§Ú§ñ 2013 09 21 §â§Ö§Ô§å§Ý§ñ§â§ß§í§Ö §Ó§í§â§Ñ§Ø§Ö§ß§Ú§ñ
2013 09 21 §â§Ö§Ô§å§Ý§ñ§â§ß§í§Ö §Ó§í§â§Ñ§Ø§Ö§ß§Ú§ñ
Yandex
?
7th annual clinical trials summit 2016
7th annual clinical trials summit 20167th annual clinical trials summit 2016
7th annual clinical trials summit 2016
Deepak Raj (2,000+Connections)
?
§ß§Ñ§Ô§Ý§ñ§Õ§ß§Ñ§ñ §ç§Ñ§â§Ñ§Ü§ä§Ö§â§Ú§ã§ä§Ú§Ü§Ñ §á§â§à§Ö§Ü§ä§Ñ
§ß§Ñ§Ô§Ý§ñ§Õ§ß§Ñ§ñ §ç§Ñ§â§Ñ§Ü§ä§Ö§â§Ú§ã§ä§Ú§Ü§Ñ §á§â§à§Ö§Ü§ä§Ñ§ß§Ñ§Ô§Ý§ñ§Õ§ß§Ñ§ñ §ç§Ñ§â§Ñ§Ü§ä§Ö§â§Ú§ã§ä§Ú§Ü§Ñ §á§â§à§Ö§Ü§ä§Ñ
§ß§Ñ§Ô§Ý§ñ§Õ§ß§Ñ§ñ §ç§Ñ§â§Ñ§Ü§ä§Ö§â§Ú§ã§ä§Ú§Ü§Ñ §á§â§à§Ö§Ü§ä§Ñ
kulibin
?
Application and Server Security
Application and Server SecurityApplication and Server Security
Application and Server Security
Brian Pontarelli
?
ÀµÉù´¨´´Òâѧ
ÀµÉù´¨´´ÒâѧÀµÉù´¨´´Òâѧ
ÀµÉù´¨´´Òâѧ
kkjjkevin03
?
Community economic development plan
Community economic development planCommunity economic development plan
Community economic development plan
Elizabeth Matthews
?
How to Improve Your Technical Test Ability - AADays 2015 Keynote
How to Improve Your Technical Test Ability - AADays 2015 KeynoteHow to Improve Your Technical Test Ability - AADays 2015 Keynote
How to Improve Your Technical Test Ability - AADays 2015 Keynote
Alan Richardson
?
Fierce Case Study: Symetra
Fierce Case Study: SymetraFierce Case Study: Symetra
Fierce Case Study: Symetra
Fierce Inc
?
2016 Retention Strategies
2016 Retention Strategies2016 Retention Strategies
2016 Retention Strategies
Mike KEPPELL
?
Women_Alternative_Investments_Brochure_v14web
Women_Alternative_Investments_Brochure_v14webWomen_Alternative_Investments_Brochure_v14web
Women_Alternative_Investments_Brochure_v14web
Brian Clavin
?
Politie verklaart oorlog aan dronken bestuurders
Politie verklaart oorlog aan dronken bestuurdersPolitie verklaart oorlog aan dronken bestuurders
Politie verklaart oorlog aan dronken bestuurders
Thierry Debels
?
2013 09 21 §â§Ö§Ô§å§Ý§ñ§â§ß§í§Ö §Ó§í§â§Ñ§Ø§Ö§ß§Ú§ñ
2013 09 21 §â§Ö§Ô§å§Ý§ñ§â§ß§í§Ö §Ó§í§â§Ñ§Ø§Ö§ß§Ú§ñ 2013 09 21 §â§Ö§Ô§å§Ý§ñ§â§ß§í§Ö §Ó§í§â§Ñ§Ø§Ö§ß§Ú§ñ
2013 09 21 §â§Ö§Ô§å§Ý§ñ§â§ß§í§Ö §Ó§í§â§Ñ§Ø§Ö§ß§Ú§ñ
Yandex
?
§ß§Ñ§Ô§Ý§ñ§Õ§ß§Ñ§ñ §ç§Ñ§â§Ñ§Ü§ä§Ö§â§Ú§ã§ä§Ú§Ü§Ñ §á§â§à§Ö§Ü§ä§Ñ
§ß§Ñ§Ô§Ý§ñ§Õ§ß§Ñ§ñ §ç§Ñ§â§Ñ§Ü§ä§Ö§â§Ú§ã§ä§Ú§Ü§Ñ §á§â§à§Ö§Ü§ä§Ñ§ß§Ñ§Ô§Ý§ñ§Õ§ß§Ñ§ñ §ç§Ñ§â§Ñ§Ü§ä§Ö§â§Ú§ã§ä§Ú§Ü§Ñ §á§â§à§Ö§Ü§ä§Ñ
§ß§Ñ§Ô§Ý§ñ§Õ§ß§Ñ§ñ §ç§Ñ§â§Ñ§Ü§ä§Ö§â§Ú§ã§ä§Ú§Ü§Ñ §á§â§à§Ö§Ü§ä§Ñ
kulibin
?
Application and Server Security
Application and Server SecurityApplication and Server Security
Application and Server Security
Brian Pontarelli
?
ÀµÉù´¨´´Òâѧ
ÀµÉù´¨´´ÒâѧÀµÉù´¨´´Òâѧ
ÀµÉù´¨´´Òâѧ
kkjjkevin03
?
Community economic development plan
Community economic development planCommunity economic development plan
Community economic development plan
Elizabeth Matthews
?

Similar to AADays 2015 - Jak to zrobic w JavaScript (20)

AngularJS - podstawy
AngularJS - podstawyAngularJS - podstawy
AngularJS - podstawy
Apptension
?
Testy funkcjonalne
Testy funkcjonalneTesty funkcjonalne
Testy funkcjonalne
PROSKAR
?
?rodowisko testowe pod REST-a
?rodowisko testowe pod REST-a?rodowisko testowe pod REST-a
?rodowisko testowe pod REST-a
Future Processing
?
Service workers - b?d? online, nawet kiedy jeste? offline!
Service workers - b?d? online, nawet kiedy jeste? offline!Service workers - b?d? online, nawet kiedy jeste? offline!
Service workers - b?d? online, nawet kiedy jeste? offline!
The Software House
?
Using Red Gate SQL Doc for database documentation
Using Red Gate SQL Doc for database documentationUsing Red Gate SQL Doc for database documentation
Using Red Gate SQL Doc for database documentation
Mariusz Koprowski
?
Webinar - Podstawy Node.js
Webinar - Podstawy Node.jsWebinar - Podstawy Node.js
Webinar - Podstawy Node.js
Wojciech Kaniuka
?
Google Web Toolkit
Google Web ToolkitGoogle Web Toolkit
Google Web Toolkit
bartosz_w
?
Micha? Dec - Quality in Clouds
Micha? Dec - Quality in CloudsMicha? Dec - Quality in Clouds
Micha? Dec - Quality in Clouds
kraqa
?
WebView security on iOS (PL)
WebView security on iOS (PL)WebView security on iOS (PL)
WebView security on iOS (PL)
lpilorz
?
Co nowego w ASP.NET MVC 4?
Co nowego w ASP.NET MVC 4?Co nowego w ASP.NET MVC 4?
Co nowego w ASP.NET MVC 4?
tkryskiewicz
?
[TestWarez 2017] Architektura test¨®w automatycznych dla wielomodu?owej aplika...
[TestWarez 2017] Architektura test¨®w automatycznych dla wielomodu?owej aplika...[TestWarez 2017] Architektura test¨®w automatycznych dla wielomodu?owej aplika...
[TestWarez 2017] Architektura test¨®w automatycznych dla wielomodu?owej aplika...
Stowarzyszenie Jako?ci System¨®w Informatycznych (SJSI)
?
react-pl.pdf
react-pl.pdfreact-pl.pdf
react-pl.pdf
ssuser65180a
?
Mvc frontend-trug-02-2011
Mvc frontend-trug-02-2011Mvc frontend-trug-02-2011
Mvc frontend-trug-02-2011
Rafal Piekarski
?
Bohater UI bez front end developera ?
Bohater UI bez front end developera ?Bohater UI bez front end developera ?
Bohater UI bez front end developera ?
Quick-Solution
?
WordUp Tr¨®jmiasto - Sage 9 w praktyce
WordUp Tr¨®jmiasto - Sage 9 w praktyceWordUp Tr¨®jmiasto - Sage 9 w praktyce
WordUp Tr¨®jmiasto - Sage 9 w praktyce
Dawid Urba¨½ski
?
Grok Artykul
Grok ArtykulGrok Artykul
Grok Artykul
Wojciech Lichota
?
Modularny JavaScript - meet.js
Modularny JavaScript - meet.jsModularny JavaScript - meet.js
Modularny JavaScript - meet.js
Patryk Jar
?
Patronage 2016 Windows 10 Warsztaty
Patronage 2016 Windows 10 WarsztatyPatronage 2016 Windows 10 Warsztaty
Patronage 2016 Windows 10 Warsztaty
intive
?
HTML5 - now or later
HTML5 - now or laterHTML5 - now or later
HTML5 - now or later
Kasia Drzyzga
?
AngularJS - podstawy
AngularJS - podstawyAngularJS - podstawy
AngularJS - podstawy
Apptension
?
Testy funkcjonalne
Testy funkcjonalneTesty funkcjonalne
Testy funkcjonalne
PROSKAR
?
Service workers - b?d? online, nawet kiedy jeste? offline!
Service workers - b?d? online, nawet kiedy jeste? offline!Service workers - b?d? online, nawet kiedy jeste? offline!
Service workers - b?d? online, nawet kiedy jeste? offline!
The Software House
?
Using Red Gate SQL Doc for database documentation
Using Red Gate SQL Doc for database documentationUsing Red Gate SQL Doc for database documentation
Using Red Gate SQL Doc for database documentation
Mariusz Koprowski
?
Google Web Toolkit
Google Web ToolkitGoogle Web Toolkit
Google Web Toolkit
bartosz_w
?
Micha? Dec - Quality in Clouds
Micha? Dec - Quality in CloudsMicha? Dec - Quality in Clouds
Micha? Dec - Quality in Clouds
kraqa
?
WebView security on iOS (PL)
WebView security on iOS (PL)WebView security on iOS (PL)
WebView security on iOS (PL)
lpilorz
?
Co nowego w ASP.NET MVC 4?
Co nowego w ASP.NET MVC 4?Co nowego w ASP.NET MVC 4?
Co nowego w ASP.NET MVC 4?
tkryskiewicz
?
Bohater UI bez front end developera ?
Bohater UI bez front end developera ?Bohater UI bez front end developera ?
Bohater UI bez front end developera ?
Quick-Solution
?
WordUp Tr¨®jmiasto - Sage 9 w praktyce
WordUp Tr¨®jmiasto - Sage 9 w praktyceWordUp Tr¨®jmiasto - Sage 9 w praktyce
WordUp Tr¨®jmiasto - Sage 9 w praktyce
Dawid Urba¨½ski
?
Modularny JavaScript - meet.js
Modularny JavaScript - meet.jsModularny JavaScript - meet.js
Modularny JavaScript - meet.js
Patryk Jar
?
Patronage 2016 Windows 10 Warsztaty
Patronage 2016 Windows 10 WarsztatyPatronage 2016 Windows 10 Warsztaty
Patronage 2016 Windows 10 Warsztaty
intive
?

AADays 2015 - Jak to zrobic w JavaScript

  • 1. Jak to zrobi? w JavaScript Mini warsztat automatyzacji test¨®w
  • 2. Podzi?kowania ? Chcia?bym na wst?pie podzi?kowa? ?ukaszowi ?ukasikowi i Wojtkowi ?uczakowi za inspiracje i pomoc w zmaganiach z JavaScript.
  • 3. Wst?p ? Materia? mini warsztatu zak?ada, ?e uczestnik posiada ? podstawow? wiedz? o testowanie aplikacji web ? podstawow? wiedz? z zakresu programowania w dowolnym j?zyku ? podstawow? wiedz? o css i xpath ? Materia? nie ma za zadanie nauczy? programowania w JavaScript ? Materia? dostarcza i opisuje wzorce, dzi?ki kt¨®rym mo?na stworzy? testy nie znaj?c dok?adnie JavaScript ? Repozytorium z przyk?adami znajduje si? pod adresem https://github.com/jacekokrojek/jak-to-zrobic-w-js
  • 4. node.js ? ?rodowisko pozwalaj?ce wykonywa? kod JavaScript ? Podstawowe komendy: ? node ¨C uruchamia kod JavaScript ? node ¨C uruchamia interpreter ? node <plik> - uruchamia kod z pliku ? npm ¨C zarz?dza pakietami ? npm install [nazwa_modu?u][@wersja] [- g] ? npm ls ? npm uninstall
  • 5. Zadanie Uruchom pow?ok? JavaScript, zdefiniuj poni?sze zmienne i wykorzystaj polecenie console.log() do wy?wietlenia ich warto?ci. var manuTitle = "Strona g?¨®wna"; var pageTitle = "Agile & Automation Days " + "| Konferencja i Warsztaty"; var year = 2015; var pageTitleWithYear = pageTitle + " " + year;
  • 6. Zadanie Uruchom pow?ok? JavaScript, zdefiniuj poni?sze zmienne i wykorzystaj polecenie console.log() do wy?wietlenia ich warto?ci. var menuTitle0 = "Strona g?¨®wna"; var menuTitle1 = "O wydarzeniu"; var menuTitles = [menuTitle0, menuTitle1] Czy umiesz wy?wietli? ka?dy z element¨®w tablicy menuTitles osobno ?
  • 7. Zadanie Uruchom pow?ok? JavaScript, zdefiniuj poni?sze zmienne i wykorzystaj polecenie console.log() do wy?wietlenia ich warto?ci. var menuItem0 = { index: 0, title: "Strona g?¨®wna"}; var menuItem1 = { index: 1, title: "O wydarzeniu "}; var menuItems = [ menuItem0, menuItem1 ]; Czy umiesz wy?wietli? tytu? ka?dego z element¨®w tablicy osobno?
  • 8. Protractor ? Pracuje w ?rodowisku node.js ? Umo?liwia testowanie zachowania aplikacji w przegl?darce ? Bazuj?ce na funkcjach Selenium Webdriver ? Dost?p do funkcji WebDriver poprzez obiekt browser lub browser.driver ? Rozszerza i u?atwia korzystanie funkcji WebDriver ? Do uruchomienia testu wymagane s? dwa elementy ? Plik konfiguracyjny ? Kod testu
  • 9. Jasmine ? Narz?dzie organizuj?ce testy w JavaScript ? Dostarcza szablon testu ? Dostarcza bogaty zestaw asercje (ang.machers) np. ? expect(true).toEqual(true) ? expect(true).not.toEqual(false)
  • 10. Przyk?adowy test ? Przyk?adowy kod ??cz?cy funkcje Protractor i Jasmine describe('Agile & Automation Days homepage', function() { it('should have Agile & Automation Days ¡­'), function(){ var expectedTitle = "Agile & Automation Days " +" "| Konferencja i Warsztaty"; browser.driver.get('http://aadays.pl/'); var pageTitle = browser.driver.getTitle(); expect(pageTitle).toEqual(expectedTitle); });
  • 11. Gulp ? Narz?dzie buduj?ce i automatyzuj?ce zadania ? Konwencja code over configuration function runSpec(confName, suiteName) { return gulp.src([]) .pipe(protractor ( { configFile: confName, args: ['--suite', suiteName] } ) ) .on('end', function() { console.log('Test completed.'); }) .on('error', function (e) { throw e }); }
  • 12. Zadanie Uruchom przyk?adowy test poleceniem: gulp test-minimal
  • 13. JasmineReporter ? Dla Jasmin zosta?o napisanych kilka modu?¨®w poprawiaj?cych spos¨®b raportowania wynik¨®w. ? jasmine-reporters ¨C zapisuje wyniki w formacie JUnitXML ? jasmine-spec-reporter ¨C Wy?wietla wyniki wykorzystuj?c nazwy specyfikacji oraz test¨®w ? protractor-html-screenshot-reporter ¨C zapisuje wyniki test¨®w w formacie HTML wraz z screenshot'ami tworzonymi na zako¨½czenie testu
  • 14. Zadanie Uruchom przyk?adowy test poleceniem: gulp test-test-with-reporter Por¨®wnaj spos¨®b raportowanie wynik¨®w.
  • 15. element ? Funkcja element pozwala na odnajdywanie elementu na stronie element(by.css('p.copyright')); element(by.xpath('//h3[contains(text(),"Agenda")]')); element(by.tagName ('a')); ? Na elemencie mo?emy wykonywa? operacje element(by.css('p.copyright')).isPresent(); element(by.css('p.copyright')).getText(); element(by.css('p.copyright')).getInnerHtml(); element(by.css('a.btn-big')).click();
  • 16. Zadanie Uzupe?nij kod 2 kolejnych specyfikacji
  • 17. element.all ? Funkcja element.all pozwala na odnajdywanie wielu element¨®w na stronie i tworzenie z nich tablicy element.all(by.css('div.frontpage-block-wrap > h3')); element.all(by.css('figcaption')); ? Do element¨®w w tablicy mamy dost?p poprzez funkcje element.all(by.css('div.frontpage-block-wrap > h3')).first(); element.all(by.css('div.frontpage-block-wrap > h3')).last(); element.all(by.css('div.frontpage-block-wrap > h3')).get(1);
  • 18. Zadanie Uzupe?nij kod 2 kolejnych specyfikacji * Wykonaj zadanie korzystaj?c z funkcji map oraz filter
  • 19. require and export ? Funkcja require wczytuje modu? JavaScript var homePage = require("home.js"); // var homePage = require("home"); var homePage = require("data.json"); // var homePage = require("data"); ? Funcja export pozwala wyeksportowa? obiekt module.exports = {config: {db_host:"localhost", db_port: "3303" }} module.exports = new HomePage();
  • 20. Page object pattern w JavaScript ? W JavaScript istnieje kilka mo?liwo?ci tworzenia obiektu, jedna z nich to var HomePage = function() { this.registerButton = element(by.css('a.btn-big')); this.get = function() { browser.driver.get('http://aadays.pl/'); }; this.clickRegisterButton = function() { this.registerButton.click(); }; }; var homePage = new HomePage(); // module.exports = new HomePage();
  • 21. Zadanie Zmodyfikuj kod obiektu home.js o funkcj? pozwalaj?c? na sprawdzanie tekst¨®w link¨®w w stopce strony. Nast?pnie zmodyfikuj specyfikacj? home.spec.js tak aby sprawdza?a poprawno?? link¨®w w stopce. Zmodyfikuj specyfikacje smoke.spec.js tak aby zawiera?a test sprawdzaj?cy czy u?ytkownik jest przeniesiony do strony 'O wydarzeniu' po naci?ni?ciu odpowiedniego link'a ze stopki.
  • 22. Importowanie modu?¨®w ? Mo?emy tworzy? modu?y nie tylko dla stron ale r¨®wnie? dla ich powtarzaj?cych si? fragment¨®w a nast?pnie importowa? je do wybranych stron. var HomePage = function() { this.footer = require('../modules/footer'); ¡­ } module.exports = new HomePage();
  • 23. Zadanie Wyodr?bnij modu? stopki i zaimportuj go do modu?u home.js
  • 24. Dziedziczenie w JavaScript ? Klasa bazowa i jej funkcje powinna by? zdefiniowana jak poni?ej var Page = function () {}; Page.prototype.load = function (url) { browser.get('http://aadays.pl/' + url); }; Page.prototype.getTitle = function() { return browser.driver.getTitle(); }; module.exports = Page;
  • 25. Dziedziczenie w JavaScript ? Obiekt dziedzicz?cy powinien nale?y zdefiniowa? w nast?puj?cy spos¨®b: var Page = require('page'); var HomePage = function() { Page.call(this); this.registerButton = element(by.css('a.btn-big')); this.clickRegisterButton = function() { this.registerButton.click(); }; }; HomePage.prototype = Object.create(Page.prototype); HomePage.prototype.constructor = HomePage;
  • 26. Zadanie Bazuj?c na pliku page.example.js stw¨®rz obiekt paga.js, kt¨®ry b?dzie funkcj? bazow? dla obiektu homePage. Dodaj do obiektu page.js modu? stopki. Zmodyfikuj pliki event.js oraz home.js tak aby zdefiniowane w nich obiekty dziedziczy?y funkcje z obiektu page.
  • 27. Co jeszcze ? Repozytorium zawiera przyk?ady ? Przesuwania element¨®w strony ? Logowania ? Pobierania informacji o czasie ?adowania strony ? Screenshot'y