SlideShare una empresa de Scribd logo
1 de 59
Testing Single-page Web App
Akshay Mathur
Siddharth Saha
Nikita Mundhada
Ground Rules
• Post on FB and Tweet now
• Disturb Everyone during the
session
– Not by phone rings
– Not by local talks
– By more information and
questions
2@akshaymathu @sid_chilling @nikitascorner
Let’s Know Each Other
• Do you code?
• Do you test?
• OS?
• Programing Language?
• HTML DOM, CSS Selectors, JQuery ?
• Why are you attending?
3@akshaymathu @sid_chilling @nikitascorner
Akshay Mathur
• Managed development, testing and release
teams in last 14+ years
– Currently Principal Architect at ShopSocially
• Founding Team Member of
– ShopSocially (Enabling “social” for retailers)
– AirTight Neworks (Global leader of WIPS)
4@akshaymathu @sid_chilling @nikitascorner
Siddharth Saha
• CS graduate from NIT Rourkela
• 3+ years in Software Product industry
• Worked in Telecom (Drishti Soft) and Social
Shopping (ShopSocially) Domains
• Currently Junior Application Architect at
ShopSocially
5@akshaymathu @sid_chilling @nikitascorner
Nikita Mundhada
• CS graduate from PICT Pune
• 2 years in Software Product industry
• Worked
– at Amdocs as a Java Developer
– at ShopSocially as a Full Stack Developer
• Going back to college
– For MS at Georgia Institute of Technology
6@akshaymathu @sid_chilling @nikitascorner
Agenda
• Problem Statement
– What are single page apps and how are they different
– Why other tools fail testing dynamic DoM in browser
• Introduction to Server Side Javascript and Related
Technologies
– Headless Browser, NodeJS, PhantomJS, CasperJS, Splinter
• Demonstrations and Code Walkthroughs
– Invoking UI test suite, in the browser from Python console,
using Splinter
– Testing UI from command line, without opening the
browser, using CasperJS
7@akshaymathu @sid_chilling @nikitascorner
Traditional Web Apps
Dynamic on Server
The Evolution of Web
9
@akshaymathu @sid_chilling
@nikitascorner
Traditional Apps
• Action items are implemented as hyperlinks to
URLs
• Different web page is requested from server
for next step of workflow
• Browser’s address bar is the only progress
indicator
• Tooltips are available for in-context help
10@akshaymathu @sid_chilling @nikitascorner
Page Construction
• On Server:
– Dynamic portion of the page executes and brings
the data
– HTML gets constructed using PHP, ASP, JSP etc.
• On Client:
– Browser renders the HTML DOM
– No major change happens in HTML DOM after
rendering
• Light use of Javascript
11@akshaymathu @sid_chilling @nikitascorner
Traditional Testing Tools Work Fine
• Get a copy of HTML DOM just before it is
being rendered by web browser
• Do not execute Javascript
• For recognizing DOM elements:
– Old: Use window coordinates
– New: Use Object’s xPath
• Use UI elements/Events for interactions
12@akshaymathu @sid_chilling @nikitascorner
Modern Apps
Dynamic on Client
Modern Apps
• Javascript event handlers are attached to on-
screen actions
• Only required portion of page gets updated as
needed
• Loading indicator appears whenever user
need to wait
• Rich in-context interaction, in form of light-
box popups
14@akshaymathu @sid_chilling @nikitascorner
Page Construction
• On Server:
– Minimal HTML rendering
– Typically no (or minimum) data-driven components
– Separate calls for data
• On Client:
– Data requested from Server using AJAX calls
– HTML DOM changes dynamically
– Workflow implemented in browser
• Heavy use of Javascript
– Jquery, BackboneJS etc.
15@akshaymathu @sid_chilling @nikitascorner
Traditional Testing Tools Fail
• Changed HTML DOM is not available to the
tool
• xPaths of existing elements change
16@akshaymathu @sid_chilling @nikitascorner
Requirements for New Age Tools
• Should have complete control over HTML
DOM and the Javascript on the page
– Should be able to fire DOM events as user does
– Should be able run Javascript on the page as it
happens in the browser on user’s action
– Should be able to get changed DOM as needed
• Should use selectors rather than xPaths
• Should not depend too much on screen
painting
17@akshaymathu @sid_chilling @nikitascorner
18@akshaymathu @sid_chilling @nikitascorner
Javascript Runtime Environment
Outside the Brower
NodeJS
• Technology that allows to use Javascript on
server side or in command line environment
– A complete app-server and web-framework can
be written using NodeJS
• Even-driven and Asynchronous programming
– High performance
– Low response time
20@akshaymathu @sid_chilling @nikitascorner
Headless Browser
• Browser without Graphical User Interface
– Implements everything same as web browsers
• HTTP Request and Response handling
• Rendering Engine
• HTTP DOM and Events
• Javascript Runtime Environment
• Used for website testing, screen capture and
page automation from command line
21@akshaymathu @sid_chilling @nikitascorner
Headless Browsers
• Phantom JS
– Headless browser implementing Webkit
• Similar to Chrome, Safari
• Slimer JS
– Upcoming headless browser implementing Gecko
• Similar to Firefox
22@akshaymathu @sid_chilling @nikitascorner
Testing Tools
Casper JS
• Tool built on top of Headless Browsers
– Same code works for PhantomJS and SlimerJS
• Eases the process of defining a full navigation
scenario
• Provides syntactic sugar for common tasks:
– Filling Forms
– Clicking and following links
– Logging events
– Finding DOM elements
– …
24@akshaymathu @sid_chilling @nikitascorner
Splinter
• Open source tool for testing web applications
using Python
• An abstraction layer on top of existing
browser automation tools:
– Selenium
– PhantomJS
– Zope
25@akshaymathu @sid_chilling @nikitascorner
26@akshaymathu @sid_chilling @nikitascorner
Demonstrations
• Important points to note
– The UI under test is sensitive to screen size
– The test includes interacting with the elements in
an iFrame
– The DOM in the iFrame changes dynamically
without loading the complete page
27@akshaymathu @sid_chilling @nikitascorner
ShopSocially
• Provides social apps to online retailers
– Most of apps are embed-able on web pages
• Execute in iFrame
• Do not reload page for better user experience
28@akshaymathu @sid_chilling @nikitascorner
Testing with Browser UI
Splinter Demonstration and Code
Siddharth Saha
Splinter
• Open source tool for testing web applications
using Python
• An abstraction layer on top of existing
browser automation tools:
– Selenium
– PhantomJS
– Zope
30@akshaymathu @sid_chilling @nikitascorner
Splinter
• Simple Python APIs
• Multiple webdrivers
– Chrome, Firefox, PhatomJS, Zope
– One code to rule them all
• CSS and Xpath Selectors
• Support for iframe and alerts
• Executes JavaScript
31@akshaymathu @sid_chilling @nikitascorner
Do with Splinter
• Browser Navigation
• Finding elements
• Mouse interactions
• Interacting with elements and forms
• Cookies manipulation
• Execute JavaScript
• Deal with HTTP status codes
• Interact with iframes, alerts and prompts
32@akshaymathu @sid_chilling @nikitascorner
@akshaymathu @sid_chilling @nikitascorner 33
Choosing Browser
from splinter import Browser
browser = Browser(„chrome‟)
B = Browser(user_agent =
„Mozilla/5.0 (iPhone; U;)‟)
34@akshaymathu @sid_chilling @nikitascorner
Navigation
browser.visit(
„http://shopsocially.com‟
)
browser.back()
browser.forward()
@akshaymathu @sid_chilling @nikitascorner 35
Finding DOM Element
browser.find_by_id(„my_id‟)
browser.find_by_name(„my_name‟)
browser.find_by_tag(„h1‟)
36@akshaymathu @sid_chilling @nikitascorner
Mouse Interactions
browser.find_by_tag(„div‟).first.
click()
browser.find_by_id(„my_id‟).
right_click()
browser.find_by_name(„my_name‟).
double_click()
browser.find_by_tag(„h1‟).
mouse_over()
37@akshaymathu @sid_chilling @nikitascorner
Interacting with Form Elements
browser.fill(„query‟,
„Siddharth‟)
browser.choose(„some-radio‟,
„radio-value‟)
browser.select(„my-dropdown‟,
„my-fav-value‟)
38@akshaymathu @sid_chilling @nikitascorner
Executing Javascript
browser.execute_script(
“$(„body‟).css(„bgcolor‟, „#ccc‟);
$(„#some_el‟).hide();”
)
39@akshaymathu @sid_chilling @nikitascorner
Dealing with iFrames
with
browser.get_iframe(„iframe_id‟)
as iframe:
iframe.fill(„query‟, „sid‟)
40@akshaymathu @sid_chilling @nikitascorner
• iFrame is another browser object
– Supports all the functionality of a browser
41@akshaymathu @sid_chilling @nikitascorner
Testing without Browser UI
CasperJS Demonstration and Code
Nikita Mudada
Casper JS
• Tool built on top of Headless Browsers
– Same code works for PhantomJS and SlimerJS
• Eases the process of defining a full navigation
scenario
• Provides syntactic sugar for common tasks:
– Filling Forms
– Clicking and following links
– Logging events
– Finding DOM elements
– …
43@akshaymathu @sid_chilling @nikitascorner
Casper JS
• Code written in only JavaScript/CoffeeScript
• Casper JS and the javascript in the page
execute in their own sandboxes
– Specific call is available to communicate
• Tester module provides functions and
assertions for testing
• Utils module provide general utilities for I/O
44@akshaymathu @sid_chilling @nikitascorner
Skeleton of a CasperJS program
@akshaymathu @sid_chilling @nikitascorner 45
then()
run()
evaluate()
Passes
Function
Returns
Value
Page DOM SandboxCasperJS Sandbox
Executes
Function
Example
@akshaymathu @sid_chilling @nikitascorner 46
var casper = require('casper').create();
casper.start('http://facebook.com/‟);
casper.then(function() {
this.echo(this.getTitle());
this.evaluate(function(){
alert("Cookies are:" + document.cookie);
});
});
casper.run();
Demonstration
@akshaymathu @sid_chilling @nikitascorner 47
Specifying Window Size
var casper =
require('casper').create({
verbose:true,
logLevel:'info',
waitTimeout:10000,
viewportSize:
{width: 900,
height:700}
});
48@akshaymathu @sid_chilling @nikitascorner
Checking for DOM Element
casper.then(function(){
this.test.assertExists(
'#ssmi_getafan_sidebar_image',
'Sidebar image loaded.');
this.click('#ssmi_getafan_sidebar_
image a');
this.page.switchToChildFrame("ssmi
_getafan_iframe");
@akshaymathu @sid_chilling @nikitascorner 49
Clicking a Hyperlink
casper.then(function(){
this.test.assertExists('#ssmi_geta
fan_sidebar_image', 'Sidebar
image loaded.');
this.click(
'#ssmi_getafan_sidebar_image a');
this.page.switchToChildFrame("ssmi
_getafan_iframe");
@akshaymathu @sid_chilling @nikitascorner 50
Getting into iFrame
casper.then(function(){
this.test.assertExists('#ssmi_geta
fan_sidebar_image', 'Sidebar
image loaded.');
this.click('#ssmi_getafan_sidebar_
image a');
this.page.switchToChildFrame(
"ssmi_getafan_iframe");
@akshaymathu @sid_chilling @nikitascorner 51
Getting info from Web Page
this.evaluate(function(){
alert("Cookies are:" +
document.cookie);
});
});
@akshaymathu @sid_chilling @nikitascorner 52
Waiting for Changing DOM
casper.waitForSelector(
'#coupon_area > span',
function() {
this.test.assertTextExists('Tha
nk you!', 'Thank you message
displayed correctly.');
});
@akshaymathu @sid_chilling @nikitascorner 53
Reporting Results
casper.run(function(){
require('utils').dump(
casper.test.getFailures());
require('utils').dump(
casper.test.getPasses());
casper.test.renderResults(
true, 0, 'test-results.xml');
});
@akshaymathu @sid_chilling @nikitascorner 54
Result Format
<testsuite>
<testcase classname="samples" name="Get-a-Fan App Sidebar loaded." time="39.647">
</testcase>
<testcase classname="samples" name="Found “Special-20” within the selector
coupon_area1 > span" time="0.013">
<failure type="assertSelectorHasText">Found "Special-20" within the selector
"#coupon_area1 > span“>
</failure>
</testcase>
</testsuite>
55@akshaymathu @sid_chilling @nikitascorner
Do with CasperJS
• Test webpages
– Report results in X-unit XML format
– Integrate with Continuous Integration tool like
Jenkins
• Take screenshots
• Fill forms
• Insert scripts into webpages
• Download links
56@akshaymathu @sid_chilling @nikitascorner
57@akshaymathu @sid_chilling @nikitascorner
Summary
• Nature of web apps is changing
– Javascript is becoming more and more powerful
– Dynamism has come to browser
• Testing tools are also catching up
– Dependency on UI layout is decreasing
• Using newer tools and technologies, We can
save a lot
– Tests are faster as they need not wait for UI
– Multiple CasperJS tests can run on same machine
58@akshaymathu @sid_chilling @nikitascorner
Thanks
59
@akshaymathu @sid_chilling @nikitascorner
@akshaymathu @sid_chilling @nikitascorner

Más contenido relacionado

La actualidad más candente

Isomorphic React Applications: Performance And Scalability
Isomorphic React Applications: Performance And ScalabilityIsomorphic React Applications: Performance And Scalability
Isomorphic React Applications: Performance And ScalabilityDenis Izmaylov
 
Service workers your applications never felt so good
Service workers   your applications never felt so goodService workers   your applications never felt so good
Service workers your applications never felt so goodChris Love
 
Bringing The Sexy Back To WebWorkers
Bringing The Sexy Back To WebWorkersBringing The Sexy Back To WebWorkers
Bringing The Sexy Back To WebWorkersCorey Clark, Ph.D.
 
Client Vs. Server Rendering
Client Vs. Server RenderingClient Vs. Server Rendering
Client Vs. Server RenderingDavid Amend
 
BP101: A Modernized Workflow w/ Domino/XPages
BP101: A Modernized Workflow w/ Domino/XPagesBP101: A Modernized Workflow w/ Domino/XPages
BP101: A Modernized Workflow w/ Domino/XPagesedm00se
 
Understanding Page Load / Ziling Zhao (Google)
Understanding Page Load / Ziling Zhao (Google)Understanding Page Load / Ziling Zhao (Google)
Understanding Page Load / Ziling Zhao (Google)Ontico
 
Automated Web App Performance Testing Using WebDriver
Automated Web App Performance Testing Using WebDriverAutomated Web App Performance Testing Using WebDriver
Automated Web App Performance Testing Using WebDriverseleniumconf
 
Testing Mobile JavaScript (Fall 2010
Testing Mobile JavaScript (Fall 2010Testing Mobile JavaScript (Fall 2010
Testing Mobile JavaScript (Fall 2010jeresig
 
Thinking in Components
Thinking in ComponentsThinking in Components
Thinking in ComponentsFITC
 
High Performance JavaScript (Amazon DevCon 2011)
High Performance JavaScript (Amazon DevCon 2011)High Performance JavaScript (Amazon DevCon 2011)
High Performance JavaScript (Amazon DevCon 2011)Nicholas Zakas
 
HTML5 Web Workers-unleashed
HTML5 Web Workers-unleashedHTML5 Web Workers-unleashed
HTML5 Web Workers-unleashedPeter Lubbers
 
Browser Wars Episode 1: The Phantom Menace
Browser Wars Episode 1: The Phantom MenaceBrowser Wars Episode 1: The Phantom Menace
Browser Wars Episode 1: The Phantom MenaceNicholas Zakas
 
Enough with the JavaScript already!
Enough with the JavaScript already!Enough with the JavaScript already!
Enough with the JavaScript already!Nicholas Zakas
 
Performance Metrics in a Day with Selenium
Performance Metrics in a Day with SeleniumPerformance Metrics in a Day with Selenium
Performance Metrics in a Day with SeleniumMark Watson
 
Automated Testing with Google Chrome - WebDriver- ChromeDriver
Automated Testing with Google Chrome - WebDriver- ChromeDriverAutomated Testing with Google Chrome - WebDriver- ChromeDriver
Automated Testing with Google Chrome - WebDriver- ChromeDriverManoj Kumar Kumar
 
Instant and offline apps with Service Worker
Instant and offline apps with Service WorkerInstant and offline apps with Service Worker
Instant and offline apps with Service WorkerChang W. Doh
 
Progressive Enhancement 2.0 (Conference Agnostic)
Progressive Enhancement 2.0 (Conference Agnostic)Progressive Enhancement 2.0 (Conference Agnostic)
Progressive Enhancement 2.0 (Conference Agnostic)Nicholas Zakas
 
JavaScript innovaties: ECMAScript 6 & 7
JavaScript innovaties: ECMAScript 6 & 7JavaScript innovaties: ECMAScript 6 & 7
JavaScript innovaties: ECMAScript 6 & 7Rick Beerendonk
 

La actualidad más candente (20)

Isomorphic React Applications: Performance And Scalability
Isomorphic React Applications: Performance And ScalabilityIsomorphic React Applications: Performance And Scalability
Isomorphic React Applications: Performance And Scalability
 
Service workers your applications never felt so good
Service workers   your applications never felt so goodService workers   your applications never felt so good
Service workers your applications never felt so good
 
Bringing The Sexy Back To WebWorkers
Bringing The Sexy Back To WebWorkersBringing The Sexy Back To WebWorkers
Bringing The Sexy Back To WebWorkers
 
Client Vs. Server Rendering
Client Vs. Server RenderingClient Vs. Server Rendering
Client Vs. Server Rendering
 
BP101: A Modernized Workflow w/ Domino/XPages
BP101: A Modernized Workflow w/ Domino/XPagesBP101: A Modernized Workflow w/ Domino/XPages
BP101: A Modernized Workflow w/ Domino/XPages
 
Understanding Page Load / Ziling Zhao (Google)
Understanding Page Load / Ziling Zhao (Google)Understanding Page Load / Ziling Zhao (Google)
Understanding Page Load / Ziling Zhao (Google)
 
Automated Web App Performance Testing Using WebDriver
Automated Web App Performance Testing Using WebDriverAutomated Web App Performance Testing Using WebDriver
Automated Web App Performance Testing Using WebDriver
 
Testing Mobile JavaScript (Fall 2010
Testing Mobile JavaScript (Fall 2010Testing Mobile JavaScript (Fall 2010
Testing Mobile JavaScript (Fall 2010
 
Thinking in Components
Thinking in ComponentsThinking in Components
Thinking in Components
 
High Performance JavaScript (Amazon DevCon 2011)
High Performance JavaScript (Amazon DevCon 2011)High Performance JavaScript (Amazon DevCon 2011)
High Performance JavaScript (Amazon DevCon 2011)
 
HTML5 Web Workers-unleashed
HTML5 Web Workers-unleashedHTML5 Web Workers-unleashed
HTML5 Web Workers-unleashed
 
What is HTML 5?
What is HTML 5?What is HTML 5?
What is HTML 5?
 
Browser Wars Episode 1: The Phantom Menace
Browser Wars Episode 1: The Phantom MenaceBrowser Wars Episode 1: The Phantom Menace
Browser Wars Episode 1: The Phantom Menace
 
Enough with the JavaScript already!
Enough with the JavaScript already!Enough with the JavaScript already!
Enough with the JavaScript already!
 
Performance Metrics in a Day with Selenium
Performance Metrics in a Day with SeleniumPerformance Metrics in a Day with Selenium
Performance Metrics in a Day with Selenium
 
Automated Testing with Google Chrome - WebDriver- ChromeDriver
Automated Testing with Google Chrome - WebDriver- ChromeDriverAutomated Testing with Google Chrome - WebDriver- ChromeDriver
Automated Testing with Google Chrome - WebDriver- ChromeDriver
 
Instant and offline apps with Service Worker
Instant and offline apps with Service WorkerInstant and offline apps with Service Worker
Instant and offline apps with Service Worker
 
Progressive Enhancement 2.0 (Conference Agnostic)
Progressive Enhancement 2.0 (Conference Agnostic)Progressive Enhancement 2.0 (Conference Agnostic)
Progressive Enhancement 2.0 (Conference Agnostic)
 
Iconus 2016
Iconus 2016Iconus 2016
Iconus 2016
 
JavaScript innovaties: ECMAScript 6 & 7
JavaScript innovaties: ECMAScript 6 & 7JavaScript innovaties: ECMAScript 6 & 7
JavaScript innovaties: ECMAScript 6 & 7
 

Destacado

Measuring the Performance of Single Page Applications
Measuring the Performance of Single Page ApplicationsMeasuring the Performance of Single Page Applications
Measuring the Performance of Single Page ApplicationsNicholas Jansma
 
How to slice your monolithic webapp using MicroApps architecture
How to slice your monolithic webapp using MicroApps architectureHow to slice your monolithic webapp using MicroApps architecture
How to slice your monolithic webapp using MicroApps architectureYonatan Maman
 
Content Architecture
Content ArchitectureContent Architecture
Content Architecturecleveg
 
Single Page WebApp Architecture
Single Page WebApp ArchitectureSingle Page WebApp Architecture
Single Page WebApp ArchitectureMorgan Cheng
 
APPP07 - Specific Symptom Screening for Depression (Sept 2007)
APPP07 - Specific Symptom Screening for Depression (Sept 2007)APPP07 - Specific Symptom Screening for Depression (Sept 2007)
APPP07 - Specific Symptom Screening for Depression (Sept 2007)Alex J Mitchell
 
كتابة الأخبار القصيرة للمحمول SMS
كتابة الأخبار القصيرة للمحمول SMSكتابة الأخبار القصيرة للمحمول SMS
كتابة الأخبار القصيرة للمحمول SMSOmar Mostafa
 
Diffusion of innovation, consumer attitudes and intentions to use mobile banking
Diffusion of innovation, consumer attitudes and intentions to use mobile bankingDiffusion of innovation, consumer attitudes and intentions to use mobile banking
Diffusion of innovation, consumer attitudes and intentions to use mobile bankingAlexander Decker
 
Most popular places to visit in the world
Most popular places to visit in the worldMost popular places to visit in the world
Most popular places to visit in the worldTrawel Mart
 
Workshop werkzoeken is topsport 04032015
Workshop werkzoeken is topsport 04032015Workshop werkzoeken is topsport 04032015
Workshop werkzoeken is topsport 04032015Rita Verduin
 
Palo Alto VA Presentation - May 2010
Palo Alto VA Presentation - May 2010Palo Alto VA Presentation - May 2010
Palo Alto VA Presentation - May 2010jcheyer
 
Classroom Blog Math Conf 08
Classroom Blog Math Conf 08Classroom Blog Math Conf 08
Classroom Blog Math Conf 08Darren Mosley
 
Indicadores de medición
Indicadores de mediciónIndicadores de medición
Indicadores de mediciónAndres Martin
 

Destacado (20)

Measuring the Performance of Single Page Applications
Measuring the Performance of Single Page ApplicationsMeasuring the Performance of Single Page Applications
Measuring the Performance of Single Page Applications
 
How to slice your monolithic webapp using MicroApps architecture
How to slice your monolithic webapp using MicroApps architectureHow to slice your monolithic webapp using MicroApps architecture
How to slice your monolithic webapp using MicroApps architecture
 
Webapp-Architecture
Webapp-ArchitectureWebapp-Architecture
Webapp-Architecture
 
Content Architecture
Content ArchitectureContent Architecture
Content Architecture
 
Single Page WebApp Architecture
Single Page WebApp ArchitectureSingle Page WebApp Architecture
Single Page WebApp Architecture
 
APPP07 - Specific Symptom Screening for Depression (Sept 2007)
APPP07 - Specific Symptom Screening for Depression (Sept 2007)APPP07 - Specific Symptom Screening for Depression (Sept 2007)
APPP07 - Specific Symptom Screening for Depression (Sept 2007)
 
كتابة الأخبار القصيرة للمحمول SMS
كتابة الأخبار القصيرة للمحمول SMSكتابة الأخبار القصيرة للمحمول SMS
كتابة الأخبار القصيرة للمحمول SMS
 
Diffusion of innovation, consumer attitudes and intentions to use mobile banking
Diffusion of innovation, consumer attitudes and intentions to use mobile bankingDiffusion of innovation, consumer attitudes and intentions to use mobile banking
Diffusion of innovation, consumer attitudes and intentions to use mobile banking
 
Most popular places to visit in the world
Most popular places to visit in the worldMost popular places to visit in the world
Most popular places to visit in the world
 
Workshop werkzoeken is topsport 04032015
Workshop werkzoeken is topsport 04032015Workshop werkzoeken is topsport 04032015
Workshop werkzoeken is topsport 04032015
 
kbaum2
kbaum2kbaum2
kbaum2
 
Imic
ImicImic
Imic
 
Class Project
Class ProjectClass Project
Class Project
 
Resume Only
Resume OnlyResume Only
Resume Only
 
2
22
2
 
VES CROWDFUNDING PRESS RELEASE #1
VES CROWDFUNDING PRESS RELEASE #1 VES CROWDFUNDING PRESS RELEASE #1
VES CROWDFUNDING PRESS RELEASE #1
 
Palo Alto VA Presentation - May 2010
Palo Alto VA Presentation - May 2010Palo Alto VA Presentation - May 2010
Palo Alto VA Presentation - May 2010
 
Classroom Blog Math Conf 08
Classroom Blog Math Conf 08Classroom Blog Math Conf 08
Classroom Blog Math Conf 08
 
Indicadores de medición
Indicadores de mediciónIndicadores de medición
Indicadores de medición
 
Alternativas para el consumidor
Alternativas para el consumidorAlternativas para el consumidor
Alternativas para el consumidor
 

Similar a Testing Single Page Webapp

Tech io spa_angularjs_20130814_v0.9.5
Tech io spa_angularjs_20130814_v0.9.5Tech io spa_angularjs_20130814_v0.9.5
Tech io spa_angularjs_20130814_v0.9.5Ganesh Kondal
 
Mobile Development: HTML5 Vs. Native
Mobile Development: HTML5 Vs. NativeMobile Development: HTML5 Vs. Native
Mobile Development: HTML5 Vs. NativeSynerzip
 
Modern site and teams provisioning across a Bot, SPFx, Azure Function and Mic...
Modern site and teams provisioning across a Bot, SPFx, Azure Function and Mic...Modern site and teams provisioning across a Bot, SPFx, Azure Function and Mic...
Modern site and teams provisioning across a Bot, SPFx, Azure Function and Mic...Giuliano De Luca
 
jQuery: The World's Most Popular JavaScript Library Comes to XPages
jQuery: The World's Most Popular JavaScript Library Comes to XPagesjQuery: The World's Most Popular JavaScript Library Comes to XPages
jQuery: The World's Most Popular JavaScript Library Comes to XPagesTeamstudio
 
Appcelerator Titanium Intro
Appcelerator Titanium IntroAppcelerator Titanium Intro
Appcelerator Titanium IntroNicholas Jansma
 
There Is No Mobile: An Introduction To Responsive Web Design
There Is No Mobile: An Introduction To Responsive Web DesignThere Is No Mobile: An Introduction To Responsive Web Design
There Is No Mobile: An Introduction To Responsive Web DesignChris Love
 
OWF14 - Big Data Track : Take back control of your web tracking Go further by...
OWF14 - Big Data Track : Take back control of your web tracking Go further by...OWF14 - Big Data Track : Take back control of your web tracking Go further by...
OWF14 - Big Data Track : Take back control of your web tracking Go further by...Paris Open Source Summit
 
Moving to a headless solution based on sitecore 9 and javascript services
Moving to a headless solution based on sitecore 9 and javascript servicesMoving to a headless solution based on sitecore 9 and javascript services
Moving to a headless solution based on sitecore 9 and javascript servicesMohamed Krimi
 
SPS Madrid 2018 - modern site and teams provisioning across a bot, spfx, azur...
SPS Madrid 2018 - modern site and teams provisioning across a bot, spfx, azur...SPS Madrid 2018 - modern site and teams provisioning across a bot, spfx, azur...
SPS Madrid 2018 - modern site and teams provisioning across a bot, spfx, azur...Giuliano De Luca
 
Nsc 2013 06-17 - random rants on 2013
Nsc 2013 06-17 - random rants on 2013Nsc 2013 06-17 - random rants on 2013
Nsc 2013 06-17 - random rants on 2013Mikael Svenson
 
Building iPhone/Andriod Apps with Titanium Appcelerator for a Rails Backend
Building iPhone/Andriod Apps with Titanium Appcelerator for a Rails BackendBuilding iPhone/Andriod Apps with Titanium Appcelerator for a Rails Backend
Building iPhone/Andriod Apps with Titanium Appcelerator for a Rails BackendAndrew Chalkley
 
ASP.NET MVC 4 Overview
ASP.NET MVC 4 OverviewASP.NET MVC 4 Overview
ASP.NET MVC 4 OverviewGunnar Peipman
 
playwrightmeetup-14jan2021-210114173639.pdf
playwrightmeetup-14jan2021-210114173639.pdfplaywrightmeetup-14jan2021-210114173639.pdf
playwrightmeetup-14jan2021-210114173639.pdfManjuBiradar6
 
Cross Platform Mobile App Development
Cross Platform Mobile App DevelopmentCross Platform Mobile App Development
Cross Platform Mobile App DevelopmentSynerzip
 
Node.js 101
 Node.js 101 Node.js 101
Node.js 101FITC
 
OWF 2014 - Take back control of your Web tracking - Dataiku
OWF 2014 - Take back control of your Web tracking - DataikuOWF 2014 - Take back control of your Web tracking - Dataiku
OWF 2014 - Take back control of your Web tracking - DataikuDataiku
 
External JavaScript Widget Development Best Practices (updated) (v.1.1)
External JavaScript Widget Development Best Practices (updated) (v.1.1) External JavaScript Widget Development Best Practices (updated) (v.1.1)
External JavaScript Widget Development Best Practices (updated) (v.1.1) Volkan Özçelik
 
Reusing JavaScript knowledge in Windows Store apps
Reusing JavaScript knowledge in Windows Store appsReusing JavaScript knowledge in Windows Store apps
Reusing JavaScript knowledge in Windows Store appsTimmy Kokke
 
W3C HTML5 KIG-The near future of the web platform
 W3C HTML5 KIG-The near future of the web platform W3C HTML5 KIG-The near future of the web platform
W3C HTML5 KIG-The near future of the web platformChanghwan Yi
 

Similar a Testing Single Page Webapp (20)

Tech io spa_angularjs_20130814_v0.9.5
Tech io spa_angularjs_20130814_v0.9.5Tech io spa_angularjs_20130814_v0.9.5
Tech io spa_angularjs_20130814_v0.9.5
 
Mobile Development: HTML5 Vs. Native
Mobile Development: HTML5 Vs. NativeMobile Development: HTML5 Vs. Native
Mobile Development: HTML5 Vs. Native
 
Modern site and teams provisioning across a Bot, SPFx, Azure Function and Mic...
Modern site and teams provisioning across a Bot, SPFx, Azure Function and Mic...Modern site and teams provisioning across a Bot, SPFx, Azure Function and Mic...
Modern site and teams provisioning across a Bot, SPFx, Azure Function and Mic...
 
jQuery: The World's Most Popular JavaScript Library Comes to XPages
jQuery: The World's Most Popular JavaScript Library Comes to XPagesjQuery: The World's Most Popular JavaScript Library Comes to XPages
jQuery: The World's Most Popular JavaScript Library Comes to XPages
 
Appcelerator Titanium Intro
Appcelerator Titanium IntroAppcelerator Titanium Intro
Appcelerator Titanium Intro
 
There Is No Mobile: An Introduction To Responsive Web Design
There Is No Mobile: An Introduction To Responsive Web DesignThere Is No Mobile: An Introduction To Responsive Web Design
There Is No Mobile: An Introduction To Responsive Web Design
 
OWF14 - Big Data Track : Take back control of your web tracking Go further by...
OWF14 - Big Data Track : Take back control of your web tracking Go further by...OWF14 - Big Data Track : Take back control of your web tracking Go further by...
OWF14 - Big Data Track : Take back control of your web tracking Go further by...
 
Moving to a headless solution based on sitecore 9 and javascript services
Moving to a headless solution based on sitecore 9 and javascript servicesMoving to a headless solution based on sitecore 9 and javascript services
Moving to a headless solution based on sitecore 9 and javascript services
 
SPS Madrid 2018 - modern site and teams provisioning across a bot, spfx, azur...
SPS Madrid 2018 - modern site and teams provisioning across a bot, spfx, azur...SPS Madrid 2018 - modern site and teams provisioning across a bot, spfx, azur...
SPS Madrid 2018 - modern site and teams provisioning across a bot, spfx, azur...
 
Evolve 19 | Kevin Campton & Sharat Radhakrishnan | Industry Focus | Autodesk ...
Evolve 19 | Kevin Campton & Sharat Radhakrishnan | Industry Focus | Autodesk ...Evolve 19 | Kevin Campton & Sharat Radhakrishnan | Industry Focus | Autodesk ...
Evolve 19 | Kevin Campton & Sharat Radhakrishnan | Industry Focus | Autodesk ...
 
Nsc 2013 06-17 - random rants on 2013
Nsc 2013 06-17 - random rants on 2013Nsc 2013 06-17 - random rants on 2013
Nsc 2013 06-17 - random rants on 2013
 
Building iPhone/Andriod Apps with Titanium Appcelerator for a Rails Backend
Building iPhone/Andriod Apps with Titanium Appcelerator for a Rails BackendBuilding iPhone/Andriod Apps with Titanium Appcelerator for a Rails Backend
Building iPhone/Andriod Apps with Titanium Appcelerator for a Rails Backend
 
ASP.NET MVC 4 Overview
ASP.NET MVC 4 OverviewASP.NET MVC 4 Overview
ASP.NET MVC 4 Overview
 
playwrightmeetup-14jan2021-210114173639.pdf
playwrightmeetup-14jan2021-210114173639.pdfplaywrightmeetup-14jan2021-210114173639.pdf
playwrightmeetup-14jan2021-210114173639.pdf
 
Cross Platform Mobile App Development
Cross Platform Mobile App DevelopmentCross Platform Mobile App Development
Cross Platform Mobile App Development
 
Node.js 101
 Node.js 101 Node.js 101
Node.js 101
 
OWF 2014 - Take back control of your Web tracking - Dataiku
OWF 2014 - Take back control of your Web tracking - DataikuOWF 2014 - Take back control of your Web tracking - Dataiku
OWF 2014 - Take back control of your Web tracking - Dataiku
 
External JavaScript Widget Development Best Practices (updated) (v.1.1)
External JavaScript Widget Development Best Practices (updated) (v.1.1) External JavaScript Widget Development Best Practices (updated) (v.1.1)
External JavaScript Widget Development Best Practices (updated) (v.1.1)
 
Reusing JavaScript knowledge in Windows Store apps
Reusing JavaScript knowledge in Windows Store appsReusing JavaScript knowledge in Windows Store apps
Reusing JavaScript knowledge in Windows Store apps
 
W3C HTML5 KIG-The near future of the web platform
 W3C HTML5 KIG-The near future of the web platform W3C HTML5 KIG-The near future of the web platform
W3C HTML5 KIG-The near future of the web platform
 

Más de Akshay Mathur

Documentation with Sphinx
Documentation with SphinxDocumentation with Sphinx
Documentation with SphinxAkshay Mathur
 
Kubernetes Journey of a Large FinTech
Kubernetes Journey of a Large FinTechKubernetes Journey of a Large FinTech
Kubernetes Journey of a Large FinTechAkshay Mathur
 
Security and Observability of Application Traffic in Kubernetes
Security and Observability of Application Traffic in KubernetesSecurity and Observability of Application Traffic in Kubernetes
Security and Observability of Application Traffic in KubernetesAkshay Mathur
 
Enhanced Security and Visibility for Microservices Applications
Enhanced Security and Visibility for Microservices ApplicationsEnhanced Security and Visibility for Microservices Applications
Enhanced Security and Visibility for Microservices ApplicationsAkshay Mathur
 
Considerations for East-West Traffic Security and Analytics for Kubernetes En...
Considerations for East-West Traffic Security and Analytics for Kubernetes En...Considerations for East-West Traffic Security and Analytics for Kubernetes En...
Considerations for East-West Traffic Security and Analytics for Kubernetes En...Akshay Mathur
 
Kubernetes as Orchestrator for A10 Lightning Controller
Kubernetes as Orchestrator for A10 Lightning ControllerKubernetes as Orchestrator for A10 Lightning Controller
Kubernetes as Orchestrator for A10 Lightning ControllerAkshay Mathur
 
Cloud Bursting with A10 Lightning ADS
Cloud Bursting with A10 Lightning ADSCloud Bursting with A10 Lightning ADS
Cloud Bursting with A10 Lightning ADSAkshay Mathur
 
Shared Security Responsibility Model of AWS
Shared Security Responsibility Model of AWSShared Security Responsibility Model of AWS
Shared Security Responsibility Model of AWSAkshay Mathur
 
Techniques for scaling application with security and visibility in cloud
Techniques for scaling application with security and visibility in cloudTechniques for scaling application with security and visibility in cloud
Techniques for scaling application with security and visibility in cloudAkshay Mathur
 
Introduction to Node js
Introduction to Node jsIntroduction to Node js
Introduction to Node jsAkshay Mathur
 
Object Oriented Programing in JavaScript
Object Oriented Programing in JavaScriptObject Oriented Programing in JavaScript
Object Oriented Programing in JavaScriptAkshay Mathur
 
Getting Started with Angular JS
Getting Started with Angular JSGetting Started with Angular JS
Getting Started with Angular JSAkshay Mathur
 
Releasing Software Without Testing Team
Releasing Software Without Testing TeamReleasing Software Without Testing Team
Releasing Software Without Testing TeamAkshay Mathur
 
Getting Started with jQuery
Getting Started with jQueryGetting Started with jQuery
Getting Started with jQueryAkshay Mathur
 
Creating Single Page Web App using Backbone JS
Creating Single Page Web App using Backbone JSCreating Single Page Web App using Backbone JS
Creating Single Page Web App using Backbone JSAkshay Mathur
 
Getting Started with Web
Getting Started with WebGetting Started with Web
Getting Started with WebAkshay Mathur
 
Getting Started with Javascript
Getting Started with JavascriptGetting Started with Javascript
Getting Started with JavascriptAkshay Mathur
 
Using Google App Engine Python
Using Google App Engine PythonUsing Google App Engine Python
Using Google App Engine PythonAkshay Mathur
 

Más de Akshay Mathur (20)

Documentation with Sphinx
Documentation with SphinxDocumentation with Sphinx
Documentation with Sphinx
 
Kubernetes Journey of a Large FinTech
Kubernetes Journey of a Large FinTechKubernetes Journey of a Large FinTech
Kubernetes Journey of a Large FinTech
 
Security and Observability of Application Traffic in Kubernetes
Security and Observability of Application Traffic in KubernetesSecurity and Observability of Application Traffic in Kubernetes
Security and Observability of Application Traffic in Kubernetes
 
Enhanced Security and Visibility for Microservices Applications
Enhanced Security and Visibility for Microservices ApplicationsEnhanced Security and Visibility for Microservices Applications
Enhanced Security and Visibility for Microservices Applications
 
Considerations for East-West Traffic Security and Analytics for Kubernetes En...
Considerations for East-West Traffic Security and Analytics for Kubernetes En...Considerations for East-West Traffic Security and Analytics for Kubernetes En...
Considerations for East-West Traffic Security and Analytics for Kubernetes En...
 
Kubernetes as Orchestrator for A10 Lightning Controller
Kubernetes as Orchestrator for A10 Lightning ControllerKubernetes as Orchestrator for A10 Lightning Controller
Kubernetes as Orchestrator for A10 Lightning Controller
 
Cloud Bursting with A10 Lightning ADS
Cloud Bursting with A10 Lightning ADSCloud Bursting with A10 Lightning ADS
Cloud Bursting with A10 Lightning ADS
 
Shared Security Responsibility Model of AWS
Shared Security Responsibility Model of AWSShared Security Responsibility Model of AWS
Shared Security Responsibility Model of AWS
 
Techniques for scaling application with security and visibility in cloud
Techniques for scaling application with security and visibility in cloudTechniques for scaling application with security and visibility in cloud
Techniques for scaling application with security and visibility in cloud
 
Introduction to Node js
Introduction to Node jsIntroduction to Node js
Introduction to Node js
 
Object Oriented Programing in JavaScript
Object Oriented Programing in JavaScriptObject Oriented Programing in JavaScript
Object Oriented Programing in JavaScript
 
Getting Started with Angular JS
Getting Started with Angular JSGetting Started with Angular JS
Getting Started with Angular JS
 
Releasing Software Without Testing Team
Releasing Software Without Testing TeamReleasing Software Without Testing Team
Releasing Software Without Testing Team
 
Getting Started with jQuery
Getting Started with jQueryGetting Started with jQuery
Getting Started with jQuery
 
CoffeeScript
CoffeeScriptCoffeeScript
CoffeeScript
 
Creating Single Page Web App using Backbone JS
Creating Single Page Web App using Backbone JSCreating Single Page Web App using Backbone JS
Creating Single Page Web App using Backbone JS
 
Getting Started with Web
Getting Started with WebGetting Started with Web
Getting Started with Web
 
Getting Started with Javascript
Getting Started with JavascriptGetting Started with Javascript
Getting Started with Javascript
 
Using Google App Engine Python
Using Google App Engine PythonUsing Google App Engine Python
Using Google App Engine Python
 
Working with GIT
Working with GITWorking with GIT
Working with GIT
 

Último

Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxLoriGlavin3
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfMounikaPolabathina
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxLoriGlavin3
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsNathaniel Shimoni
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 

Último (20)

Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdf
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptx
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directions
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 

Testing Single Page Webapp

  • 1. Testing Single-page Web App Akshay Mathur Siddharth Saha Nikita Mundhada
  • 2. Ground Rules • Post on FB and Tweet now • Disturb Everyone during the session – Not by phone rings – Not by local talks – By more information and questions 2@akshaymathu @sid_chilling @nikitascorner
  • 3. Let’s Know Each Other • Do you code? • Do you test? • OS? • Programing Language? • HTML DOM, CSS Selectors, JQuery ? • Why are you attending? 3@akshaymathu @sid_chilling @nikitascorner
  • 4. Akshay Mathur • Managed development, testing and release teams in last 14+ years – Currently Principal Architect at ShopSocially • Founding Team Member of – ShopSocially (Enabling “social” for retailers) – AirTight Neworks (Global leader of WIPS) 4@akshaymathu @sid_chilling @nikitascorner
  • 5. Siddharth Saha • CS graduate from NIT Rourkela • 3+ years in Software Product industry • Worked in Telecom (Drishti Soft) and Social Shopping (ShopSocially) Domains • Currently Junior Application Architect at ShopSocially 5@akshaymathu @sid_chilling @nikitascorner
  • 6. Nikita Mundhada • CS graduate from PICT Pune • 2 years in Software Product industry • Worked – at Amdocs as a Java Developer – at ShopSocially as a Full Stack Developer • Going back to college – For MS at Georgia Institute of Technology 6@akshaymathu @sid_chilling @nikitascorner
  • 7. Agenda • Problem Statement – What are single page apps and how are they different – Why other tools fail testing dynamic DoM in browser • Introduction to Server Side Javascript and Related Technologies – Headless Browser, NodeJS, PhantomJS, CasperJS, Splinter • Demonstrations and Code Walkthroughs – Invoking UI test suite, in the browser from Python console, using Splinter – Testing UI from command line, without opening the browser, using CasperJS 7@akshaymathu @sid_chilling @nikitascorner
  • 9. The Evolution of Web 9 @akshaymathu @sid_chilling @nikitascorner
  • 10. Traditional Apps • Action items are implemented as hyperlinks to URLs • Different web page is requested from server for next step of workflow • Browser’s address bar is the only progress indicator • Tooltips are available for in-context help 10@akshaymathu @sid_chilling @nikitascorner
  • 11. Page Construction • On Server: – Dynamic portion of the page executes and brings the data – HTML gets constructed using PHP, ASP, JSP etc. • On Client: – Browser renders the HTML DOM – No major change happens in HTML DOM after rendering • Light use of Javascript 11@akshaymathu @sid_chilling @nikitascorner
  • 12. Traditional Testing Tools Work Fine • Get a copy of HTML DOM just before it is being rendered by web browser • Do not execute Javascript • For recognizing DOM elements: – Old: Use window coordinates – New: Use Object’s xPath • Use UI elements/Events for interactions 12@akshaymathu @sid_chilling @nikitascorner
  • 14. Modern Apps • Javascript event handlers are attached to on- screen actions • Only required portion of page gets updated as needed • Loading indicator appears whenever user need to wait • Rich in-context interaction, in form of light- box popups 14@akshaymathu @sid_chilling @nikitascorner
  • 15. Page Construction • On Server: – Minimal HTML rendering – Typically no (or minimum) data-driven components – Separate calls for data • On Client: – Data requested from Server using AJAX calls – HTML DOM changes dynamically – Workflow implemented in browser • Heavy use of Javascript – Jquery, BackboneJS etc. 15@akshaymathu @sid_chilling @nikitascorner
  • 16. Traditional Testing Tools Fail • Changed HTML DOM is not available to the tool • xPaths of existing elements change 16@akshaymathu @sid_chilling @nikitascorner
  • 17. Requirements for New Age Tools • Should have complete control over HTML DOM and the Javascript on the page – Should be able to fire DOM events as user does – Should be able run Javascript on the page as it happens in the browser on user’s action – Should be able to get changed DOM as needed • Should use selectors rather than xPaths • Should not depend too much on screen painting 17@akshaymathu @sid_chilling @nikitascorner
  • 20. NodeJS • Technology that allows to use Javascript on server side or in command line environment – A complete app-server and web-framework can be written using NodeJS • Even-driven and Asynchronous programming – High performance – Low response time 20@akshaymathu @sid_chilling @nikitascorner
  • 21. Headless Browser • Browser without Graphical User Interface – Implements everything same as web browsers • HTTP Request and Response handling • Rendering Engine • HTTP DOM and Events • Javascript Runtime Environment • Used for website testing, screen capture and page automation from command line 21@akshaymathu @sid_chilling @nikitascorner
  • 22. Headless Browsers • Phantom JS – Headless browser implementing Webkit • Similar to Chrome, Safari • Slimer JS – Upcoming headless browser implementing Gecko • Similar to Firefox 22@akshaymathu @sid_chilling @nikitascorner
  • 24. Casper JS • Tool built on top of Headless Browsers – Same code works for PhantomJS and SlimerJS • Eases the process of defining a full navigation scenario • Provides syntactic sugar for common tasks: – Filling Forms – Clicking and following links – Logging events – Finding DOM elements – … 24@akshaymathu @sid_chilling @nikitascorner
  • 25. Splinter • Open source tool for testing web applications using Python • An abstraction layer on top of existing browser automation tools: – Selenium – PhantomJS – Zope 25@akshaymathu @sid_chilling @nikitascorner
  • 27. Demonstrations • Important points to note – The UI under test is sensitive to screen size – The test includes interacting with the elements in an iFrame – The DOM in the iFrame changes dynamically without loading the complete page 27@akshaymathu @sid_chilling @nikitascorner
  • 28. ShopSocially • Provides social apps to online retailers – Most of apps are embed-able on web pages • Execute in iFrame • Do not reload page for better user experience 28@akshaymathu @sid_chilling @nikitascorner
  • 29. Testing with Browser UI Splinter Demonstration and Code Siddharth Saha
  • 30. Splinter • Open source tool for testing web applications using Python • An abstraction layer on top of existing browser automation tools: – Selenium – PhantomJS – Zope 30@akshaymathu @sid_chilling @nikitascorner
  • 31. Splinter • Simple Python APIs • Multiple webdrivers – Chrome, Firefox, PhatomJS, Zope – One code to rule them all • CSS and Xpath Selectors • Support for iframe and alerts • Executes JavaScript 31@akshaymathu @sid_chilling @nikitascorner
  • 32. Do with Splinter • Browser Navigation • Finding elements • Mouse interactions • Interacting with elements and forms • Cookies manipulation • Execute JavaScript • Deal with HTTP status codes • Interact with iframes, alerts and prompts 32@akshaymathu @sid_chilling @nikitascorner
  • 34. Choosing Browser from splinter import Browser browser = Browser(„chrome‟) B = Browser(user_agent = „Mozilla/5.0 (iPhone; U;)‟) 34@akshaymathu @sid_chilling @nikitascorner
  • 38. Interacting with Form Elements browser.fill(„query‟, „Siddharth‟) browser.choose(„some-radio‟, „radio-value‟) browser.select(„my-dropdown‟, „my-fav-value‟) 38@akshaymathu @sid_chilling @nikitascorner
  • 40. Dealing with iFrames with browser.get_iframe(„iframe_id‟) as iframe: iframe.fill(„query‟, „sid‟) 40@akshaymathu @sid_chilling @nikitascorner • iFrame is another browser object – Supports all the functionality of a browser
  • 42. Testing without Browser UI CasperJS Demonstration and Code Nikita Mudada
  • 43. Casper JS • Tool built on top of Headless Browsers – Same code works for PhantomJS and SlimerJS • Eases the process of defining a full navigation scenario • Provides syntactic sugar for common tasks: – Filling Forms – Clicking and following links – Logging events – Finding DOM elements – … 43@akshaymathu @sid_chilling @nikitascorner
  • 44. Casper JS • Code written in only JavaScript/CoffeeScript • Casper JS and the javascript in the page execute in their own sandboxes – Specific call is available to communicate • Tester module provides functions and assertions for testing • Utils module provide general utilities for I/O 44@akshaymathu @sid_chilling @nikitascorner
  • 45. Skeleton of a CasperJS program @akshaymathu @sid_chilling @nikitascorner 45 then() run() evaluate() Passes Function Returns Value Page DOM SandboxCasperJS Sandbox Executes Function
  • 46. Example @akshaymathu @sid_chilling @nikitascorner 46 var casper = require('casper').create(); casper.start('http://facebook.com/‟); casper.then(function() { this.echo(this.getTitle()); this.evaluate(function(){ alert("Cookies are:" + document.cookie); }); }); casper.run();
  • 48. Specifying Window Size var casper = require('casper').create({ verbose:true, logLevel:'info', waitTimeout:10000, viewportSize: {width: 900, height:700} }); 48@akshaymathu @sid_chilling @nikitascorner
  • 49. Checking for DOM Element casper.then(function(){ this.test.assertExists( '#ssmi_getafan_sidebar_image', 'Sidebar image loaded.'); this.click('#ssmi_getafan_sidebar_ image a'); this.page.switchToChildFrame("ssmi _getafan_iframe"); @akshaymathu @sid_chilling @nikitascorner 49
  • 50. Clicking a Hyperlink casper.then(function(){ this.test.assertExists('#ssmi_geta fan_sidebar_image', 'Sidebar image loaded.'); this.click( '#ssmi_getafan_sidebar_image a'); this.page.switchToChildFrame("ssmi _getafan_iframe"); @akshaymathu @sid_chilling @nikitascorner 50
  • 51. Getting into iFrame casper.then(function(){ this.test.assertExists('#ssmi_geta fan_sidebar_image', 'Sidebar image loaded.'); this.click('#ssmi_getafan_sidebar_ image a'); this.page.switchToChildFrame( "ssmi_getafan_iframe"); @akshaymathu @sid_chilling @nikitascorner 51
  • 52. Getting info from Web Page this.evaluate(function(){ alert("Cookies are:" + document.cookie); }); }); @akshaymathu @sid_chilling @nikitascorner 52
  • 53. Waiting for Changing DOM casper.waitForSelector( '#coupon_area > span', function() { this.test.assertTextExists('Tha nk you!', 'Thank you message displayed correctly.'); }); @akshaymathu @sid_chilling @nikitascorner 53
  • 55. Result Format <testsuite> <testcase classname="samples" name="Get-a-Fan App Sidebar loaded." time="39.647"> </testcase> <testcase classname="samples" name="Found “Special-20” within the selector coupon_area1 > span" time="0.013"> <failure type="assertSelectorHasText">Found "Special-20" within the selector "#coupon_area1 > span“> </failure> </testcase> </testsuite> 55@akshaymathu @sid_chilling @nikitascorner
  • 56. Do with CasperJS • Test webpages – Report results in X-unit XML format – Integrate with Continuous Integration tool like Jenkins • Take screenshots • Fill forms • Insert scripts into webpages • Download links 56@akshaymathu @sid_chilling @nikitascorner
  • 58. Summary • Nature of web apps is changing – Javascript is becoming more and more powerful – Dynamism has come to browser • Testing tools are also catching up – Dependency on UI layout is decreasing • Using newer tools and technologies, We can save a lot – Tests are faster as they need not wait for UI – Multiple CasperJS tests can run on same machine 58@akshaymathu @sid_chilling @nikitascorner