Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Automatic Functional Testing with Selenium and SauceLabs

Joseph Chiang
February 04, 2016

Automatic Functional Testing with Selenium and SauceLabs

Build automatic functional testing environment easily (Tool used: Selenium Webdriver, Grunt,

Joseph Chiang

February 04, 2016
Tweet

More Decks by Joseph Chiang

Other Decks in Technology

Transcript

  1. 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)
  2. 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
  3. 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
  4. 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
  5. 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 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Browser Testing</title> </head> <body> <h1>Browser Testing</h1> <div class="stackla-widget" data-id="6605" data- hash="5663ac9e3843f" data-ct="" data-alias="josephj.stackla.com" data-ttl="30" style="width: 100%; overflow: hidden;"></div> <script type="text/javascript"> (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')); </script> </body> </html> http://localhost:8585/index.html Need to build a web server and tunnel $ wdio wdio-saucelab.conf.js
  6. 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
  7. 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
  8. Pricing Unlimted Automation Testing but slow with 1 parallel VM

    Better speed but with limited time Fastest and quiet enough time
  9. 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