You are on page 1of 19

AUTOMATSKO TESTIRANJE

U automatskom testiranju cemo sve korake pisati u programskom jeziku u kome cemo programu
govoriti sta treba da se desi tj. sta da se ocekuje kada se to nesto uradi.

Jedna od firmi koja prima bez iskustva je Allied Testing.


https://www.alliedtesting.com/about/careers/

Sto se tice samog project managementa imamo jedan veliki problem. Ukoliko ispunimo sva 3
uslova, aplikacija je idealna. Ako se promijeni bar 1 faktor, aplikacija gubi na kvalitetu. U praksi
to izgleda ovako (desna slika):

Mi se obicno nalazimo u donjem dijelu (desna slika), jer ljudi pretezno zele manje da plate.
Scope – opseg aplikacije, tj ono sto je dogovoreno da se uradi.

SCRUM / AGILE Pt 2

Imamo Scrum team koji se sastavljen od potpuno razlicitih uloga u timu (BA, Software
Developer, Design, QA), ali svi imamo isti cilj, tj da aplikacija bude sto bolja.
Dakle na vrhu imamo Prpduct ownera. Iako to bukvalno prevedeno znaci da je to vlasnik nekog
produkta, to nije tako. Njegova uloga je zapravo da bude spona izmedju nas i osoba koje traze da
im se napravi aplikacija (Stake Holder). Na taj nacin su i oni sigurni da mi pravimo ono sto oni
hoce a i da mi pravimo ono sto oni zele. On je prvi na udaru ako nesto ne valja.

Ideja Scruma/Agile jeste da ne postoji sef. Svako bude odgovoran za svoj dio posla.

Drugi dio tima je Development Team gdje smo sami mi (BA, Software Developer, Design, QA) i
sa druge strane imamo Scrum Mastera. To je osoba koja ne mora da ima veze sa nama u smislu
projekta tj aplikacije. Njegov posao je da omoguci da mi odradjujemo nas dio posla bez ikakvih
interakcija. Npr ako nam fali neki alat ili slicno, mi se obracamo SM koji nam omoguci osobu ili
alat koji treba da koristimo (ovo je samo jedna od njegovih funkcija). Obicno postoje i neki
Leadovi koji ce nam govoriti sta cemo raditi.

BRD se mora nekako srociti u neke cjeline koje mogu da iskoriste. To se u Agile zove Produkt
Packlog. BRD se isparca na male cjeline (najcesce Story) i one se spakuju u Backlog. On sadrzi
sve Story za kompletnu aplikaciju. Ideja jeste da imamo male cjeline aplikacije koje se mogu
odraditi u nekom odredjenom periodu. Ako neko da dokument od npr 5000 strana mi ne bismo
znali gdje da pocnemo. Ovaj cijeli Backlog je u vlasnistvu Produkt Ownera. On ga stalno
sredjuje, prioritizuje, odredjuje sta ce se prvo uraditi. Na ostala 2 termina cemo se vratiti poslije.
Scrum ceremonije – To su sastanci kojima mi moramo prisustvovati. Daily je osnovni sastanak
koji se nalazi u jednom sprintu (iteraciji). On se odrzava svaki dan u isto vrijeme i svako od nas
kaze sta je juce radio i sta ce danas da radi. Kaze se danas sam testirao to i to, juce sam to i to
ILI Juce nisam mogao da testiram to i to jer sam bio blokiran (npr jer taj dio aplikacije nio jos
gotov). Vidi se ko je gdje zapeo i sta je problem i kako da ga rijesimo. Na kraju svakog sprinta
imamo 2 sastanka: Sprint Review / Sprint Retrospective. Review je sastanak gdje mi Stake
Holderima prezentujemo to sto smo radili posljednje 2 nedelje. I tu odmah dobijamo od njih
feedback da li smo na pravom putu. U Retrospective ucestvuju samo interni clanovi tima, bez
Stake Holdera i tu govorimo o tome sta je bilo dobro tokom sprinta, sta smo pogrijesili i iz tog
sastanka izvlacimo pouke, sta bi trebalo nastaviti, sta izbeci i kako prevazici probleme.

Prije pocetka sprinta imamo planiranje sprinta. Tu su prisutni svi mi a vodi ga Scrum Master.
Kada napravimo Sprint planing mi smo se obavezali da odradimo to sto smo dogovorili. Sav
posao (Story) u jednom sprintu stavljamo u Sprint Backlog. Tu spadaju svi zadaci koji su
utvrdjeni tokom planiranja. Kada zapocnemo sa jednim taskom, uzimamo ga iz Backloga (To-do
lista) i stavljamo ga u "In Progress".

Kako moze da izgleda Story? Ako je npr zavrsena implementacija Login dugmeta, jedan taj
Story moze da bude "Istestiraj Login". Unutar tog Story mozemo da imamo pod-task, npr "napisi
TC za Login", "izvrsi napisane TC", "izvrsi exploratory testiranje" itd.

Pod "Epic" spadaju svi storiji koji su vezani za taj dioaplikacije ili tu apliakciju. Npr ako imamo
aplikaciju mobilnog bankarstva. U njoj imamo razne podsisteme (pregled stanja, uplate,
mijenjanje valute). Jedan Epic bi bio pregled stanja, tu bi bilo i Testing Story i Development
Story.

Razlika izmedju Agile i Kanban kada vrijeme izvrsenja nije bitna. Najcesce se koristi kod
maintenance.
ORGANIZACIJA TIMA

Svaki od timova ima svog Produkt Ownera i Development team (tu smo i mi) i Scrum Master
koji je zaduzen najcesce za vise tih timova. To ne bi trebalo da bude ukupno vise od 8 osoba.
Svaki od tih timova je zaduzen za odredjeni dio aplikacije. To ne znaci da ostali timovi ne smiju
da se susrecu sa tim dijelom aplikacije, ako naidju na poteskoce, pitaju nas, ako odrade odredjeni
dio posla moraju da posalju nama da nas tim provjeri sta su odradili, da li se poklapa sa nasom
filozofijom, da li ce to da pokvari neki nas servis, a da oni ni ne znaju, jer ipak smo mi to
implementirali.

DEFINITION OF DONE

To je interni dogovor gdje se tim dogovara kada je neki Story gotov. To znaci ako smo npr
developer da Story nije gotov kada samo zavrsimo taj dio aplikacije (Back-End ili Front-End),
Develepoer mora da napise svoje unit testove i tek tada je taj Story gotov (jer smo se tako
dogovorili).

SPRINT GOALS

Cilj koji je zacrtan na pocetku svakog sprinta. Ideja jeste da se dostigne taj cilj. Inace se tim
dogovori ili ga Produkt owner zacrta. To mora da bude nesto izmerljivo (npr ispunjeno 50%
sprinta).
USER STORY

To je pristup kada mi svi imamo glas o samoj aplikaciji. Mi kao testeri zakljucimo da nesto u
aplikaciji nije dobro osmisljeno, moglo bi bolje ili imamo prijedlog. User Story je opis nekog
feature-a iz perspektive nekog iz koje smo testirali. Npr ako smo to testirali iz perspektive
kranjeg korisnika mi US pisemo prijedloge kako da se poboljsa neki feature.

3 kljucne stvari kod pisanje user Story:


As a (role),
I want (feature)
so that (reason)

Pozeljno je da se navedu detaljniji opisi, fotke ili slicno.

OBJEKTNO ORIJENTISANO TESTIRANJE

Razlika izmedju manuelnog i automatskog testiranja:


-Definicija: Automatsko testiranje samo koristi alate/software za izvrsavanje TC, kod manuelnog
covjek izvrsava TC

-Vrijeme izvrsavanja: Automatsko testiranje je mnogo brze, sto ne znaci da je bolje


-Exploratory testing ne moze da radi automatsko testiranje
-Inicijalna ulaganja: Pocetno ulaganje resursa je izuzetno veliko kod automatskog iz razloga sto
je potrebna osoba koja zna automatsko testiranje (iskusniji ljudi, zahtijevaju vecu platu), dok
osoba u manuelnom testiranju odmah moze da pocne sa pisanjem TC i izvrsavanjem
-Pouzdanost: Automatsko je mnogo pouzdanije od manuelnog, zato sto software tj kod ima tacno
napisano sta treba da se uradi i sta da se ocekuje, dok kod manuelnog imamo i ljudski faktor
(raspolozenje, umor etc.)
-Kada se koristi: Automatsko ne mozemo da koristimo na svim vidovima testiranja (npr
regresivno, performance, load, end to end za user interface, API, back end), dok je manuelno
bitnije za exploratory, ad hoc, smoke, usability i AUT (application under test, parametri koji se
ne diraju, govore nam da je testiranje u toku – Code Freeze).

Ne postoji tacan aspekt gdje mozemo da ih podijelimo.


PROGRAMIRANJE / PROGRAMSKI JEZIK

To je formalni jezik koji se moze koristiti za kontrolu ponasanja masine tj racunara koja izvrsava
taj kod. Svi softweri moraju imati neki prevodilac koji ce jezik na kome smo mi pisali preveli na
masinski jezik. Za JAVA se taj prevodilac zove Compiler.

Koristi se zapovedni govor (imperativ). Svaka linija koda je jedna naredba (statement) –
zavrsava se sa tacka zarezom.

Pored naredbe postoji i blok naredba (velike viticaste zagrade).

NAREDBE – UPRAVLJANE TOKOM

1. Naredbe selekcije (if / switch)


2. Iterativne naredbe ili petlje (for, while, do-while)
3. Naredbe bezuslovnog granjanja ili skokok (break / continue)

If – najprostija naredba koju mozemo da koristimo za grananje i sastoji se od kljucne rijeci IF


koju prati uslov u zagradama i zatim velike zagrade { } u kojima se nalazi blok koda i naredbe
koje ce se izvrsiti u slucaju da je ovaj uslov ispunjen.

If(hladno)
{obuci jaknu}

Dakle kada se dodje do tog nekog dijela program pita da li je uslov ispunjen. Ako jeste hladno,
on ce uci u viticaste zagrade i izvrsiti komandu. Ako nije hladno, on ce taj dio komande da
preskoci i krene na sljedeci. If nema obavezan dio koda koji se izvrsava ako uslov nije ispunjen,
samo obavezan, ako je uslov ispunjen. Ako nije, tu moze da bude i kraj programa.

Kod if/else imamo dodatan blok koda koji se ispunjava u slucaju da uslov nije ispunjen.

If(pada kisa)
{ponesi kisobran;}
else
{nemoj da nosis kisobran;}
Kod switch u zagradama imamo iskaze i blok koda u kome su kejsovi (uslovi, u slucaju nizanja
if else if else). Svaki switch mora da ima break. Ukoliko se ispuni uslov, izlazi se iz switcha. Na
kraju mora da bude i default, u slucaju da se ne ispuni nijedan kejs.
switch (vreme napolju)
{ case “kisa“;
ponesi kisobran;
case “sunce“;
ponesi naocare;
case “vetar“;
ponesi jaknu;
default:
ne izlazi iz kuce;
}

For petlja se koristi kada hocemo nesto da izvrsimo vise puta. Ovog puta u zagradi imamo
inicijalizaciju, uslov i inkrementaciju i zatim imamo blok koda koji se izvrsava dokle god se
ispunjava uslov. Redoslijed je inicijalizacija, uslov, blok koda, inkrementacija.

For (1 kocka cokolade; dok god ima kockika; sledeca kocka) {


pojedi kockicu;
}

While (uslov){
blok koji se izvrsava dokle god je uslov ispunjen;
Inkrement;
}

While (radni dan)


{idi na posao;
predji na sledeci dan;)

Razlika je sto u for imamo odredjen broj, dok u while ne mora biti odredjen broj, izvrsavamo
dokle god se ispunjava uslov, neprekidno.
Do-While petlja, slicno kao while, ali obratno
do
{idi na posao;
predji na sledeci dan;}
While (radni dan)
Koristimo je kada hocemo da nesto izvrsimo barem jednom

TIPOVI PODATAKA

Sve aplikacije manipulisu podacima na neki nacin. Prilikom manipulacije podaci se moraju
privremeno ili trajno smjestiti u promjenljive (varijable), koje se prije koriscenja moraju
definisati, da bi sam program znao na koga treba da obrati tu referencu i kako bi znao sta je to.

Mi kada napravimo promjenljivu u samom kodu mi samo rezervisemo prostor u memoriji i on


zavisi od tipa promjeljive koju smo joj dali i taj memorijski prostor ce imati sacuvanu odredjeni
memorijski prostor sa tim imenom (definisanje nove promjeljive).

Definisanjem promjenljivih rezervise se prostor u memoriji na osnovu:


a) imena promjeljive
b) tipa podatakaj kome data promjenljiva pripada

Tip podataka neke promjeljive odredjuje:


a) dozvoljene vrijednosti
b) operacije koje se mogu vrsiti nad njom
c) memorijski prostor koji se definise za tu promjenljivu

VREDNOSNI (VALUE) TIPOVI UKAZANI (REFERENCE) TIPOVI


Jednostavni tipovi Stringovi
Nabrajanje Klase
Strukture Nizovi
Interfejsi
Druga podjela dijeli podatke na:

1. Cjelobrojne – int, long (value) (razlika u memorijskom prostoru, long zauzima vise prostora)
2. Decimalni tip – double, float, decimal (value)
3. Logicki tip – bool ili Boolean (value) (logicki tip, true/false)
4. Znakovni tip – Chat (value) (karakter)
5. Tekstualni tip – String (refernce) (niz karaktera)

-Deklaracija ili definisanje promjenljive je kada podadtku damo tip i ime, sto znaci da da promjenljiva ui
tom momentu nema vrijednost, jer smo mi samo rezervisali memorijski prostor na osnovu njenog tipa.
tip -» int broj; «-ime
-Ako hocemo da joj dodijelimo vrijednost to radimo sa znakon =
Ime -» broj = 5; «- vrijednost
-Inicijalizacija promjenljive je kada prilikom deklaracije odmah dodijelimo vrijednost promjenljivoj

int broj = 5

Nad varijablama mozemo da radimo razne matematicke operacije


Brojevi:
int a = 1; int b =2; int suma = a+b; //suma je 3

Tekst (String)
String a = 1; String b = 2; String c = a+b; //c je 12

Sabiranje stringova se zove konkatenacija

OBJEKTNO ORIJENTISANO PROGRAMIRANJE

To je dio objektne paradigme koja obuhvata osnovne objektne koncepte. Osnova organizaciona jedinica
je klasa. To je recimo jedan papir na kome mi pisemo nesto, tu mozemo imati razne promjenljive,
varijable i funkcije koje ce svasta nesto da rade. Klase koristimo samo za uredjivanje i zapisivanje svega
onoga sto nam je potrebno.

Objekat je kada mi uzmemo tu klasu i od nje nesto napravimo. To je zapravo instanca klase i mozemo ih
imati bezbroj. Mi za programiranje koristimo objekte klasa. Preko objekta dodjemo do same srzi naseg
programa.
Objekat karakterise njegov:
-IDENTITET – svaki objekat je distinktivna individua , moze da bude objekat za sebe, svaki ima neku
zasebnu individuu, nijedan opbjekat nije ista stvar.
-PONASANJE – izvrsava se preko skupa metoda/funkcija koje sadrzi objekat, koje se nalaze u klasi

-STANJE – moze biti promjenljivo preko varijabli (propertiji) i vezano je za objekat koji mogu da se
promijene

METODE I KLASE

Metode se nalaze u klasama i to su neki dijelovi koda koje mi izvrsavamo a zapravo predstavljaju grupu
naredbi koje treba da se izvrse kada se pozove ta metoda. Metodu cime 2 stvari: Potpis i tijelo metode.

U potpisu se nalaze: modifikator pristupa (access modifier), povratna vrijednost metode (return type),
naziv metode (method name), parametri metode (podaci kojima snabdjevamo metodu).

Modifikatori pristupa – to je nista drugo no opseg koliko je ta metoda dostupna u klasama odnosno u
aplikaciji. Ovdje imamo :
-Public – Clan je dostupan bez restrikcije
-Package private – Clan samo dostupan unutar iste klase istog paketa
-Protected – Clan koji je dustupan unutar klase i izvedenih klasa
-Private – Clan dostupan samo unutar klase
Povratna vrijednost – To je tip podatka koji metoda treba da vrati. Metoda ne mora da ima povratnu
vrijednost. Ako je ima, mi moramo da navedemo tip povratne vrijednosti u potpisu metode i u tijelu
metode treba da imamo rijec „return“. Ukoliko metoda nema povratnu vrijednost moramo da koristimo
rijec „void“ umjesto povratne vrijednosti u potpisu metode. Metoda koja nema povratnu vrijednost ne
smije da ima „return“.

Konstruktor – Poziva pravljenje objekta od klase. Svaka klasa ima konstruktor. U JAVI se po defaultu
ne vidi. Ovo je specijalna metoda koja ima:
-isti naziv kao i naziv klase
-nema nikakvu povratnu vrijednost
-inicijalizuje novo kreirani objekat

Instanciranje klasa odnosno kreiranje objekta se vrsi pomocu operatora new. New vrsi alokaciju
memorije, tj cuva memoriju za taj objekat, a konstruktor poziva kreiranje metoda. New odvaja
memorijski prostor i tacno ce se znati od koje klase se pravi objekat, zato sto konstruktor mora da ima isto
naziv kao ta klasa. Ako nas se klasa zove „XY“ to znaci kada vidimo „XY“ metoda, znamo da se tu pravi
objekat klase XY.

4 PRINCIPA OOP

- Apstrakcija se koristi da mi zapravo sakrijemo od prikaza odredjeni dio koda. Ne mora nuzno
da bude sakriven da ne moze niko da mu pristupi, samo ideja jeste da napravimo nesto sto moze
da se koristi bez znanja kako to finkcionise. Apstraktni tipovi podataka (abstract data types) je
definisao programer, za koji se mogu kreirati primerci (instance) i koji je predstavljen strukturom
i ponasanjem. Na neki nacin, jedna klasa ne bi trebalo da zna unutrasnje detalje druge da bi je
koristila, samo poznavanje interfejsa treba da bude dovoljno dobro. Npr volan od automobila.
Kada smotamo volan u desno, tockovi idu u desno. Nas kao krajnje korisnike ne interesuje sta se
desava u tom procesu, nama se samo bitno da se tockovi okrecu.
- Enkapsulacije je zapravo metoda da sakrijemo pristup necega, da li informacija, bilo cega sto ne
zelimo da se zna dalje. Nju izvrsavamo preko modifikatora pristupa. Ako smo rekli da je po
defaultu private, onda niko ne mora da zna odredjene stvari, bitno je da ih mozemo koristiti. Inace
ide zajedno sa apstrakcijom. Dio softwera ima jasno definisan interfejs i implementaciju; interfejs
je svima dostupan, implementacija je nedostupna. Npr imamo macku i macka enkapsulirana. Ima
svoje stanje (glad, rasapolozenje, energija) i sa druge strane imamo mjaukanje, to je radnja tj
funkcija koju macka izvrsava. Mi ne mozemo nista od toga da promijenimo u samoj macki, ne
mozemo da udjemo u nju i da kazemo da e sad nisi gladna, zedna itd. Ali imamo spoljne metode
kao sto su nahrani macku, igraj se sa mackom i ostavi je da spava. I pomocu tih spoljnih metoda
mozemo da uticemo na njeno stanje a da nemamo pojma kako taj proces funkcionise. Dakle mi
uticemo na nju ali nije nam potrebno da znamo kako to funkcionise.
- Nasljedjivanje – sposobnost da mi naslijedimo odredjenu klasu. To znaci da sve to sto klasa ima
ce imati i klasa koju je naslijedila. Ovo nam olaksava posao jer nam skracuje kod. Postoje samo 2
pravila: jedna klasa, npr klasa A, nju moze da naslijedi bezbroj klasa B. Ako klasa B naslijedi
klasu A, klasa A ne moze da naslijedi nijednu drugu klasu. Drugo pravilo je da ne ide u
suprotnom smijeru. Ako je klasa B naslijedila klasu A, to ne znaci da klasa A ima sve sto ima
klasa B
- Polimorfizam – ovdje razlikujemo method overload i method overriding
o Kod Overload je moguce imati dvije metode istog naziva koje operisu nad razlicitim
tipovima promjenljivih. Kako program zna na koju metodu se pozivamo? Zamislite da
imate intidzere, obican kalkulator, koji samo sabira dva broja, pored toga mozemo da
koristimo i stringove. Imamo i nacin da sabiramo stringove i dobicemo potpuno razlicit
rezultat. U zavisnosti od toga koje mu podatke damo, on ce da izvrsi operaciju. Ako mu
damo dva broja, on ce ih sabrati. Ako mu damo dva stringa, on ce znati da smo pozvali
metodu koja poziva stringove.
o Override. Ako Klasa a ima neku metodu, npr letjeti, avion. Naslijedi oga je helikopter, on
autoamtski ima metodu letenja. Dok aviona su to mlazni motori, dok helikopter leti na
drugi nacin, on moze da implementira, tj napravi u svojoj klasi novu klasu koja ce se
takodje zvati letenje, i obojica ce imati istu klasu, samo sto ce helikopter da overriduje tu
metodu i da kaze da ne koristi mlazne motore. To radimo jer je nama mozda potrebna
jedna ili druga metoda

Posebna napomena:

- Apstratna klasa: Posebna klasa, koja izgleda potpuno isto kao i svaka druga klasa, ali od nje se ne
moze napraviti objekat, sluze najcesce za nasljedjivanje ili implementaciju ostalih klasa.
- Interfejsi: To je nacin da mi vise stvari naslijedimo. Za razliku od nasljedjivanje klasa, Interface
sadrzi samo potpis metode i on nam sluze da moramo da nas obavezu da moramo da
implementiramo te metode.
Prvo i osnovno jeste da imamo neke developer tools kako mozemo da nadjemo odredjene elemente.
Svaka internet stranica je napisana uz pomoc HTML i CSS. Preko tih HTML elemenata mi zapravo
govorimo Seleniumu sta treba da uradimo

Svaki pretrazivac ima developer tools. Otvara se preko F12 ili desni klik „inspect“. Tu se vidi cijeli kod
odnosno struktura stranice.

Selenium ne moze da koristi bilo koji HTML element ili lokator da nadje odredjeni element vec postoji
odredjen broj lokatora. Lokatori se koriste kada zelimo da kazemo Seleniumu da nadje neki element. To
nam je glavni nacin nadjemo nesto i da kazemo kako to zelimo da odradimo.

Ispisani su po prioritetu:

 ID
 Ime (Name)
 Ime klase (ClassName)
 CssSelector
 LinkText (Podgrupa Xpath)
 Xpath

ID – ID lokator je samo atribut jednog elementa. Ima glavni prioritet. On bi trebao da jedinstveno
identifikuje svaki element. Ne smora svaki element da ima sve navedene lokatore, moze ima 1 ili nijedan.
Mi treba da nadjemo lokator sa kojima zelimo da interaktujemo. Prva rijec kod svakog atributa kovori
koji je atribut u pitanju. Npr u ovom slucaju ID= rijec pod navodnicima. Ako kliknemo na ime atributa,
on ce da selektuje samo ime atributa, ako kliknemo na vrijednost, izabrace samo vrijednost, ako kliknemo
na =, on ce da izabere oboje. Ako hocemo da provjerimo neki atribut, mi u search polje treba da unesemo
[ ] a i u te zagrade onda pastujemo taj atribut.

NAME – ne mora da bude jedinstven. Nezgodno je da mogu da se mijenjaju sa prevodima svake stranice.
Dakle, ako imamo neku stranicu koja ima language bar koja moze da mijenja jezike, taj name lokator
moze da se mijenja ako je u pitanju smislena rijec. Obicno su slicni ID-evima, ali ne moraju da budu.
ClassName – Ona moze da bude jedinstvena, ali ne mora. Vrijednost atributa obicno se sastoji od vise
klasa. Dakle kad god vidimo da postoji razmak (space) u vrijednosti same klase, mi znamo da se radi o
slozenoj klasi, sastoji se od vise klasa. Svaki razmak je klasa za sebe. Ako je to slucaj, mi ne mozemo da
koristimo lokator ClassName, nego CSS selector, a ako je klasa jedna rijec, onda mozemo da koristimo
ClassName kao lokator jer imamo jedinstvenu klasu koja je prosta. Drugi naziv za slozenu klasu je
compound klasa. Za ovaj element mi ne bismo mogli da koristimo lokator ClassName jer on ne bi mogao
da prepozna slozenu klasu, nego bismo morali da napravimo CSS selektor.

CssSelector – Ako se klasa sastoji od vise rijeci koristimo Css selektor. To je nacin da nadjemo bilo koji
atribut tj da iskoristimo bilo koji atribut kao lokator. Njega obavezno moramo koristiti za slozene klase.
Za njega imamo odredjena pravila koristenja. Npr ako imamo ID i ne zelimo da koristimo iz nekog
razloga ID, mi mozemo napraviti Css Selektor tako sto cemo reci # pa vrijednost tog selektora. Program
ce znati da # odredjuje ID atribut. Za klasu je stavlja tacka na pocetak I umjesto svakog space stavljamo
opet tacku kako bi on znao da se tu nadovezuje nova klasa odnosno da je u pitanju slozena klasa. Njega
koristimo ako nemamo ni ID ni Name ni ClassName. Css Selektor ne moze da nadje neki lokator po
tekstu.
*CSS selektor po nekom atributu [atribut]

Xpath – Moze da se koristi u Seleniumu i radi na principu search-a. On ide kroz sam HTML dokument i
trazi tacnu lokaciju ka nasem elementu po atributima koji mu mi damo. Postoje dva tipa Xpach-a:
- apsolutni - (C:My Documents/My Pictures/More2022/Zalazak sunca.jpg)
Medjutim, ako ovu fotografiju bilo gdje pomjerimo ili napravimo novu folder, remetimo kod , zato
ove putanje nisu bas najbolje. U HTML nije preporucena jer developeri cesto pomijeraju i mijenjaju
stvari.
- relativni – njega zamisljamo kao search u racunaru. Osjetljiv je jer moze postojati vise fotografija sa
istim imenom, moramo biti specificni kada nesto trazimo.
*Po sadrzanom tekstu: (//tipElementa [contains](text(), “tekst iz elementa”)] -»
//div[contains(text(), “Google offered in:“)]
*Po tacnom tekstu (//tipElementa[text() = “tacnom tekstu iz elementa”] -»
//div[text() = “Google offered in: “]
*Po nekom atributu (tipElementa[@kompletan atribut sa njegovom vrednoscu] -»
//input [@maxlength=”2048”]

LinkText – Moze da se koristi iskljucivo na link elementima. Pocinju sa <a. Sadrzi href atribut. On
gfovori na koju stranicu vodi ovaj link. To je tekst koji ga opisuje.
SELENIUM

To je biblioteka koja sluzi za automatizaciju testiranja web aplikacija I koja podrzava gomilu browsera I
programskih jezika.

Driver komande za rad sa browserom:

- driver.navigate().to(“https://www.google.com”) – ne ceka da se otvori stranica


- driver.get(“https://www.google.com”) – ceka da se otvori stranica
- Komanda za odlazak na prethodno posecenu stranicu: driver.navigate().back();
- Komanda za odlazak na sledecu posecenu stranicu: driver.navigate().forward();
- Komanda za refresh stranice: driver.navigate().refresh();
- Komanda za maximizovanje stranice: driver.manage().window().maximize();
- Komanda za zatvaranje driver(browsera): driver.quit(), driver.close()(zatvara samo trenutni tab)

Dakle kada zelimo da pozovemo Selenium mi pozivamo driver promjenljivu i kad god to uradimo mi vec
dobijamo neke komande koje sam Selenium ima, zato sto smo mi njemu dodijelili objekat klase Chrome
driver, a tu se nalaze sve Selenium komande koje mi mozemo da koristimo. Glavne Selenium metode za
pronalazenje elemenata su findElement i findElements i nacin na koji mi njemu govorimo je po tim
komandama kako ce on znati da trazimo neki odredjen element.

WebElement e = driver.findElement(By.How?(WithWhat?))
How? = tip lokatora
WithWhat? = string lokatora

- findElement to je komanda koja nalazi jedan element. Ono sto je bitno da zapamtimo jeste ako on
ne nadje trazeni element on nama baca NoSuchElementException tj izbaci nam error. To znaci ili
da taj element ne postoji na stranici ili da nismo napravili dobar element. Ako nadje vise takvih
elemenata, on vraca prvi na koji naidje.
- findElements – on kada nadje element vraca nam listu i test ce puci na nekom buducem koraku.
Davace nam error da nije uspio da klikne na odredjen element.
- Clear () (Java: clear()) – ovo je interakcija u slucaju da nadjemo sam element. Ovo je komanda
koja se koristi za brisanje teksta iz polja. Ono sto je dobra praksa je da prije nego sto bilo sta
upisemo u neko polje, da izbrisemo sve sto je bilo u njemu, kako ne bismo imali pogresne
rezultate. Koristi se za input i textArea tipove polja
- SendKeys – koristimo da unosimo nesto u neko polje. Koristi se za input i textArea tipove polja.
Dok Clear nema ulazne parametre, SendKeys ocekuje da unesemo ulazne parametre, tj text koji
mi zelimo da unesemo (string). On nema povratnu vrijednost,on string upise u element koji smo
mu rekli. On takodje moze da salje precice sa tastature kao sto su enter, tab, refresh, strelica
dole/gore. Prije nego sto pozovemo SendKeys komandu bitno je da uneseno Clear kako bismo
bili sigurno da necemo gresku napraviti.
- Click () (Jaca: click()) izvrsava klik na web elementom. Koristimo je za button, radio button,
linkove, tekst elemente itd. Ona nema ulazne parametre niti povratnu vrijednost. Ono sto je
problem sa klikom jeste da mi mozemo kliknuti na bilo sta (cijelu stranicu). Tako da moramo da
vodimo racuna da se uvijek poslije klika mora vrsiti provjera da li se desilo nesto nakon tog klika.
- Select – komanda koja se koristi na elemente koji su tipa Select (kada je prva rijec tipa select). To
je npr Dropdown meni. Kad god imamo taj meni, i on se zove select, tu mozemo samo da
koristimo select komandu koja ce da odradi biranje odredjene stvari umjesto nas. U suprotnom
bismo morali da unosimo Click vise puta. Imamo 3 nacina kako da izaberemo te opcije:
- SelextByText
dropdown.selectByText(“some text)
- SelectByValue
dropdown.selectByValue(“value attribute”)
- SelectByIndex
dropdown.selectByIndex(index)
STANJA WEB ELEMENATA
Mi mozemo da provjerimo da li je neki element prikazan na stranici. Za to imamo komande:
- display (Java: isDisplayed). Ona vraca informaciju da li je element prikazan na stranici ili nije. To
najcesce koristimo kada hocemo da provjerimo da li se ucitao neki element ili dio stranice. Nema
ulazne parametre ali ima povratnu vrijedost (bool).
- Enable – provjerava da li je za taj element omogucena akcija. Npr kada na nekoj formi jedno
dugme bude zasivljeno dokle god ne budu popunjena sva polja. To dugme je disabled, vidljivo je,
ali interakcija nije omogucena. Mi sa ovom komandom provjeravamo da li neki element disabled
ili enabled. Isto nema ulazne vrijednosti, a vraca bool vrijednost.
- Clickable (Java: isClickable) – provjerava da li ce se desiti nesto ako kliknemo negdje. To je jako
zgodno na kompleksinim stranicama. Mi sa ovom komandom podrazumijevamo da je element
visible i enabled, u suprotnom nije ni clickable ili ne postoji ili nije omogucen za akciju.
IZVLACENJE INFORMACIJA IZ WEB ELEMENATA

- Text (Java: getText)):


Daje nam inner text od naseg Web Elementa. Ne mora svaki web element da ima text, tada ova
komanda nece raditi. Vraca nam crni deo HTML tag-a, vraca informaciju u vidu stringa i koristi se vrlo
cesto za validaciju informacija na stranici. Koristi se npr ako zelimo da provjerimo da li neka poruka ili
tekst na stranici tacan.

- GetAttribute – daje nam vrijednost web elementa. Ulazna vrijednost je tip atributa koji zelimo da
provjerimo, a vraca nam njegovu vrijednost i koristi se za validacije.
String idExample = loginField.getAttribute(“name”);

- Selected – Ovime se provjerava da li je neki box selectovan (check box). Nema ulazne parametre a
vraca nam bool vrijednosti. Dobar je za neke provjere

You might also like