SlideShare a Scribd company logo
1 of 27
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 – uruchamia kod JavaScript
• node – uruchamia interpreter
• node <plik> - uruchamia kod z pliku
 npm – 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 – zapisuje wyniki w formacie JUnitXML
 jasmine-spec-reporter – Wyświetla wyniki wykorzystując nazwy specyfikacji oraz
testów
 protractor-html-screenshot-reporter – 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

Functional widgets in Rails
Functional widgets in RailsFunctional widgets in Rails
Functional widgets in Rails
Sebastian Sito
 
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
 

What's hot (20)

JavaScript, Moduły
JavaScript, ModułyJavaScript, Moduły
JavaScript, Moduły
 
Laravelowe paczki do uwierzytelniania
Laravelowe paczki do uwierzytelnianiaLaravelowe paczki do uwierzytelniania
Laravelowe paczki do uwierzytelniania
 
Hugo - make webdev fun again
Hugo - make webdev fun againHugo - make webdev fun again
Hugo - make webdev fun again
 
Functional widgets in Rails
Functional widgets in RailsFunctional widgets in Rails
Functional widgets in Rails
 
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
 
Podstawy AngularJS
Podstawy AngularJSPodstawy AngularJS
Podstawy AngularJS
 
Behat
BehatBehat
Behat
 
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
 
Torquebox
TorqueboxTorquebox
Torquebox
 
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?
 
DynamoDB – podstawy modelowania danych dla opornych
DynamoDB – podstawy modelowania danych dla opornychDynamoDB – podstawy modelowania danych dla opornych
DynamoDB – podstawy modelowania danych dla opornych
 
Platforma Kontentowa
Platforma KontentowaPlatforma Kontentowa
Platforma Kontentowa
 
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
 
Pan Oponka - Biografia
Pan Oponka - BiografiaPan Oponka - Biografia
Pan Oponka - Biografia
 
Metaprogramowanie w JS
Metaprogramowanie w JSMetaprogramowanie w JS
Metaprogramowanie w JS
 
Wprowadzenie do PHPUnit
Wprowadzenie do PHPUnitWprowadzenie do PHPUnit
Wprowadzenie do PHPUnit
 
[BDD] Introduction to Behat (PL)
[BDD] Introduction to Behat (PL)[BDD] Introduction to Behat (PL)
[BDD] Introduction to Behat (PL)
 
Xdebug – debugowanie i profilowanie aplikacji PHP
Xdebug – debugowanie i profilowanie aplikacji PHPXdebug – debugowanie i profilowanie aplikacji PHP
Xdebug – debugowanie i profilowanie aplikacji PHP
 
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
 
Seam framework in_action
Seam framework in_actionSeam framework in_action
Seam framework in_action
 

Viewers also liked

Women_Alternative_Investments_Brochure_v14web
Women_Alternative_Investments_Brochure_v14webWomen_Alternative_Investments_Brochure_v14web
Women_Alternative_Investments_Brochure_v14web
Brian Clavin
 
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
 
賴聲川創意學
賴聲川創意學賴聲川創意學
賴聲川創意學
kkjjkevin03
 

Viewers also liked (15)

Wszystko o infografice
Wszystko o infograficeWszystko o infografice
Wszystko o infografice
 
Testy akceptacyjne w pigułce.
Testy akceptacyjne w pigułce.   Testy akceptacyjne w pigułce.
Testy akceptacyjne w pigułce.
 
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
 
Fierce Case Study: Symetra
Fierce Case Study: SymetraFierce Case Study: Symetra
Fierce Case Study: Symetra
 
2016 Retention Strategies
2016 Retention Strategies2016 Retention Strategies
2016 Retention Strategies
 
Women_Alternative_Investments_Brochure_v14web
Women_Alternative_Investments_Brochure_v14webWomen_Alternative_Investments_Brochure_v14web
Women_Alternative_Investments_Brochure_v14web
 
DEEPAK
DEEPAKDEEPAK
DEEPAK
 
Politie verklaart oorlog aan dronken bestuurders
Politie verklaart oorlog aan dronken bestuurdersPolitie verklaart oorlog aan dronken bestuurders
Politie verklaart oorlog aan dronken bestuurders
 
2013 09 21 регулярные выражения
2013 09 21 регулярные выражения 2013 09 21 регулярные выражения
2013 09 21 регулярные выражения
 
7th annual clinical trials summit 2016
7th annual clinical trials summit 20167th annual clinical trials summit 2016
7th annual clinical trials summit 2016
 
MB_newsleter_7_2012
MB_newsleter_7_2012MB_newsleter_7_2012
MB_newsleter_7_2012
 
наглядная характеристика проекта
наглядная характеристика проектанаглядная характеристика проекта
наглядная характеристика проекта
 
Application and Server Security
Application and Server SecurityApplication and Server Security
Application and Server Security
 
賴聲川創意學
賴聲川創意學賴聲川創意學
賴聲川創意學
 
Community economic development plan
Community economic development planCommunity economic development plan
Community economic development plan
 

Similar to AADays 2015 - Jak to zrobic w JavaScript

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

AngularJS - podstawy
AngularJS - podstawyAngularJS - podstawy
AngularJS - podstawy
 
Testy funkcjonalne
Testy funkcjonalneTesty funkcjonalne
Testy funkcjonalne
 
Środowisko testowe pod REST-a
Środowisko testowe pod REST-aŚrodowisko testowe pod REST-a
Środowisko testowe pod REST-a
 
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!
 
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
 
Webinar - Podstawy Node.js
Webinar - Podstawy Node.jsWebinar - Podstawy Node.js
Webinar - Podstawy Node.js
 
Google Web Toolkit
Google Web ToolkitGoogle Web Toolkit
Google Web Toolkit
 
Michał Dec - Quality in Clouds
Michał Dec - Quality in CloudsMichał Dec - Quality in Clouds
Michał Dec - Quality in Clouds
 
WebView security on iOS (PL)
WebView security on iOS (PL)WebView security on iOS (PL)
WebView security on iOS (PL)
 
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?
 
[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...
 
react-pl.pdf
react-pl.pdfreact-pl.pdf
react-pl.pdf
 
Mvc frontend-trug-02-2011
Mvc frontend-trug-02-2011Mvc frontend-trug-02-2011
Mvc frontend-trug-02-2011
 
Bohater UI bez front end developera ?
Bohater UI bez front end developera ?Bohater UI bez front end developera ?
Bohater UI bez front end developera ?
 
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
 
Grok Artykul
Grok ArtykulGrok Artykul
Grok Artykul
 
Modularny JavaScript - meet.js
Modularny JavaScript - meet.jsModularny JavaScript - meet.js
Modularny JavaScript - meet.js
 
5 asp 0d
5 asp 0d5 asp 0d
5 asp 0d
 
Patronage 2016 Windows 10 Warsztaty
Patronage 2016 Windows 10 WarsztatyPatronage 2016 Windows 10 Warsztaty
Patronage 2016 Windows 10 Warsztaty
 
HTML5 - now or later
HTML5 - now or laterHTML5 - now or later
HTML5 - now or later
 

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 – uruchamia kod JavaScript • node – uruchamia interpreter • node <plik> - uruchamia kod z pliku  npm – 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 – zapisuje wyniki w formacie JUnitXML  jasmine-spec-reporter – Wyświetla wyniki wykorzystując nazwy specyfikacji oraz testów  protractor-html-screenshot-reporter – 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