SlideShare una empresa de Scribd logo
1 de 30
Principles and Architecture of Sahi
   - Web Automation Simplified
           Narayan Raman
Primary Problem


Verify web application functionality

                  NOT

Build a browser automation tool or library
Browser or No Browser?
• At the protocol level – Parse extract and verify
  – Problem: No Javascript, no AJAX
• At the browser
  – Advantage:
     • Closer to the real world
     • Handles Javascript/AJAX etc.


                 BROWSER WINS
Browsers
• IE, Firefox, Chrome, Safari, Opera
• Multitude of Versions, often releasing rapidly
• No standards around browser automation
  APIs
  – No financial motivation for browser vendors to
    add these APIs and maintain them, especially on
    older versions
What the Tool needs to do
• Access elements on the browser using some
  API
• Simulate events such that they match the real
  user
Possibilities?
• Write wrappers around every browser, past
  and present
• Use something else
Constraints
• Developer time and expertise
  – Knowledge required of various browsers and their
    architectures
  – Need too many experts on too many languages
  – Need to be able to support and reproduce issues
    across multiple browser/OS combinations
• Lack of standards around browser automation
  APIs
Something Else? Javascript
• Running Javascript is one of the core features
  of every browser.
• Javascript can both identify elements (via the
  DOM) and simulate events.
• Small impediments:
  – Events generated on different browsers are
    different
  – The DOM may be different across browsers
Using Javascript
• Normalized/Simplified APIs to access DOM
• Normalized APIs for event simulation which
  are tailored for different browsers

                Let us call it Sahi APIs


• Is that it?
Execution?
• How does the web page have access to these
  APIs?
  – Script src tag may be?

  <script src=“sahiapis.js”></script>


  Let us assume that
Execution? Contd.
• Where is the script?
  – Add a js function to read a file (via an
    intermediate server) and execute it on the page
• Consider a 3 line script
  1 _setValue(_textbox(“login”), “user me”);
  2 _click(_submit(“Login”));
  // page refreshes
  3 _click(_button(“Compose”));
Execution? Contd.
• Page refresh flushes js memory/state
• Who remembers that the script is on line 3?
  – Need a memory space which does not change
    with each page load
  – May be in an Iframe or new window?
Problems
• Frame busting code
• Javascript Security:
  – Loosely put, page from one domain cannot talk to
    another
Solution
• Proxy injection
  – All browsers understand proxies and will continue
    to do so
  – Proxies let you inject code into web pages which
    the browser thinks is from the same domain
  – Can even work across domains, using the same
    techniques that are used for valid cross domain
    communication
Design Considerations
• Aimed at Developers or Testers?
  – Testers
     • Should be simple to learn and use
     • Should resort to as little code as possible
     • Helpers like recorders, object spy etc. are necessary
• Should the Sahi language be scriptable?
  – Sahi should read easily like DSL
  – But also be scriptable for added power
Language choice for Sahi
• Javascript is the language of the Web
• Users anyway need to know Javascript for success
  with web projects.
• The backend of web apps may vary from J2EE to
  RoR to PHP, but the front end is always HTML and
  JS. JS is the ideal choice.


• Sahi Script seamlessly interacts with browser
  javascript and also follows the Javascript syntax
Advantage of Javascript Events
• Does not need browser window to be in focus

• Can play back multiple browser tests
  simultaneously on browsers which allow
  cookie seclusion (Eg. Firefox/chrome profiles)
Sahi Script – Why not pure JS?
• Needs of a Web Testing DSL
  – Should wait for readiness of web page state
  – Should recover from errors automatically
  – For simplicity, this waiting and recovery should be
    internally handled by the DSL rather than by the
    user
  – More code = more maintenance
DEMO
Sahi APIs and Parsing
• Parsing done to:
  – Keep js code namespaces separate
  Eg. _sahi._click – All APIs belong to _sahi object.


• Allows for automatic logging, wait handling
  and error recovery
Simple Architecture

                           Sahi

                     Proxying + js code
                         injection        Web App
Browser

                     Local Processor
            /_s_/   Recorder + Player
                      Rhino Engine
The APIs
• _textbox(“username”)
  – “username” may be the name, id, className etc.
    Intelligent defaults used. Can be configured.


• APIs automatically recurse across frames and
  iframes.
Duplicates and Dynamic ids
• Duplicates are indexed
  – BUT, indexes may lead to brittle tests.


• Dynamic id patterns – Sahi knows common
  patterns to ignore. Can be configured.
  – Sahi will use properties other than id for these.
Contexts and UI Relations
• Remove index by passing contexts.
  – _link(“Edit”, _near(_cell(“Customer 1”)))
• All Sahi APIs can take contexts.
  – We call these UI Relations
• Relate dynamic elements with business
  concepts which are more concrete.
UI Relation APIs
• _near/_in
  – DOM based relations
• _under
  – Positional relation

  Eg. _link(“Edit”, _near(_cell(“Customer 1”)))
  Or
  _image(0, _near(_cell(“Customer 1”)), _under(_cell(“Delete”)))
frames/iframes across domains
• Sahi can handle pages which load multiple
  domains inside iframes.
  – Eg. Facebook login inside your web app.
• Javascript alone cannot go across
  frames/iframes
• But JS + Proxy combination removes the need
  for it
File Uploads
• Bypass the browser
• Append file content to request from inside the
  proxy
• Needs some small documented hack to
  handle browser validation of file fields.
More Goodness
• Works on any browser which supports a proxy
  and javascript.
  – Android, iOS browsers too
• Can modify http headers to simulate other
  mobile browsers
• Can force IE9 to work as IE7 or IE8 by adding
  relevant meta tags
Sahi
• Sahi
  – Open Source


• Sahi Pro
  – Commercial product

  Details: http://sahi.co.in/
Thank You

   V Narayan Raman
    http://sahi.co.in
Twitter: @narayanraman
         @_sahi

 Tyto Software Pvt. Ltd.

Más contenido relacionado

La actualidad más candente

Sahi my expirience
Sahi my expirienceSahi my expirience
Sahi my expirience
Akss004
 
Economical, Robust Web Automation using Sahi
Economical, Robust Web Automation using SahiEconomical, Robust Web Automation using Sahi
Economical, Robust Web Automation using Sahi
RIA RUI Society
 

La actualidad más candente (20)

Sahi my expirience
Sahi my expirienceSahi my expirience
Sahi my expirience
 
Test Automation with Twist and Sahi
Test Automation with Twist and SahiTest Automation with Twist and Sahi
Test Automation with Twist and Sahi
 
Economical, Robust Web Automation using Sahi
Economical, Robust Web Automation using SahiEconomical, Robust Web Automation using Sahi
Economical, Robust Web Automation using Sahi
 
Java script Tutorial - QaTrainingHub
Java script Tutorial - QaTrainingHubJava script Tutorial - QaTrainingHub
Java script Tutorial - QaTrainingHub
 
Top 10 web application development frameworks 2016
Top 10 web application development frameworks 2016Top 10 web application development frameworks 2016
Top 10 web application development frameworks 2016
 
Joomla REST API
Joomla REST APIJoomla REST API
Joomla REST API
 
What's new in selenium 4
What's new in selenium 4What's new in selenium 4
What's new in selenium 4
 
Web application framework
Web application frameworkWeb application framework
Web application framework
 
Web Development Presentation
Web Development PresentationWeb Development Presentation
Web Development Presentation
 
AEM responsive
AEM responsiveAEM responsive
AEM responsive
 
AngularJS and SharePoint
AngularJS and SharePointAngularJS and SharePoint
AngularJS and SharePoint
 
Web Application Development Fundamentals
Web Application Development FundamentalsWeb Application Development Fundamentals
Web Application Development Fundamentals
 
Joomla as a mobile App backend - ideas, examples and experiences
Joomla as a mobile App backend - ideas, examples and experiencesJoomla as a mobile App backend - ideas, examples and experiences
Joomla as a mobile App backend - ideas, examples and experiences
 
How To Use Selenium Successfully (Java Edition)
How To Use Selenium Successfully (Java Edition)How To Use Selenium Successfully (Java Edition)
How To Use Selenium Successfully (Java Edition)
 
Webservices: connecting Joomla! with other programs.
Webservices: connecting Joomla! with other programs.Webservices: connecting Joomla! with other programs.
Webservices: connecting Joomla! with other programs.
 
Test Automation Framework with BDD and Cucumber
Test Automation Framework with BDD and CucumberTest Automation Framework with BDD and Cucumber
Test Automation Framework with BDD and Cucumber
 
Back to the Basics - 1 - Introduction to Web Development
Back to the Basics - 1 - Introduction to Web DevelopmentBack to the Basics - 1 - Introduction to Web Development
Back to the Basics - 1 - Introduction to Web Development
 
Support Tools für die Admin-Konsole - Nebil Kisa, Advanced Support Engineer
Support Tools für die Admin-Konsole - Nebil Kisa, Advanced Support EngineerSupport Tools für die Admin-Konsole - Nebil Kisa, Advanced Support Engineer
Support Tools für die Admin-Konsole - Nebil Kisa, Advanced Support Engineer
 
Demystifying Selenium framework
Demystifying Selenium frameworkDemystifying Selenium framework
Demystifying Selenium framework
 
Laravel and CodeIgniter: pros & cons
Laravel and CodeIgniter: pros & consLaravel and CodeIgniter: pros & cons
Laravel and CodeIgniter: pros & cons
 

Destacado

Bug debug keynote - Present problems and future solutions
Bug debug keynote - Present problems and future solutionsBug debug keynote - Present problems and future solutions
Bug debug keynote - Present problems and future solutions
RIA RUI Society
 
Sahi-Web Automation and Testing Tool
Sahi-Web Automation and Testing ToolSahi-Web Automation and Testing Tool
Sahi-Web Automation and Testing Tool
Kurapati Vishwak
 
Contratos De Compra Y Venta Internacional
Contratos  De Compra Y Venta InternacionalContratos  De Compra Y Venta Internacional
Contratos De Compra Y Venta Internacional
esjuemlinaresvizcarra
 

Destacado (10)

Sahi - Effective Web Testing
Sahi - Effective Web TestingSahi - Effective Web Testing
Sahi - Effective Web Testing
 
Automation With A Tool Demo
Automation With A Tool DemoAutomation With A Tool Demo
Automation With A Tool Demo
 
Bug debug keynote - Present problems and future solutions
Bug debug keynote - Present problems and future solutionsBug debug keynote - Present problems and future solutions
Bug debug keynote - Present problems and future solutions
 
Sahi Conference
Sahi ConferenceSahi Conference
Sahi Conference
 
Sahi-Web Automation and Testing Tool
Sahi-Web Automation and Testing ToolSahi-Web Automation and Testing Tool
Sahi-Web Automation and Testing Tool
 
Rpt ppt
Rpt pptRpt ppt
Rpt ppt
 
Contratos comerciales
Contratos comercialesContratos comerciales
Contratos comerciales
 
Agile India 2016 Conference
Agile India 2016 ConferenceAgile India 2016 Conference
Agile India 2016 Conference
 
Contratos De Compra Y Venta Internacional
Contratos  De Compra Y Venta InternacionalContratos  De Compra Y Venta Internacional
Contratos De Compra Y Venta Internacional
 
Agile India 2017 Conference
Agile India 2017 ConferenceAgile India 2017 Conference
Agile India 2017 Conference
 

Similar a Sahi Principles and Architecture

Similar a Sahi Principles and Architecture (20)

20120306 dublin js
20120306 dublin js20120306 dublin js
20120306 dublin js
 
Anatomy of an HTML 5 mobile web app
Anatomy of an HTML 5 mobile web app Anatomy of an HTML 5 mobile web app
Anatomy of an HTML 5 mobile web app
 
AD113 Speed Up Your Applications w/ Nginx and PageSpeed
AD113  Speed Up Your Applications w/ Nginx and PageSpeedAD113  Speed Up Your Applications w/ Nginx and PageSpeed
AD113 Speed Up Your Applications w/ Nginx and PageSpeed
 
Firefox OS Weekend
Firefox OS WeekendFirefox OS Weekend
Firefox OS Weekend
 
Microsoft power point automation-opensourcetestingtools_matrix-1
Microsoft power point   automation-opensourcetestingtools_matrix-1Microsoft power point   automation-opensourcetestingtools_matrix-1
Microsoft power point automation-opensourcetestingtools_matrix-1
 
Microsoft power point automation-opensourcetestingtools_matrix-1
Microsoft power point   automation-opensourcetestingtools_matrix-1Microsoft power point   automation-opensourcetestingtools_matrix-1
Microsoft power point automation-opensourcetestingtools_matrix-1
 
Rhodes
RhodesRhodes
Rhodes
 
Meetup. Technologies Intro for Non-Tech People
Meetup. Technologies Intro for Non-Tech PeopleMeetup. Technologies Intro for Non-Tech People
Meetup. Technologies Intro for Non-Tech People
 
Tests for Scalable, Fast, Secure Apps
Tests for Scalable, Fast, Secure AppsTests for Scalable, Fast, Secure Apps
Tests for Scalable, Fast, Secure Apps
 
SharePoint Framework -The future of SharePoint/ Office 365 developer ecosystem.
SharePoint Framework -The future of SharePoint/ Office 365 developer ecosystem. SharePoint Framework -The future of SharePoint/ Office 365 developer ecosystem.
SharePoint Framework -The future of SharePoint/ Office 365 developer ecosystem.
 
AIR - Framework ( Cairngorm and Parsley )
AIR - Framework ( Cairngorm and Parsley )AIR - Framework ( Cairngorm and Parsley )
AIR - Framework ( Cairngorm and Parsley )
 
Javascript & Jquery
Javascript & JqueryJavascript & Jquery
Javascript & Jquery
 
Code for Startup MVP (Ruby on Rails) Session 1
Code for Startup MVP (Ruby on Rails) Session 1Code for Startup MVP (Ruby on Rails) Session 1
Code for Startup MVP (Ruby on Rails) Session 1
 
Apache Cordova 4.x
Apache Cordova 4.xApache Cordova 4.x
Apache Cordova 4.x
 
Making Of PHP Based Web Application
Making Of PHP Based Web ApplicationMaking Of PHP Based Web Application
Making Of PHP Based Web Application
 
Php Web Frameworks
Php Web FrameworksPhp Web Frameworks
Php Web Frameworks
 
Sahi
SahiSahi
Sahi
 
20120802 timisoara
20120802 timisoara20120802 timisoara
20120802 timisoara
 
Apache Drill (ver. 0.2)
Apache Drill (ver. 0.2)Apache Drill (ver. 0.2)
Apache Drill (ver. 0.2)
 
Building SPA’s (Single Page App) with Backbone.js
Building SPA’s (Single Page App) with Backbone.jsBuilding SPA’s (Single Page App) with Backbone.js
Building SPA’s (Single Page App) with Backbone.js
 

Último

Último (20)

GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 

Sahi Principles and Architecture

  • 1. Principles and Architecture of Sahi - Web Automation Simplified Narayan Raman
  • 2. Primary Problem Verify web application functionality NOT Build a browser automation tool or library
  • 3. Browser or No Browser? • At the protocol level – Parse extract and verify – Problem: No Javascript, no AJAX • At the browser – Advantage: • Closer to the real world • Handles Javascript/AJAX etc. BROWSER WINS
  • 4. Browsers • IE, Firefox, Chrome, Safari, Opera • Multitude of Versions, often releasing rapidly • No standards around browser automation APIs – No financial motivation for browser vendors to add these APIs and maintain them, especially on older versions
  • 5. What the Tool needs to do • Access elements on the browser using some API • Simulate events such that they match the real user
  • 6. Possibilities? • Write wrappers around every browser, past and present • Use something else
  • 7. Constraints • Developer time and expertise – Knowledge required of various browsers and their architectures – Need too many experts on too many languages – Need to be able to support and reproduce issues across multiple browser/OS combinations • Lack of standards around browser automation APIs
  • 8. Something Else? Javascript • Running Javascript is one of the core features of every browser. • Javascript can both identify elements (via the DOM) and simulate events. • Small impediments: – Events generated on different browsers are different – The DOM may be different across browsers
  • 9. Using Javascript • Normalized/Simplified APIs to access DOM • Normalized APIs for event simulation which are tailored for different browsers Let us call it Sahi APIs • Is that it?
  • 10. Execution? • How does the web page have access to these APIs? – Script src tag may be? <script src=“sahiapis.js”></script> Let us assume that
  • 11. Execution? Contd. • Where is the script? – Add a js function to read a file (via an intermediate server) and execute it on the page • Consider a 3 line script 1 _setValue(_textbox(“login”), “user me”); 2 _click(_submit(“Login”)); // page refreshes 3 _click(_button(“Compose”));
  • 12. Execution? Contd. • Page refresh flushes js memory/state • Who remembers that the script is on line 3? – Need a memory space which does not change with each page load – May be in an Iframe or new window?
  • 13. Problems • Frame busting code • Javascript Security: – Loosely put, page from one domain cannot talk to another
  • 14. Solution • Proxy injection – All browsers understand proxies and will continue to do so – Proxies let you inject code into web pages which the browser thinks is from the same domain – Can even work across domains, using the same techniques that are used for valid cross domain communication
  • 15. Design Considerations • Aimed at Developers or Testers? – Testers • Should be simple to learn and use • Should resort to as little code as possible • Helpers like recorders, object spy etc. are necessary • Should the Sahi language be scriptable? – Sahi should read easily like DSL – But also be scriptable for added power
  • 16. Language choice for Sahi • Javascript is the language of the Web • Users anyway need to know Javascript for success with web projects. • The backend of web apps may vary from J2EE to RoR to PHP, but the front end is always HTML and JS. JS is the ideal choice. • Sahi Script seamlessly interacts with browser javascript and also follows the Javascript syntax
  • 17. Advantage of Javascript Events • Does not need browser window to be in focus • Can play back multiple browser tests simultaneously on browsers which allow cookie seclusion (Eg. Firefox/chrome profiles)
  • 18. Sahi Script – Why not pure JS? • Needs of a Web Testing DSL – Should wait for readiness of web page state – Should recover from errors automatically – For simplicity, this waiting and recovery should be internally handled by the DSL rather than by the user – More code = more maintenance
  • 19. DEMO
  • 20. Sahi APIs and Parsing • Parsing done to: – Keep js code namespaces separate Eg. _sahi._click – All APIs belong to _sahi object. • Allows for automatic logging, wait handling and error recovery
  • 21. Simple Architecture Sahi Proxying + js code injection Web App Browser Local Processor /_s_/ Recorder + Player Rhino Engine
  • 22. The APIs • _textbox(“username”) – “username” may be the name, id, className etc. Intelligent defaults used. Can be configured. • APIs automatically recurse across frames and iframes.
  • 23. Duplicates and Dynamic ids • Duplicates are indexed – BUT, indexes may lead to brittle tests. • Dynamic id patterns – Sahi knows common patterns to ignore. Can be configured. – Sahi will use properties other than id for these.
  • 24. Contexts and UI Relations • Remove index by passing contexts. – _link(“Edit”, _near(_cell(“Customer 1”))) • All Sahi APIs can take contexts. – We call these UI Relations • Relate dynamic elements with business concepts which are more concrete.
  • 25. UI Relation APIs • _near/_in – DOM based relations • _under – Positional relation Eg. _link(“Edit”, _near(_cell(“Customer 1”))) Or _image(0, _near(_cell(“Customer 1”)), _under(_cell(“Delete”)))
  • 26. frames/iframes across domains • Sahi can handle pages which load multiple domains inside iframes. – Eg. Facebook login inside your web app. • Javascript alone cannot go across frames/iframes • But JS + Proxy combination removes the need for it
  • 27. File Uploads • Bypass the browser • Append file content to request from inside the proxy • Needs some small documented hack to handle browser validation of file fields.
  • 28. More Goodness • Works on any browser which supports a proxy and javascript. – Android, iOS browsers too • Can modify http headers to simulate other mobile browsers • Can force IE9 to work as IE7 or IE8 by adding relevant meta tags
  • 29. Sahi • Sahi – Open Source • Sahi Pro – Commercial product Details: http://sahi.co.in/
  • 30. Thank You V Narayan Raman http://sahi.co.in Twitter: @narayanraman @_sahi Tyto Software Pvt. Ltd.