This presentation describes the principles behind Sahi, the best automation tool for cross browser testing of complex AJAX applications. The video is available here: http://www.youtube.com/watch?v=Fue5unKjuCM
3. Browser or No Browser?
• At the protocol level – Parse extract and verify
• At the browser
• Closer to the real world
• IE, Firefox, Chrome, Safari, Opera
• Multitude of Versions, often releasing rapidly
• No standards around browser automation
– No financial motivation for browser vendors to
add these APIs and maintain them, especially on
5. What the Tool needs to do
• Access elements on the browser using some
• Simulate events such that they match the real
• Developer time and expertise
– Knowledge required of various browsers and their
– 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
of every browser.
DOM) and simulate events.
• Small impediments:
– Events generated on different browsers are
– The DOM may be different across browsers
• How does the web page have access to these
– Script src tag may be?
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”);
// page refreshes
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?
• 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
15. Design Considerations
• Aimed at Developers or 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
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
• 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
– More code = more maintenance
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
Proxying + js code
injection Web App
/_s_/ Recorder + Player
22. The APIs
– “username” may be the name, id, className etc.
Intelligent defaults used. Can be configured.
• APIs automatically recurse across frames and
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
– DOM based relations
– Positional relation
Eg. _link(“Edit”, _near(_cell(“Customer 1”)))
_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.
• But JS + Proxy combination removes the need
27. File Uploads
• Bypass the browser
• Append file content to request from inside the
• Needs some small documented hack to
handle browser validation of file fields.
28. More Goodness
• Works on any browser which supports a proxy
– Android, iOS browsers too
• Can modify http headers to simulate other
• Can force IE9 to work as IE7 or IE8 by adding
relevant meta tags
– Open Source
• Sahi Pro
– Commercial product
30. Thank You
V Narayan Raman
Tyto Software Pvt. Ltd.