Slide 1

Slide 1 text

FUNCTIONAL TESTING automatically with Selenium @josephj6802

Slide 2

Slide 2 text

'VODUJPOBMUFTUJOHJTBRVBMJUZBTTVSBODF 2"  QSPDFTTBOEBUZQFPGCMBDLCPYUFTUJOHUIBU CBTFTJUTUFTUDBTFTPOUIFTQFDJDBUJPOTPGUIF TPGUXBSFDPNQPOFOUVOEFSUFTU What’s FT? IUUQTFOXJLJQFEJBPSHXJLJ'VODUJPOBM@UFTUJOH

Slide 3

Slide 3 text

Functional Testing in Stackla .BOVBM1BTTJWF5FTUJOHXIFOGFBUVSFDPNQMFUFVTFSSFQPSUT Can u borrow me your iPhone 5?

Slide 4

Slide 4 text

Headless vs. Selenium Headless Browser ˙'BTUFS/PHSBQIJDPVUQVU ˙&BTFPGVTF+VTUBOFYFDVUBCMFCJOBSZ ˙-JNJUFE0OMZ8FCLJUBOE(FDLP Selenium ˙7FSZ4MPX"MXBZTPQFOTSFBMCSPXTFST ˙%JDVMUUP4FUVQDPNNXEJFSFOU7.T ˙$PWFSBHFFWFOGPS1IBOUPN+4

Slide 5

Slide 5 text

Misunderstandings Only available in Firefox Need to write Java for Selenium test cases or use Selenium IDE to record /P BMMUIFNBKPSCSPXTFSTTVQQPSUOPX /P ZPVDBOVTFUIFQSPHSBNNJOHMBOHVBHFZPVMJLF (Probably true in Selenium 1.0)

Slide 6

Slide 6 text

BOFYFDVUBCMFMFUIBUBDUTBTBCSJEHFCFUXFFO4FMFOJVNBOEUIFCSPXTFS Selenium 2.0 Selenium 1.0 + = Selenium 2.0 8FC%SJWFS *OUFSOFU&YQMPSFS%SJWFS 'JSFGPY%SJWFS $ISPNF%SJWFS 4BGBSJ%SJWFS 0QFSB%SJWFS 3VCZ /PEFKT 1)1 npm install selenium-webdriver gem install selenium-webdriver composer.phar require facebook/webdriver

Slide 7

Slide 7 text

Manipulate Chrome w/ Node.js + ChromeDriver Get Feet Wet! $ISPNF%SJWFS var webdriver = require(‘selenium-webdriver'), expect = require('expect'), driver = new webdriver.Builder().forBrowser('chrome').build(); driver.get('http://stackla.com'); driver.getTitle().then(function (title) { expect(title).toBe(“Stackla - Social Media Aggregator“); }); driver.quit();  %PXOMPBE$ISPNF%SJWFS  1VU$ISPNF%SJWFSUPZPVS1"5)  *OTUBMMUIFSFRVJSFEQBDLBHF T   8SJUFTDSJQU  3VOJU Tip: Node.JS 4.x

Slide 8

Slide 8 text

Scalability 4FMFOJVN(SJET #VJMEZPVSPXO

Slide 9

Slide 9 text

Scalability $MPVE4FSWJDF 8IZCVJMEPVSPXO 6TF .PVOUBJO7JFX 64 .VNCBJ *OEJB ,VVSOF #FMHJVN

Slide 10

Slide 10 text

Trial Run with

Slide 11

Slide 11 text

Manual Testing ˙ CSPXTFS04DPNCJOBUJPOT ˙*OEJWJEVBM7.T ˙5FTUMPDBMBOETFSWFSCFIJOESFXBMM CZFTUBCMJTIJOHBUVOOFM IUUQTTBVDFMBCTDPNCFUBNBOVBM

Slide 12

Slide 12 text

Manual Testing #FIJOESFXBMMPSMPDBMIPTU /PQSPCMFN

Slide 13

Slide 13 text

Automated Testing IUUQTTBVDFMBCTDPNCFUBEBTICPBSEUFTUT

Slide 14

Slide 14 text

My Tools Browser testing on SauceLabs 1SPWJEF"1*CZ CSPXTFS HMPCBMWBSJBCMF 5SJHHFSUPSVOBMMUFTUDBTFT #VJME5VOOFM #VJME8FC4FSWFS "MMJOPOFUFTUGSBNFXPSL Jasmine 4FMFOJVNCJOEJOHTGPS/PEF+4 Webdriver.io Grunt 0OEFNBOECVJMET7.T #SPXTFS 1MBUGPSN SauceLabs

Slide 15

Slide 15 text

exports.config = { user: process.env.SAUCE_USERNAME, key: process.env.SAUCE_ACCESS_KEY, updateJob: true, specs: ['./tests/*_test.js'], capabilities: [{ browserName: 'firefox', version: 37, name: 'Firefox Selenium tests', build: 'build-' + process.env.TRAVIS_BUILD_ID, 'tunnel-identifier': process.env.TRAVIS_JOB_NUMBER },{ browserName: 'chrome', version: 43, name: 'Chrome Selenium tests', build: 'build-' + process.env.TRAVIS_BUILD_ID, 'tunnel-identifier': process.env.TRAVIS_JOB_NUMBER },{ browserName: 'internet explorer', version: 11, name: 'IE Selenium tests', build: 'build-' + process.env.TRAVIS_BUILD_ID, 'tunnel-identifier': process.env.TRAVIS_JOB_NUMBER },{ browserName: 'safari', version: 6, name: 'Safari Selenium tests', build: 'build-' + process.env.TRAVIS_BUILD_ID, 'tunnel-identifier': process.env.TRAVIS_JOB_NUMBER }], baseUrl: 'http://localhost:8585', framework: 'jasmine', reporter: ‘spec' }; ./wdio-saucelab.conf.js // browser - webdriver instance describe('Index Page', function() { it('should have title', function* () { yield browser.url('/index.html'); expect(yield browser.getTitle()).toBe('Browser Testing'); }); it('shoud have Stackla widget', function* () { yield browser.url('/'); expect(yield browser.isExisting('.stackla-widget')); }); }); ./tests/index_test.js Browser Testing

Browser Testing

(function (d, id) { if (d.getElementById(id)) return; var t = d.createElement('script'); t.type = 'text/javascript'; t.src = '//assetscdn.stackla.com/media/js/widget/ fluid-embed.js'; t.id = id; (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(t); }(document, 'stackla-widget-js')); http://localhost:8585/index.html Need to build a web server and tunnel $ wdio wdio-saucelab.conf.js

Slide 16

Slide 16 text

Automated Build USJHHFSJOHCVJMECZHJUQVTI

Slide 17

Slide 17 text

TravisCI My Tools Delegating testing task to CI Server 1SPWJEF"1*CZ CSPXTFS HMPCBMWBSJBCMF 5SJHHFSUPSVOBMMUFTUDBTFT #VJME5VOOFM #VJME8FC4FSWFS "MMJOPOFUFTUGSBNFXPSL Jasmine 4FMFOJVNCJOEJOHTGPS/PEF+4 Webdriver.io Grunt 0OEFNBOECVJMET7.T #SPXTFS 1MBUGPSN SauceLabs

Slide 18

Slide 18 text

Enable Build https://github.com/josephj/browser-testing

Slide 19

Slide 19 text

Whenever user makes git push Set environment variables for SauceConnect Settings

Slide 20

Slide 20 text

language: node_js node_js: - "4.1" before_script: - npm install grunt-cli -g - npm install webdriverio -g - npm install jasmine -g addons: sauce_connect: true branches: only: - master - gh-pages script: - grunt test:saucelabs Config File ./travis.yml

Slide 21

Slide 21 text

https://travis-ci.org/josephj/browser-testing Let’s Build! $ git push

Slide 22

Slide 22 text

Todo List ˙$PNQBSFEJFSFOUTFSWJDFT ˙#SPXTFS4UBDL 5FTUJOH#PU ˙3FBEUIF8FC%SJWFS*0"1* ˙IUUQXFCESJWFSJPBQJIUNM ˙8SJUFUFTUTGPS4UBDLMB8JEHFU ˙*OUFHSBUFX#BNCPP#VJME ˙1VMM3FRVFTUNJHIUCFBHPPEUJNJOH

Slide 23

Slide 23 text

Pricing Unlimted Automation Testing but slow with 1 parallel VM Better speed but with limited time Fastest and quiet enough time

Slide 24

Slide 24 text

Google Trends BrowserStack is the most popular one

Slide 25

Slide 25 text

Resources ˙#FTU1SBDUJDFGPS3VOOJOH5FTUTXJUI4BVDF-BCT ˙IUUQTXJLJTBVDFMBCTDPNEJTQMBZ%0$4#FTU 1SBDUJDFT GPS 3VOOJOH 5FTUT XJUI 4BVDF -BCT ˙*OTUBMMJOHBOE$POHVSJOHUIF4BVDF-BCT1MVHJOGPS#BNCPP ˙IUUQTXJLJTBVDFMBCTDPNEJTQMBZ%0$4*OTUBMMJOH BOE $POHVSJOH UIF 4BVDF -BCT 1MVHJO GPS #BNCPP ˙#BTJD)551"VUIFOUJDBUJPO ˙IUUQTXJLJTBVDFMBCTDPNEJTQMBZ%0$4#BTJD )551 "VUIFOUJDBUJPO ˙*OKFDUJOH$PPLJFTUP#ZQBTT"VUIFOUJDBUJPO%JBMPHT ˙IUUQTXJLJTBVDFMBCTDPNEJTQMBZ%0$4*OKFDUJOH $PPLJFT UP #ZQBTT "VUIFOUJDBUJPO %JBMPHT https://github.com/josephj/browser-testing