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
Principles and Architecture of Sahi - Web Automation Simplified Narayan Raman
Primary ProblemVerify web application functionality NOTBuild a browser automation tool or library
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
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?
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
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
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 AppBrowser 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”)))
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.
Sahi• Sahi – Open Source• Sahi Pro – Commercial product Details: http://sahi.co.in/
Thank You V Narayan Raman http://sahi.co.inTwitter: @narayanraman @_sahi Tyto Software Pvt. Ltd.