test automation & seleniun by oren rubin
DESCRIPTION
Overview explanation on End to End Test Automation with focus UI Testing (and Selenium).TRANSCRIPT
![Page 1: Test automation & Seleniun by oren rubin](https://reader033.vdocuments.net/reader033/viewer/2022060122/5595aef21a28abf73d8b45f1/html5/thumbnails/1.jpg)
Test Automation & Selenium
Oren RubinCEO, Testim.io
![Page 2: Test automation & Seleniun by oren rubin](https://reader033.vdocuments.net/reader033/viewer/2022060122/5595aef21a28abf73d8b45f1/html5/thumbnails/2.jpg)
Oren Rubin
![Page 3: Test automation & Seleniun by oren rubin](https://reader033.vdocuments.net/reader033/viewer/2022060122/5595aef21a28abf73d8b45f1/html5/thumbnails/3.jpg)
● Why Unit Tests aren't enough?
● Writing Unit Tests !== Writing E2E Tests
● Meet Selenium
● Best practices & Design Patterns
● Selenium Grid
● UI Validations
● Record / Playback
Today's Menu
![Page 4: Test automation & Seleniun by oren rubin](https://reader033.vdocuments.net/reader033/viewer/2022060122/5595aef21a28abf73d8b45f1/html5/thumbnails/4.jpg)
Selenium to UI-Testing is like..
Power Steering & Automatic Transmission is to Driving
I'm not making you
coffee!
![Page 5: Test automation & Seleniun by oren rubin](https://reader033.vdocuments.net/reader033/viewer/2022060122/5595aef21a28abf73d8b45f1/html5/thumbnails/5.jpg)
Unit Tests: Same language, Easy setup. Synchronous.
// Setup Account account = new Account();
// Stimuli e.g. click, setting text, XHRaccount.login( "borg", "resistance is futile" );
// Validation assert( account.isLoggedIn(), true );
E2E vs. Unit - same same but different
![Page 6: Test automation & Seleniun by oren rubin](https://reader033.vdocuments.net/reader033/viewer/2022060122/5595aef21a28abf73d8b45f1/html5/thumbnails/6.jpg)
E2E is
the real
SHIT!
![Page 7: Test automation & Seleniun by oren rubin](https://reader033.vdocuments.net/reader033/viewer/2022060122/5595aef21a28abf73d8b45f1/html5/thumbnails/7.jpg)
● Synchronous?
● Same language?
● Easy setup?
○ Where are the browsers running?
○ Who's in charge of keeping them alive?
E2E is hard!
![Page 8: Test automation & Seleniun by oren rubin](https://reader033.vdocuments.net/reader033/viewer/2022060122/5595aef21a28abf73d8b45f1/html5/thumbnails/8.jpg)
Expected: Actual:
Cowabunga
It gets worse.. I shit you not!
Cowabunga Cowabungaz-index
Cowabungasize
CowabungaThe Flying Pony
Cowabunga
Over here!
Blur, Focus, ….
CSS
HTML
JS Event
![Page 9: Test automation & Seleniun by oren rubin](https://reader033.vdocuments.net/reader033/viewer/2022060122/5595aef21a28abf73d8b45f1/html5/thumbnails/9.jpg)
One browser.. you wish!
* What about responsive design?!
![Page 10: Test automation & Seleniun by oren rubin](https://reader033.vdocuments.net/reader033/viewer/2022060122/5595aef21a28abf73d8b45f1/html5/thumbnails/10.jpg)
Which language do you prefer?
Test Language?
![Page 11: Test automation & Seleniun by oren rubin](https://reader033.vdocuments.net/reader033/viewer/2022060122/5595aef21a28abf73d8b45f1/html5/thumbnails/11.jpg)
Meet Selenium
![Page 12: Test automation & Seleniun by oren rubin](https://reader033.vdocuments.net/reader033/viewer/2022060122/5595aef21a28abf73d8b45f1/html5/thumbnails/12.jpg)
Why the name Selenium?
![Page 13: Test automation & Seleniun by oren rubin](https://reader033.vdocuments.net/reader033/viewer/2022060122/5595aef21a28abf73d8b45f1/html5/thumbnails/13.jpg)
Selenium 1 - JS based
Selenium 2 - WebDriver & WebElements
Selenium 3 - Mobile
Past, Present, and Future
![Page 14: Test automation & Seleniun by oren rubin](https://reader033.vdocuments.net/reader033/viewer/2022060122/5595aef21a28abf73d8b45f1/html5/thumbnails/14.jpg)
Google Trends - Same for Jobs
![Page 15: Test automation & Seleniun by oren rubin](https://reader033.vdocuments.net/reader033/viewer/2022060122/5595aef21a28abf73d8b45f1/html5/thumbnails/15.jpg)
Example - la login
![Page 16: Test automation & Seleniun by oren rubin](https://reader033.vdocuments.net/reader033/viewer/2022060122/5595aef21a28abf73d8b45f1/html5/thumbnails/16.jpg)
// setupWebDriver driver = new Chrome();driver.get("http://www.google.com");
// stimulidriver.findElement( By.id("user") ).sendKeys("mel brooks");driver.findElement( By.id("password") ).sendKeys("12345");driver.findElement( By.id("submit") ).submit();
// assertionassert(driver.getTitle(), "That's the kind of thing an idiot would have on his luggage!");
// tear downdriver.quit();
Example
![Page 17: Test automation & Seleniun by oren rubin](https://reader033.vdocuments.net/reader033/viewer/2022060122/5595aef21a28abf73d8b45f1/html5/thumbnails/17.jpg)
Architecture
?Can anyone suggest a good architecture?
...
...
![Page 18: Test automation & Seleniun by oren rubin](https://reader033.vdocuments.net/reader033/viewer/2022060122/5595aef21a28abf73d8b45f1/html5/thumbnails/18.jpg)
One (W3C) Standard to rule them all!
https://code.google.com/p/selenium/wiki/JsonWireProtocol http://www.w3.org/TR/webdriver/
![Page 19: Test automation & Seleniun by oren rubin](https://reader033.vdocuments.net/reader033/viewer/2022060122/5595aef21a28abf73d8b45f1/html5/thumbnails/19.jpg)
HTTP as a universal language
? The WireProtocol
SDK Driver
![Page 20: Test automation & Seleniun by oren rubin](https://reader033.vdocuments.net/reader033/viewer/2022060122/5595aef21a28abf73d8b45f1/html5/thumbnails/20.jpg)
Closer look
new Chrome(); chromedriver.exe
BrowserHTTP Request
localhost:4444/click
driver = new Chrome();...submitBtn.click();
driver
note: don't forget to frequently update chromedriver.exe
![Page 21: Test automation & Seleniun by oren rubin](https://reader033.vdocuments.net/reader033/viewer/2022060122/5595aef21a28abf73d8b45f1/html5/thumbnails/21.jpg)
Now for Firefox
new Firefox(); webdriver.xpi
BrowserHTTP Request
localhost:4444/click
driver
driver = new Firefox();...submitBtn.click();
![Page 22: Test automation & Seleniun by oren rubin](https://reader033.vdocuments.net/reader033/viewer/2022060122/5595aef21a28abf73d8b45f1/html5/thumbnails/22.jpg)
Let's improveloginChromeTest () { driver = new Chrome(); loginTest(driver);}
loginFirefoxTest () { driver = new Firefox(); loginTest(driver);}
loginTest (driver) { driver.findElement( By.id("user") ).sendKeys("mel brooks"); driver.findElement( By.id("password") ).sendKeys("12345"); driver.findElement( By.id("submit") ).submit();}
![Page 23: Test automation & Seleniun by oren rubin](https://reader033.vdocuments.net/reader033/viewer/2022060122/5595aef21a28abf73d8b45f1/html5/thumbnails/23.jpg)
Page Objects
A Design Pattern.
Provides a programmatic API to drive and interrogate a UI
Best Practices & Design Patterns
http://www.slideshare.net/orenrubin/page-objects-presentation-selenium-conference-2014-38767492
![Page 24: Test automation & Seleniun by oren rubin](https://reader033.vdocuments.net/reader033/viewer/2022060122/5595aef21a28abf73d8b45f1/html5/thumbnails/24.jpg)
// setupWebDriver driver = new Chrome();driver.get("http://www.google.com");
// stimulidriver.findElement( By.id("user") ).sendKeys("mel brooks");driver.findElement( By.id("password") ).sendKeys("12345");driver.findElement( By.id("submit") ).submit();
// assertionassert(driver.getTitle(), "That's the kind of thing an idiot would have on his luggage!");
// tear downdriver.quit();
ExampleSimon says no!
@Testvoid loginTest () {
![Page 25: Test automation & Seleniun by oren rubin](https://reader033.vdocuments.net/reader033/viewer/2022060122/5595aef21a28abf73d8b45f1/html5/thumbnails/25.jpg)
Test Automation Architecture
Link to "Page Objects Done Right" Presentation
![Page 26: Test automation & Seleniun by oren rubin](https://reader033.vdocuments.net/reader033/viewer/2022060122/5595aef21a28abf73d8b45f1/html5/thumbnails/26.jpg)
Selenium Grid
● Concurrency
● Multiple Platforms
![Page 27: Test automation & Seleniun by oren rubin](https://reader033.vdocuments.net/reader033/viewer/2022060122/5595aef21a28abf73d8b45f1/html5/thumbnails/27.jpg)
Remember this?
new Chrome(); chromedriver.exe
BrowserHTTP Request
localhost:8989/click
driver = new Chrome();...submitBtn.click();
driver
![Page 28: Test automation & Seleniun by oren rubin](https://reader033.vdocuments.net/reader033/viewer/2022060122/5595aef21a28abf73d8b45f1/html5/thumbnails/28.jpg)
What we want
new Chrome(); chromedriver.exe
BrowserHTTP Request
<some-ip>:8989/click
driver = new Chrome();...submitBtn.click();
driver
computer 1 computer 2
![Page 29: Test automation & Seleniun by oren rubin](https://reader033.vdocuments.net/reader033/viewer/2022060122/5595aef21a28abf73d8b45f1/html5/thumbnails/29.jpg)
Selenium Grid
java -jar selenium.jar -port 4444 -role hub
selenium hub
Node 0 on 10.0
![Page 30: Test automation & Seleniun by oren rubin](https://reader033.vdocuments.net/reader033/viewer/2022060122/5595aef21a28abf73d8b45f1/html5/thumbnails/30.jpg)
Selenium Grid
Node 1 on 10.1
Node 2 on 10.2
selenium node
java -jar selenium.jar -role webdriver -browser firefox -hubHost 10.0 –port 8989
java -jar selenium.jar -port 4444 -role hub
selenium node
java -jar selenium.jar -role webdriver -browser chrome -hubHost 10.0 –port 8989
selenium hub
Node 0 on 10.0
chromedriver.exe
firefox-webdriver.dpi
![Page 31: Test automation & Seleniun by oren rubin](https://reader033.vdocuments.net/reader033/viewer/2022060122/5595aef21a28abf73d8b45f1/html5/thumbnails/31.jpg)
Selenium Grid
new Chrome();
BrowserHTTP Request
10.0:4444/chrome
hub = new URL("10.0:4444/wd/hub")cap = new Capabilities ("chrome", "v3", "windows")driver = new RemoteWebDriver( hub, cap );...
driver
my computer / CI server
Node 1 on 10.1
Node 2 on 10.2
selenium node
java -jar selenium.jar -role webdriver -hubHost 10.1 –port 8989
java -jar selenium.jar -port 4444 -role hub
selenium node
java -jar selenium.jar -role webdriver -hubHost 10.1 –port 8989
selenium hub
Node 0 on 10.0
HTTP Request
10.2:8989/chrome
chromedriver.exe
firefox-webdriver.dpi
![Page 32: Test automation & Seleniun by oren rubin](https://reader033.vdocuments.net/reader033/viewer/2022060122/5595aef21a28abf73d8b45f1/html5/thumbnails/32.jpg)
Selenium Grid
new Chrome();
BrowserHTTP Request
10.0:4444/click
driver = ...
submitBtn = driver.find(By.id("submit"));submitBtn.click();
driver
my computer / CI server
Node 1 on 10.1
Node 2 on 10.2
selenium node
java -jar selenium.jar -role webdriver -hubHost 10.1 –port 8989
java -jar selenium.jar -port 4444 -role hub
selenium node
java -jar selenium.jar -role webdriver -hubHost 10.1 –port 8989
selenium hub
Node 0 on 10.0
HTTP Request
10.2:8989/click
chromedriver.exe
firefox-webdriver.dpi
![Page 33: Test automation & Seleniun by oren rubin](https://reader033.vdocuments.net/reader033/viewer/2022060122/5595aef21a28abf73d8b45f1/html5/thumbnails/33.jpg)
Browsers in the cloudSelenium Grid as a Service
SaaS Open source
![Page 34: Test automation & Seleniun by oren rubin](https://reader033.vdocuments.net/reader033/viewer/2022060122/5595aef21a28abf73d8b45f1/html5/thumbnails/34.jpg)
Spot the differences
![Page 35: Test automation & Seleniun by oren rubin](https://reader033.vdocuments.net/reader033/viewer/2022060122/5595aef21a28abf73d8b45f1/html5/thumbnails/35.jpg)
UI Verification - Applitools eyeOne image is worth a 1000 assertions