SlideShare a Scribd company logo
Selenium a WebDriver
přítomnost a budoucnost
Konference Test stack
6. června 2019
Ondřej Machulda
 @OndraM
 ondrejmachulda.cz
Anotovaná verze přednáškyAnotovaná verze přednášky
HTTP
HTTP
HTTP
port 4444
Zjednodušené schéma toho, jak Selenium funguje. Pomocí knihovny ve
vašem jazyce přes HTTT port komunikujete se Selenium serverem, který
si pak povídá s prohlížeči, a provádí v nich akce, které jste zavolali.
Zjednodušené schéma toho, jak Selenium funguje. Pomocí knihovny ve
vašem jazyce přes HTTT port komunikujete se Selenium serverem, který
si pak povídá s prohlížeči, a provádí v nich akce, které jste zavolali.
Selenium 2 alias Selenium WebDriverSelenium 2 alias Selenium WebDriver
“Prehistoric scene” by Karen is licensed under CC BY 2.0
Historický problém Selenia byl, že když vznikalo, nebyla žádná standardizovaná
cesta, jak prohlížeče automatizovaně ovládat. A tak fungovalo trochu jako „hack“
a zneužívalo vnitřní vývojářské API prohlížečů – které ale mohlo kdykoliv přestat
fungovat. I protože tu podporu Selenia nedělali samotní výrobci prohlížečů.
Historický problém Selenia byl, že když vznikalo, nebyla žádná standardizovaná
cesta, jak prohlížeče automatizovaně ovládat. A tak fungovalo trochu jako „hack“
a zneužívalo vnitřní vývojářské API prohlížečů – které ale mohlo kdykoliv přestat
fungovat. I protože tu podporu Selenia nedělali samotní výrobci prohlížečů.
Json
W
ire
Protocol
Json Wire ProtocolJson Wire
Protocol
Další historický problém byl, že HTTP protokol, kterým Selenium komunikuje
(JsonWireProtocol), vznikal na koleni...
Další historický problém byl, že HTTP protokol, kterým Selenium komunikuje
(JsonWireProtocol), vznikal na koleni...
Json Wire Protocol?
Protokol byl definovaný na wiki stránce, neměl parametry plnohodnotného standardu,
takže když ho pak chtěli implementovat různé knihovny nebo různé prohlížeče, docházelo
k rozdílům v implementaci. Takže třeba cross-browser testování byla spíše teorie.
Protokol byl definovaný na wiki stránce, neměl parametry plnohodnotného standardu,
takže když ho pak chtěli implementovat různé knihovny nebo různé prohlížeče, docházelo
k rozdílům v implementaci. Takže třeba cross-browser testování byla spíše teorie.
https://w3c.github.io/webdriver/
Proto bylo třeba protokol standardizovat, což se vývojářům Selenia ve spolupráci s výrobci prohlížečů
povedlo pod hlavičkou W3C. A tak se po šesti letech práce stal protokol W3C WebDriver vloni
plnohodnotným standardem a oficiální webovou technologií s růžovou budoucností.
Proto bylo třeba protokol standardizovat, což se vývojářům Selenia ve spolupráci s výrobci prohlížečů
povedlo pod hlavičkou W3C. A tak se po šesti letech práce stal protokol W3C WebDriver vloni
plnohodnotným standardem a oficiální webovou technologií s růžovou budoucností.
W
3C
W
ebDriver
W3C WebDriver
W3C
WebDriver
Selenium tak kromě starého JsonWire protokolu umí nově mluvit i standardizovaným
W3C WebDriver protokolem. (Pokud ho umí knihovna ve vašem jazyce).
A protože to je standard, mohou ho na straně prohlížečů také dobře implementovat
jejich výrobci – Mozilla, Chrome, Apple...
Selenium tak kromě starého JsonWire protokolu umí nově mluvit i standardizovaným
W3C WebDriver protokolem. (Pokud ho umí knihovna ve vašem jazyce).
A protože to je standard, mohou ho na straně prohlížečů také dobře implementovat
jejich výrobci – Mozilla, Chrome, Apple...
W3C WebDriver
a k čemu nám to je
„Selenium WebDriver je de-facto standard
pro automatizaci ovládání prohlížečů“
Doteď jsme říkali, že Selenium WebDriver je „de-facto“ standard.
Protože na tom panovala neformální shoda...
Doteď jsme říkali, že Selenium WebDriver je „de-facto“ standard.
Protože na tom panovala neformální shoda...
„Selenium WebDriver je de-facto standard
pro automatizaci ovládání prohlížečů“
Teď už ale „de-facto“ říkat nemusíme. WebDriver je skutečný standard pro🎉
automatizované ovládání prohlížečů – žádný jiný takový standard neexistuje.
Tím, že je pod W3C, je to i formální dohoda výrobců prohlížečů, kteří se vlastně
zavázali, že standard budou sami implementovat a podporovat.
Teď už ale „de-facto“ říkat nemusíme. WebDriver je skutečný standard pro🎉
automatizované ovládání prohlížečů – žádný jiný takový standard neexistuje.
Tím, že je pod W3C, je to i formální dohoda výrobců prohlížečů, kteří se vlastně
zavázali, že standard budou sami implementovat a podporovat.
Podpora od výrobců prohlížečů
https://webdriver-herald.herokuapp.com/ k 27. 3. 2019
A opravdu to dělají a implementují ho. S každou další verzí prohlížečů
se navíc implementace zlepšuje. Takže to vypadá, že díky novému
standardu a tím sjednocení chování prohlížečů se stane cross-browser
testování (které opravdu funguje) brzy realitou.
A opravdu to dělají a implementují ho. S každou další verzí prohlížečů
se navíc implementace zlepšuje. Takže to vypadá, že díky novému
standardu a tím sjednocení chování prohlížečů se stane cross-browser
testování (které opravdu funguje) brzy realitou.
JsonWire
Protocol
W3C
WebDriver
Selenium 2
Selenium 3
Selenium 4
✓
✓
✓
😐
😐
😊
V Seleniu 3 už je většina standardu W3C WebDriver implementovaná a v Seleniu 4 by měl být implementovaný plně.
Starý JsonWire protokol ale nadále funguje a i v Seleniu 4.0 by měl pořád fungovat – ale je už označený za „obsolete“
a jeho fragmenty mohou být postupně odstraňovány.
V Seleniu 3 už je většina standardu W3C WebDriver implementovaná a v Seleniu 4 by měl být implementovaný plně.
Starý JsonWire protokol ale nadále funguje a i v Seleniu 4.0 by měl pořád fungovat – ale je už označený za „obsolete“
a jeho fragmenty mohou být postupně odstraňovány.
Přechod na W3C WebDriver
Firefox 48+
(Geckodriver)
Chrome
(Chromedriver)
// wdio.conf.js
exports.config = {
capabilities: {
browserName: 'chrome',
'goog:chromeOptions': {
"w3c": true,
}
},
}
+
Selenium 3
+
Pokud to knihovna ve vašem jazyce umí (nejspíš ano),
a používáte Selenium 3, můžete ho už začít používat.
A jestliže testujete ve Firefoxu 48+, tak už ho používáte,
protože Geckodriver starý protokol ani neumí ¯_( ツ )_/¯.
Pokud to knihovna ve vašem jazyce umí (nejspíš ano),
a používáte Selenium 3, můžete ho už začít používat.
A jestliže testujete ve Firefoxu 48+, tak už ho používáte,
protože Geckodriver starý protokol ani neumí ¯_( ツ )_/¯.
Přechod na W3C WebDriver
Firefox 48+
(Geckodriver)
Chrome
(Chromedriver)
// wdio.conf.js
exports.config = {
capabilities: {
browserName: 'chrome',
'goog:chromeOptions': {
"w3c": true,
}
},
}
Od Chrome 75
je to výchozí
ʘ‿ʘ
Selenium 3
+
+
V Chrome si W3C protokol můžete zapnout, ale od Chrome
a Chromedriveru 75 (vyšlo předevčírem) je W3C protokol už
výchozí. Takže je možné, že na něj brzy beztak přejdete,
a ideálně byste to ani neměli nijak negativně pocítit. 👌
V Chrome si W3C protokol můžete zapnout, ale od Chrome
a Chromedriveru 75 (vyšlo předevčírem) je W3C protokol už
výchozí. Takže je možné, že na něj brzy beztak přejdete,
a ideálně byste to ani neměli nijak negativně pocítit. 👌
Nové možnosti
Headless prohlížečeHeadless prohlížeče
PhantomJSPhantomJS
RIPRIP Když testy pouštíme na serveru, není třeba, aby se vykreslovalo okno
prohlížeče. Použitím headless prohlížeče se web renderuje jenom
v paměti a my tak můžeme ušetřit systémové prostředky i testy zrychlit.
Dřív se na to používal prohlížeč PhantomJS – ale ten už je mrtvý a
neudržovaný, protože headless režim dnes umí přímo Firefox i Chrome.
Když testy pouštíme na serveru, není třeba, aby se vykreslovalo okno
prohlížeče. Použitím headless prohlížeče se web renderuje jenom
v paměti a my tak můžeme ušetřit systémové prostředky i testy zrychlit.
Dřív se na to používal prohlížeč PhantomJS – ale ten už je mrtvý a
neudržovaný, protože headless režim dnes umí přímo Firefox i Chrome.
Headless prohlížeče
// wdio.conf.js
exports.config = {
capabilities: {
browserName: 'chrome',
'goog:chromeOptions': {
args: ['--headless'],
}
},
}
Stačí jenom nastavit v capabilities.
Pro Firefox by to bylo obdobně:
browserName: 'firefox',
'moz:firefoxOptions': {
args: ['-headless']
}
Stačí jenom nastavit v capabilities.
Pro Firefox by to bylo obdobně:
browserName: 'firefox',
'moz:firefoxOptions': {
args: ['-headless']
}
Spouštění testů v Dockeru
Docker se dnes rve všude možně a jde použít i pro Selenium. V kontejneru nám
pak běží Selenium i s kompatibilní verzí prohlížeče. Navenek se nic nezmění, pořád
to komunikuje po HTTP portu jako předtím. Jen se nemusíme starat o instalaci
prohlížečů, můžeme mít v kontejnerech vedle sebe víc různých verzí atd.
Docker se dnes rve všude možně a jde použít i pro Selenium. V kontejneru nám
pak běží Selenium i s kompatibilní verzí prohlížeče. Navenek se nic nezmění, pořád
to komunikuje po HTTP portu jako předtím. Jen se nemusíme starat o instalaci
prohlížečů, můžeme mít v kontejnerech vedle sebe víc různých verzí atd.
Spouštění testů v Dockeru
$ docker run -p 4444:4444 -p 5900:5900 
selenium/standalone-chrome-debug:3.141.59
$ vncviewer localhost:5900
$ ./node_modules/.bin/wdio wdio.conf.js
Jedním příkazem stáhneme a spustíme Docker se Seleniem a Chrome. Otevřeme port 4444
pro komunikaci Selenia a 5900 pro VNC, abychom se mohli koukat, co se uvnitř děje:
Jedním příkazem stáhneme a spustíme Docker se Seleniem a Chrome. Otevřeme port 4444
pro komunikaci Selenia a 5900 pro VNC, abychom se mohli koukat, co se uvnitř děje:
Připojíme se přes VNC dovnitř kontejneru:Připojíme se přes VNC dovnitř kontejneru:
A testy spustíme jako předtím. Ve VNC pak můžeme
vidět, jak nám vyskakují okna Chrome 🎉
A testy spustíme jako předtím. Ve VNC pak můžeme
vidět, jak nám vyskakují okna Chrome 🎉
Spouštění testů v Dockeru
Selenium v Dockeru se navíc dá snadno škálovat, třeba přes Docker Swarm nebo
Kubernetes, a můžete si sami nastartovat desítky nodů a zrychlit testy lepší paralelizací.
Ve spojení s headless režimem si můžeme relativně jednoduše a s malými nároky vytvořit
vlastní Selenium cloud, aniž bychom pálili peníze u SauceLabs, BrowserStacku apod.
Selenium v Dockeru se navíc dá snadno škálovat, třeba přes Docker Swarm nebo
Kubernetes, a můžete si sami nastartovat desítky nodů a zrychlit testy lepší paralelizací.
Ve spojení s headless režimem si můžeme relativně jednoduše a s malými nároky vytvořit
vlastní Selenium cloud, aniž bychom pálili peníze u SauceLabs, BrowserStacku apod.
Spouštění testů bez Selenium serveru?
W3C
WebDriver
Selenium Server má roli routeru (vybírá vhodný node, kde testu pustit), startuje požadované
prohlížeče apod., ale pak požadavky z vašich testů předává zase dál na prohlížeč.
Při lokálním vývoji tak možná roli routeru (a tedy Selenium server) nepotřebujeme...
Selenium Server má roli routeru (vybírá vhodný node, kde testu pustit), startuje požadované
prohlížeče apod., ale pak požadavky z vašich testů předává zase dál na prohlížeč.
Při lokálním vývoji tak možná roli routeru (a tedy Selenium server) nepotřebujeme...
W3C WebDriver
W3C WebDriver
Spouštění testů bez Selenium serveru?
$ chromedriver --port=4444 # nebo geckodriver
$ ./node_modules/.bin/wdio wdio.conf.js
Pro lokální použití se tak nabízí možnost komunikovat přímo se prohlížečem – bez
potřeby spouštění Selenium severu. Stačí nahodit driver prohlížeče změnit adresu
kam se připojujeme (z http://localhost:4444/wd/hub na http://localhost:4444/)
Pro lokální použití se tak nabízí možnost komunikovat přímo se prohlížečem – bez
potřeby spouštění Selenium severu. Stačí nahodit driver prohlížeče změnit adresu
kam se připojujeme (z http://localhost:4444/wd/hub na http://localhost:4444/)
Selenium IDE TNG
https://www.seleniumhq.org/selenium-ide/
Selenium IDE je rozšíření pro prohlížeč, které umožňuje naklikat a spouštět testy pomocí Selenia. Je nově přepsané jako
WebExtension, takže funguje ve Firefoxu i v Chrome.
Má zajímavé novinky, například v něm jde spouštět v rámci jednoho testu jiný, takže třeba opakující se login nemusíme
mít nakopírovaný na více místech. Umí i řídící struktury (ify atd.).
I tak ale platí, že Selenium IDE je spíše jen pro „hraní“ nebo malé projektíky – pro větší test suite je to neudžovatelné.
Selenium IDE je rozšíření pro prohlížeč, které umožňuje naklikat a spouštět testy pomocí Selenia. Je nově přepsané jako
WebExtension, takže funguje ve Firefoxu i v Chrome.
Má zajímavé novinky, například v něm jde spouštět v rámci jednoho testu jiný, takže třeba opakující se login nemusíme
mít nakopírovaný na více místech. Umí i řídící struktury (ify atd.).
I tak ale platí, že Selenium IDE je spíše jen pro „hraní“ nebo malé projektíky – pro větší test suite je to neudžovatelné.
●
Selenium IDE TNG
$ npm install -g selenium-side-runner
$ npm install -g chromedriver geckodriver
$ selenium-side-runner Jobs.cz.side
$ selenium-side-runner -c "browserName=firefox" Jobs.cz.side
$ selenium-side-runner -c "browserName=chrome" -w 5 Jobs.cz.side
$ selenium-side-runner -c "browserName=chrome chromeOptions.args=[headless]" …
Když bychom Selenium IDE ale na něco použili, nově se testy napsané
v něm dají uložit a spouštět z příkazové řádky třeba na CI serveru. A jde
to klidně spouštět i paralelně nebo v headless režimu. Pořád to má ale
daleko do plnohodnotného testování. Pro vyzkoušení end-to-end
testování ale můžeme se Selenium IDE začít.
Když bychom Selenium IDE ale na něco použili, nově se testy napsané
v něm dají uložit a spouštět z příkazové řádky třeba na CI serveru. A jde
to klidně spouštět i paralelně nebo v headless režimu. Pořád to má ale
daleko do plnohodnotného testování. Pro vyzkoušení end-to-end
testování ale můžeme se Selenium IDE začít.
Blízká budoucnost
Selenium
Mocha / Jasmine / Jest / …
PHPUnit / Codeception / …
TestNG / JUnit / …
rspec / Cucumber / …
unittest / pytest / …
NUnit / …
Cypress / Puppeteer
Mocha
(Cypress)
crossbrowsertesting.com/blog/test-automation/selenium-vs-cypress/
automationrhapsody.com/cypress-vs-selenium-end-era/
applitools.com/blog/cypress-vs-selenium-webdriver-better-or-just-different
Selenium a ekosystém okolo je tvořen řadou nástrojů: knihovny pro
všemožné jazyky; pro testování můžete používat svůj oblíbený
testovací framework; můžete testovat oproti různým prohlížečům
i mobilním zařízením. Díky W3C WebDriver standardu navíc nově
s lepší cross-browser kompatibilitou a stabilněji, než kdy dříve.
Selenium a ekosystém okolo je tvořen řadou nástrojů: knihovny pro
všemožné jazyky; pro testování můžete používat svůj oblíbený
testovací framework; můžete testovat oproti různým prohlížečům
i mobilním zařízením. Díky W3C WebDriver standardu navíc nově
s lepší cross-browser kompatibilitou a stabilněji, než kdy dříve.
Nástroje jako Cypress nebo Puppeteer tak rozhodně Selenium
nenahrazují ani nestojí proti němu – spíš jsou určeny na jinou věc.
Ideální uplatnění mohou najít zejména u frontend vývojářů, pro
testování SPA aplikací postavených na Reactu/Vue apod. Díky tomu, jak
tyto nástroje fungují, jsou na to rychlejší než Selenium a umožňují
některé věci, na které Selenium vlastně ani není vhodný nástroj.
Nástroje jako Cypress nebo Puppeteer tak rozhodně Selenium
nenahrazují ani nestojí proti němu – spíš jsou určeny na jinou věc.
Ideální uplatnění mohou najít zejména u frontend vývojářů, pro
testování SPA aplikací postavených na Reactu/Vue apod. Díky tomu, jak
tyto nástroje fungují, jsou na to rychlejší než Selenium a umožňují
některé věci, na které Selenium vlastně ani není vhodný nástroj.
Selenium 4
3.141.59 zůstane poslední verzí Selenia 3
18. 4. 2019 – v4.0.0-alpha-1
Kdy bude stabilní verze?
github.com/SeleniumHQ/selenium/projects/2
Drop-in replacement
Zcela přepsaný Selenium Grid
Výkonnější, když máme hodně nodů. Rozdělený do komponent, takže např. ukládání sessions může být samostatný proces – takže když
by se router třeba zasekl a my ho restartovali, sessions by nám zůstaly živé a nemuseli bychom všechny běžící testy restartovat.
Výkonnější, když máme hodně nodů. Rozdělený do komponent, takže např. ukládání sessions může být samostatný proces – takže když
by se router třeba zasekl a my ho restartovali, sessions by nám zůstaly živé a nemuseli bychom všechny běžící testy restartovat.
Pro většinu uživatelů bude přechod na Selenium 4 jen o zvýšení verze,
a všechno by mělo nadále fungovat bez negativní změny.
Pro většinu uživatelů bude přechod na Selenium 4 jen o zvýšení verze,
a všechno by mělo nadále fungovat bez negativní změny.
Vývoj se už soustředí na Selenium 4, takže k další aproximaci verze směrem k hodnotě π už nejspíše nedojde.Vývoj se už soustředí na Selenium 4, takže k další aproximaci verze směrem k hodnotě π už nejspíše nedojde.
Už se dá dokonce vyzkoušet alpha verze Selenia 4Už se dá dokonce vyzkoušet alpha verze Selenia 4
Na GitHubu můžete sledovat, v jakém stavu se vývoj Selenia 4 nachází. Podle Simon Stewarta (lead developer
Selenium projektu) vyjde Selenium 4 na čínský Nový rok. Neřekl tedy který, nejbližší možnost je 25. ledna 2020 .🤷
Na GitHubu můžete sledovat, v jakém stavu se vývoj Selenia 4 nachází. Podle Simon Stewarta (lead developer
Selenium projektu) vyjde Selenium 4 na čínský Nový rok. Neřekl tedy který, nejbližší možnost je 25. ledna 2020 .🤷
 Ondřej Machulda
 ondrejmachulda.cz
 @OndraM
Q & A

More Related Content

ODP
Využití chemie v procesu testování webových aplikací vytvořených pomocí techn...
PDF
Funkční testování – chybějící vrchol pyramidy (WebExpo 2016)
PPTX
Selenium Webdriver - jOpenSpace 2015
PPTX
Optimalizace Symfony na devu
PPTX
Deployment PHP aplikací | WebExpo 2011
PDF
Trendy a nové možnosti test automation
PDF
20110511 Vývoj software - produktivně, efektivně, kvalitně
PPTX
Vašek Purchart - Optimalizace Symfony na devu (2. sraz přátel Symfony v Praze)
Využití chemie v procesu testování webových aplikací vytvořených pomocí techn...
Funkční testování – chybějící vrchol pyramidy (WebExpo 2016)
Selenium Webdriver - jOpenSpace 2015
Optimalizace Symfony na devu
Deployment PHP aplikací | WebExpo 2011
Trendy a nové možnosti test automation
20110511 Vývoj software - produktivně, efektivně, kvalitně
Vašek Purchart - Optimalizace Symfony na devu (2. sraz přátel Symfony v Praze)

Similar to Selenium a WebDriver - přítomnost a budoucnost (20)

PDF
vSphere automation workshop python
PPTX
Petr Nikolas Prokop - Symfony framework (0. sraz přátel Symfony v Hradci Král...
ODP
Fantom Opery, "VPN" a Secure Proxy v Opeře
PPTX
atoto.cz - jak na snadnou integraci Codeception
ODP
WordCamp Bratislava 2017 - Martin Hlaváč
PPTX
TNPW2-2012-03
PPT
Rich Internet Applications 2009 (Czech)
PPTX
Symfony vs Nette vs Phalcon
PDF
Péhápkaři v Pecce: Jak na Jenkins CI pro aplikaci v Dockeru - Matouš Czerner...
PPTX
TNPW2-2014-03
PPTX
Odborná snídaně 20.9. - Agile@DevOps - 2. část
PDF
Michal Majer / I testování může být zábava
PDF
HCL Sametime Meetings on Docker - SUTOL Cafe 2/2021
PPTX
TNPW2-2013-03
PDF
WP Frameworky - WordCamp Praha 2018
PDF
PHP Vysočina - WordPress - 25.10.2018
PDF
Continuous integration pro Symfony/PHP aplikaci s Dockerem v GitLabu [CZ]
PPTX
Jira DevOps Cloud
PDF
Hon za fonty na webu
PPTX
TNPW2-2011-03
vSphere automation workshop python
Petr Nikolas Prokop - Symfony framework (0. sraz přátel Symfony v Hradci Král...
Fantom Opery, "VPN" a Secure Proxy v Opeře
atoto.cz - jak na snadnou integraci Codeception
WordCamp Bratislava 2017 - Martin Hlaváč
TNPW2-2012-03
Rich Internet Applications 2009 (Czech)
Symfony vs Nette vs Phalcon
Péhápkaři v Pecce: Jak na Jenkins CI pro aplikaci v Dockeru - Matouš Czerner...
TNPW2-2014-03
Odborná snídaně 20.9. - Agile@DevOps - 2. část
Michal Majer / I testování může být zábava
HCL Sametime Meetings on Docker - SUTOL Cafe 2/2021
TNPW2-2013-03
WP Frameworky - WordCamp Praha 2018
PHP Vysočina - WordPress - 25.10.2018
Continuous integration pro Symfony/PHP aplikaci s Dockerem v GitLabu [CZ]
Jira DevOps Cloud
Hon za fonty na webu
TNPW2-2011-03
Ad

More from Ondřej Machulda (11)

PDF
JSON API: Možná nepotřebujete GraphQL
PDF
Workshop: Functional testing made easy with PHPUnit & Selenium (phpCE Poland,...
PDF
Selenium & PHPUnit made easy with Steward (Berlin, April 2017)
PDF
Automatické testování webů v praxi - Barcamp Ostrava 2015
PDF
Jak jsme přepisovali Jobs.cz na Symfony
PDF
OAuth 2.0 a Zend Framework
PDF
Optimistic/Pessimistic Offline Lock
PDF
Hlavní problémy systému on-line rezervace vstupenek do O2 Areny
PDF
Testování systému pro on-line rezervaci vstupenek do O2 Areny
PDF
Pionýr - stručná historie organizace
JSON API: Možná nepotřebujete GraphQL
Workshop: Functional testing made easy with PHPUnit & Selenium (phpCE Poland,...
Selenium & PHPUnit made easy with Steward (Berlin, April 2017)
Automatické testování webů v praxi - Barcamp Ostrava 2015
Jak jsme přepisovali Jobs.cz na Symfony
OAuth 2.0 a Zend Framework
Optimistic/Pessimistic Offline Lock
Hlavní problémy systému on-line rezervace vstupenek do O2 Areny
Testování systému pro on-line rezervaci vstupenek do O2 Areny
Pionýr - stručná historie organizace
Ad

Selenium a WebDriver - přítomnost a budoucnost

  • 1. Selenium a WebDriver přítomnost a budoucnost Konference Test stack 6. června 2019 Ondřej Machulda  @OndraM  ondrejmachulda.cz Anotovaná verze přednáškyAnotovaná verze přednášky
  • 2. HTTP HTTP HTTP port 4444 Zjednodušené schéma toho, jak Selenium funguje. Pomocí knihovny ve vašem jazyce přes HTTT port komunikujete se Selenium serverem, který si pak povídá s prohlížeči, a provádí v nich akce, které jste zavolali. Zjednodušené schéma toho, jak Selenium funguje. Pomocí knihovny ve vašem jazyce přes HTTT port komunikujete se Selenium serverem, který si pak povídá s prohlížeči, a provádí v nich akce, které jste zavolali.
  • 3. Selenium 2 alias Selenium WebDriverSelenium 2 alias Selenium WebDriver “Prehistoric scene” by Karen is licensed under CC BY 2.0 Historický problém Selenia byl, že když vznikalo, nebyla žádná standardizovaná cesta, jak prohlížeče automatizovaně ovládat. A tak fungovalo trochu jako „hack“ a zneužívalo vnitřní vývojářské API prohlížečů – které ale mohlo kdykoliv přestat fungovat. I protože tu podporu Selenia nedělali samotní výrobci prohlížečů. Historický problém Selenia byl, že když vznikalo, nebyla žádná standardizovaná cesta, jak prohlížeče automatizovaně ovládat. A tak fungovalo trochu jako „hack“ a zneužívalo vnitřní vývojářské API prohlížečů – které ale mohlo kdykoliv přestat fungovat. I protože tu podporu Selenia nedělali samotní výrobci prohlížečů.
  • 4. Json W ire Protocol Json Wire ProtocolJson Wire Protocol Další historický problém byl, že HTTP protokol, kterým Selenium komunikuje (JsonWireProtocol), vznikal na koleni... Další historický problém byl, že HTTP protokol, kterým Selenium komunikuje (JsonWireProtocol), vznikal na koleni...
  • 5. Json Wire Protocol? Protokol byl definovaný na wiki stránce, neměl parametry plnohodnotného standardu, takže když ho pak chtěli implementovat různé knihovny nebo různé prohlížeče, docházelo k rozdílům v implementaci. Takže třeba cross-browser testování byla spíše teorie. Protokol byl definovaný na wiki stránce, neměl parametry plnohodnotného standardu, takže když ho pak chtěli implementovat různé knihovny nebo různé prohlížeče, docházelo k rozdílům v implementaci. Takže třeba cross-browser testování byla spíše teorie.
  • 6. https://w3c.github.io/webdriver/ Proto bylo třeba protokol standardizovat, což se vývojářům Selenia ve spolupráci s výrobci prohlížečů povedlo pod hlavičkou W3C. A tak se po šesti letech práce stal protokol W3C WebDriver vloni plnohodnotným standardem a oficiální webovou technologií s růžovou budoucností. Proto bylo třeba protokol standardizovat, což se vývojářům Selenia ve spolupráci s výrobci prohlížečů povedlo pod hlavičkou W3C. A tak se po šesti letech práce stal protokol W3C WebDriver vloni plnohodnotným standardem a oficiální webovou technologií s růžovou budoucností.
  • 7. W 3C W ebDriver W3C WebDriver W3C WebDriver Selenium tak kromě starého JsonWire protokolu umí nově mluvit i standardizovaným W3C WebDriver protokolem. (Pokud ho umí knihovna ve vašem jazyce). A protože to je standard, mohou ho na straně prohlížečů také dobře implementovat jejich výrobci – Mozilla, Chrome, Apple... Selenium tak kromě starého JsonWire protokolu umí nově mluvit i standardizovaným W3C WebDriver protokolem. (Pokud ho umí knihovna ve vašem jazyce). A protože to je standard, mohou ho na straně prohlížečů také dobře implementovat jejich výrobci – Mozilla, Chrome, Apple...
  • 8. W3C WebDriver a k čemu nám to je
  • 9. „Selenium WebDriver je de-facto standard pro automatizaci ovládání prohlížečů“ Doteď jsme říkali, že Selenium WebDriver je „de-facto“ standard. Protože na tom panovala neformální shoda... Doteď jsme říkali, že Selenium WebDriver je „de-facto“ standard. Protože na tom panovala neformální shoda...
  • 10. „Selenium WebDriver je de-facto standard pro automatizaci ovládání prohlížečů“ Teď už ale „de-facto“ říkat nemusíme. WebDriver je skutečný standard pro🎉 automatizované ovládání prohlížečů – žádný jiný takový standard neexistuje. Tím, že je pod W3C, je to i formální dohoda výrobců prohlížečů, kteří se vlastně zavázali, že standard budou sami implementovat a podporovat. Teď už ale „de-facto“ říkat nemusíme. WebDriver je skutečný standard pro🎉 automatizované ovládání prohlížečů – žádný jiný takový standard neexistuje. Tím, že je pod W3C, je to i formální dohoda výrobců prohlížečů, kteří se vlastně zavázali, že standard budou sami implementovat a podporovat.
  • 11. Podpora od výrobců prohlížečů https://webdriver-herald.herokuapp.com/ k 27. 3. 2019 A opravdu to dělají a implementují ho. S každou další verzí prohlížečů se navíc implementace zlepšuje. Takže to vypadá, že díky novému standardu a tím sjednocení chování prohlížečů se stane cross-browser testování (které opravdu funguje) brzy realitou. A opravdu to dělají a implementují ho. S každou další verzí prohlížečů se navíc implementace zlepšuje. Takže to vypadá, že díky novému standardu a tím sjednocení chování prohlížečů se stane cross-browser testování (které opravdu funguje) brzy realitou.
  • 12. JsonWire Protocol W3C WebDriver Selenium 2 Selenium 3 Selenium 4 ✓ ✓ ✓ 😐 😐 😊 V Seleniu 3 už je většina standardu W3C WebDriver implementovaná a v Seleniu 4 by měl být implementovaný plně. Starý JsonWire protokol ale nadále funguje a i v Seleniu 4.0 by měl pořád fungovat – ale je už označený za „obsolete“ a jeho fragmenty mohou být postupně odstraňovány. V Seleniu 3 už je většina standardu W3C WebDriver implementovaná a v Seleniu 4 by měl být implementovaný plně. Starý JsonWire protokol ale nadále funguje a i v Seleniu 4.0 by měl pořád fungovat – ale je už označený za „obsolete“ a jeho fragmenty mohou být postupně odstraňovány.
  • 13. Přechod na W3C WebDriver Firefox 48+ (Geckodriver) Chrome (Chromedriver) // wdio.conf.js exports.config = { capabilities: { browserName: 'chrome', 'goog:chromeOptions': { "w3c": true, } }, } + Selenium 3 + Pokud to knihovna ve vašem jazyce umí (nejspíš ano), a používáte Selenium 3, můžete ho už začít používat. A jestliže testujete ve Firefoxu 48+, tak už ho používáte, protože Geckodriver starý protokol ani neumí ¯_( ツ )_/¯. Pokud to knihovna ve vašem jazyce umí (nejspíš ano), a používáte Selenium 3, můžete ho už začít používat. A jestliže testujete ve Firefoxu 48+, tak už ho používáte, protože Geckodriver starý protokol ani neumí ¯_( ツ )_/¯.
  • 14. Přechod na W3C WebDriver Firefox 48+ (Geckodriver) Chrome (Chromedriver) // wdio.conf.js exports.config = { capabilities: { browserName: 'chrome', 'goog:chromeOptions': { "w3c": true, } }, } Od Chrome 75 je to výchozí ʘ‿ʘ Selenium 3 + + V Chrome si W3C protokol můžete zapnout, ale od Chrome a Chromedriveru 75 (vyšlo předevčírem) je W3C protokol už výchozí. Takže je možné, že na něj brzy beztak přejdete, a ideálně byste to ani neměli nijak negativně pocítit. 👌 V Chrome si W3C protokol můžete zapnout, ale od Chrome a Chromedriveru 75 (vyšlo předevčírem) je W3C protokol už výchozí. Takže je možné, že na něj brzy beztak přejdete, a ideálně byste to ani neměli nijak negativně pocítit. 👌
  • 16. Headless prohlížečeHeadless prohlížeče PhantomJSPhantomJS RIPRIP Když testy pouštíme na serveru, není třeba, aby se vykreslovalo okno prohlížeče. Použitím headless prohlížeče se web renderuje jenom v paměti a my tak můžeme ušetřit systémové prostředky i testy zrychlit. Dřív se na to používal prohlížeč PhantomJS – ale ten už je mrtvý a neudržovaný, protože headless režim dnes umí přímo Firefox i Chrome. Když testy pouštíme na serveru, není třeba, aby se vykreslovalo okno prohlížeče. Použitím headless prohlížeče se web renderuje jenom v paměti a my tak můžeme ušetřit systémové prostředky i testy zrychlit. Dřív se na to používal prohlížeč PhantomJS – ale ten už je mrtvý a neudržovaný, protože headless režim dnes umí přímo Firefox i Chrome.
  • 17. Headless prohlížeče // wdio.conf.js exports.config = { capabilities: { browserName: 'chrome', 'goog:chromeOptions': { args: ['--headless'], } }, } Stačí jenom nastavit v capabilities. Pro Firefox by to bylo obdobně: browserName: 'firefox', 'moz:firefoxOptions': { args: ['-headless'] } Stačí jenom nastavit v capabilities. Pro Firefox by to bylo obdobně: browserName: 'firefox', 'moz:firefoxOptions': { args: ['-headless'] }
  • 18. Spouštění testů v Dockeru Docker se dnes rve všude možně a jde použít i pro Selenium. V kontejneru nám pak běží Selenium i s kompatibilní verzí prohlížeče. Navenek se nic nezmění, pořád to komunikuje po HTTP portu jako předtím. Jen se nemusíme starat o instalaci prohlížečů, můžeme mít v kontejnerech vedle sebe víc různých verzí atd. Docker se dnes rve všude možně a jde použít i pro Selenium. V kontejneru nám pak běží Selenium i s kompatibilní verzí prohlížeče. Navenek se nic nezmění, pořád to komunikuje po HTTP portu jako předtím. Jen se nemusíme starat o instalaci prohlížečů, můžeme mít v kontejnerech vedle sebe víc různých verzí atd.
  • 19. Spouštění testů v Dockeru $ docker run -p 4444:4444 -p 5900:5900 selenium/standalone-chrome-debug:3.141.59 $ vncviewer localhost:5900 $ ./node_modules/.bin/wdio wdio.conf.js Jedním příkazem stáhneme a spustíme Docker se Seleniem a Chrome. Otevřeme port 4444 pro komunikaci Selenia a 5900 pro VNC, abychom se mohli koukat, co se uvnitř děje: Jedním příkazem stáhneme a spustíme Docker se Seleniem a Chrome. Otevřeme port 4444 pro komunikaci Selenia a 5900 pro VNC, abychom se mohli koukat, co se uvnitř děje: Připojíme se přes VNC dovnitř kontejneru:Připojíme se přes VNC dovnitř kontejneru: A testy spustíme jako předtím. Ve VNC pak můžeme vidět, jak nám vyskakují okna Chrome 🎉 A testy spustíme jako předtím. Ve VNC pak můžeme vidět, jak nám vyskakují okna Chrome 🎉
  • 20. Spouštění testů v Dockeru Selenium v Dockeru se navíc dá snadno škálovat, třeba přes Docker Swarm nebo Kubernetes, a můžete si sami nastartovat desítky nodů a zrychlit testy lepší paralelizací. Ve spojení s headless režimem si můžeme relativně jednoduše a s malými nároky vytvořit vlastní Selenium cloud, aniž bychom pálili peníze u SauceLabs, BrowserStacku apod. Selenium v Dockeru se navíc dá snadno škálovat, třeba přes Docker Swarm nebo Kubernetes, a můžete si sami nastartovat desítky nodů a zrychlit testy lepší paralelizací. Ve spojení s headless režimem si můžeme relativně jednoduše a s malými nároky vytvořit vlastní Selenium cloud, aniž bychom pálili peníze u SauceLabs, BrowserStacku apod.
  • 21. Spouštění testů bez Selenium serveru? W3C WebDriver Selenium Server má roli routeru (vybírá vhodný node, kde testu pustit), startuje požadované prohlížeče apod., ale pak požadavky z vašich testů předává zase dál na prohlížeč. Při lokálním vývoji tak možná roli routeru (a tedy Selenium server) nepotřebujeme... Selenium Server má roli routeru (vybírá vhodný node, kde testu pustit), startuje požadované prohlížeče apod., ale pak požadavky z vašich testů předává zase dál na prohlížeč. Při lokálním vývoji tak možná roli routeru (a tedy Selenium server) nepotřebujeme...
  • 22. W3C WebDriver W3C WebDriver Spouštění testů bez Selenium serveru? $ chromedriver --port=4444 # nebo geckodriver $ ./node_modules/.bin/wdio wdio.conf.js Pro lokální použití se tak nabízí možnost komunikovat přímo se prohlížečem – bez potřeby spouštění Selenium severu. Stačí nahodit driver prohlížeče změnit adresu kam se připojujeme (z http://localhost:4444/wd/hub na http://localhost:4444/) Pro lokální použití se tak nabízí možnost komunikovat přímo se prohlížečem – bez potřeby spouštění Selenium severu. Stačí nahodit driver prohlížeče změnit adresu kam se připojujeme (z http://localhost:4444/wd/hub na http://localhost:4444/)
  • 23. Selenium IDE TNG https://www.seleniumhq.org/selenium-ide/ Selenium IDE je rozšíření pro prohlížeč, které umožňuje naklikat a spouštět testy pomocí Selenia. Je nově přepsané jako WebExtension, takže funguje ve Firefoxu i v Chrome. Má zajímavé novinky, například v něm jde spouštět v rámci jednoho testu jiný, takže třeba opakující se login nemusíme mít nakopírovaný na více místech. Umí i řídící struktury (ify atd.). I tak ale platí, že Selenium IDE je spíše jen pro „hraní“ nebo malé projektíky – pro větší test suite je to neudžovatelné. Selenium IDE je rozšíření pro prohlížeč, které umožňuje naklikat a spouštět testy pomocí Selenia. Je nově přepsané jako WebExtension, takže funguje ve Firefoxu i v Chrome. Má zajímavé novinky, například v něm jde spouštět v rámci jednoho testu jiný, takže třeba opakující se login nemusíme mít nakopírovaný na více místech. Umí i řídící struktury (ify atd.). I tak ale platí, že Selenium IDE je spíše jen pro „hraní“ nebo malé projektíky – pro větší test suite je to neudžovatelné.
  • 24. ● Selenium IDE TNG $ npm install -g selenium-side-runner $ npm install -g chromedriver geckodriver $ selenium-side-runner Jobs.cz.side $ selenium-side-runner -c "browserName=firefox" Jobs.cz.side $ selenium-side-runner -c "browserName=chrome" -w 5 Jobs.cz.side $ selenium-side-runner -c "browserName=chrome chromeOptions.args=[headless]" … Když bychom Selenium IDE ale na něco použili, nově se testy napsané v něm dají uložit a spouštět z příkazové řádky třeba na CI serveru. A jde to klidně spouštět i paralelně nebo v headless režimu. Pořád to má ale daleko do plnohodnotného testování. Pro vyzkoušení end-to-end testování ale můžeme se Selenium IDE začít. Když bychom Selenium IDE ale na něco použili, nově se testy napsané v něm dají uložit a spouštět z příkazové řádky třeba na CI serveru. A jde to klidně spouštět i paralelně nebo v headless režimu. Pořád to má ale daleko do plnohodnotného testování. Pro vyzkoušení end-to-end testování ale můžeme se Selenium IDE začít.
  • 26. Selenium Mocha / Jasmine / Jest / … PHPUnit / Codeception / … TestNG / JUnit / … rspec / Cucumber / … unittest / pytest / … NUnit / … Cypress / Puppeteer Mocha (Cypress) crossbrowsertesting.com/blog/test-automation/selenium-vs-cypress/ automationrhapsody.com/cypress-vs-selenium-end-era/ applitools.com/blog/cypress-vs-selenium-webdriver-better-or-just-different Selenium a ekosystém okolo je tvořen řadou nástrojů: knihovny pro všemožné jazyky; pro testování můžete používat svůj oblíbený testovací framework; můžete testovat oproti různým prohlížečům i mobilním zařízením. Díky W3C WebDriver standardu navíc nově s lepší cross-browser kompatibilitou a stabilněji, než kdy dříve. Selenium a ekosystém okolo je tvořen řadou nástrojů: knihovny pro všemožné jazyky; pro testování můžete používat svůj oblíbený testovací framework; můžete testovat oproti různým prohlížečům i mobilním zařízením. Díky W3C WebDriver standardu navíc nově s lepší cross-browser kompatibilitou a stabilněji, než kdy dříve. Nástroje jako Cypress nebo Puppeteer tak rozhodně Selenium nenahrazují ani nestojí proti němu – spíš jsou určeny na jinou věc. Ideální uplatnění mohou najít zejména u frontend vývojářů, pro testování SPA aplikací postavených na Reactu/Vue apod. Díky tomu, jak tyto nástroje fungují, jsou na to rychlejší než Selenium a umožňují některé věci, na které Selenium vlastně ani není vhodný nástroj. Nástroje jako Cypress nebo Puppeteer tak rozhodně Selenium nenahrazují ani nestojí proti němu – spíš jsou určeny na jinou věc. Ideální uplatnění mohou najít zejména u frontend vývojářů, pro testování SPA aplikací postavených na Reactu/Vue apod. Díky tomu, jak tyto nástroje fungují, jsou na to rychlejší než Selenium a umožňují některé věci, na které Selenium vlastně ani není vhodný nástroj.
  • 27. Selenium 4 3.141.59 zůstane poslední verzí Selenia 3 18. 4. 2019 – v4.0.0-alpha-1 Kdy bude stabilní verze? github.com/SeleniumHQ/selenium/projects/2 Drop-in replacement Zcela přepsaný Selenium Grid Výkonnější, když máme hodně nodů. Rozdělený do komponent, takže např. ukládání sessions může být samostatný proces – takže když by se router třeba zasekl a my ho restartovali, sessions by nám zůstaly živé a nemuseli bychom všechny běžící testy restartovat. Výkonnější, když máme hodně nodů. Rozdělený do komponent, takže např. ukládání sessions může být samostatný proces – takže když by se router třeba zasekl a my ho restartovali, sessions by nám zůstaly živé a nemuseli bychom všechny běžící testy restartovat. Pro většinu uživatelů bude přechod na Selenium 4 jen o zvýšení verze, a všechno by mělo nadále fungovat bez negativní změny. Pro většinu uživatelů bude přechod na Selenium 4 jen o zvýšení verze, a všechno by mělo nadále fungovat bez negativní změny. Vývoj se už soustředí na Selenium 4, takže k další aproximaci verze směrem k hodnotě π už nejspíše nedojde.Vývoj se už soustředí na Selenium 4, takže k další aproximaci verze směrem k hodnotě π už nejspíše nedojde. Už se dá dokonce vyzkoušet alpha verze Selenia 4Už se dá dokonce vyzkoušet alpha verze Selenia 4 Na GitHubu můžete sledovat, v jakém stavu se vývoj Selenia 4 nachází. Podle Simon Stewarta (lead developer Selenium projektu) vyjde Selenium 4 na čínský Nový rok. Neřekl tedy který, nejbližší možnost je 25. ledna 2020 .🤷 Na GitHubu můžete sledovat, v jakém stavu se vývoj Selenia 4 nachází. Podle Simon Stewarta (lead developer Selenium projektu) vyjde Selenium 4 na čínský Nový rok. Neřekl tedy který, nejbližší možnost je 25. ledna 2020 .🤷
  • 28.  Ondřej Machulda  ondrejmachulda.cz  @OndraM Q & A