30
Principles and Architecture of Sahi - Web Automation Simplified Narayan Raman

Sahi Principles and Architecture

Embed Size (px)

DESCRIPTION

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

Citation preview

Page 1: Sahi Principles and Architecture

Principles and Architecture of Sahi - Web Automation Simplified

Narayan Raman

Page 2: Sahi Principles and Architecture

Primary Problem

Verify web application functionality

NOT

Build a browser automation tool or library

Page 3: Sahi Principles and Architecture

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

Page 4: Sahi Principles and Architecture

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

Page 5: Sahi Principles and Architecture

What the Tool needs to do

• Access elements on the browser using some API

• Simulate events such that they match the real user

Page 6: Sahi Principles and Architecture

Possibilities?

• Write wrappers around every browser, past and present

• Use something else

Page 7: Sahi Principles and Architecture

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

Page 8: Sahi Principles and Architecture

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

Page 9: Sahi Principles and Architecture

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?

Page 10: Sahi Principles and Architecture

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

Page 11: Sahi Principles and Architecture

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 refreshes3 _click(_button(“Compose”));

Page 12: Sahi Principles and Architecture

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?

Page 13: Sahi Principles and Architecture

Problems

• Frame busting code• Javascript Security:– Loosely put, page from one domain cannot talk to

another

Page 14: Sahi Principles and Architecture

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

Page 15: Sahi Principles and Architecture

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

Page 16: Sahi Principles and Architecture

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

Page 17: Sahi Principles and Architecture

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)

Page 18: Sahi Principles and Architecture

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

Page 19: Sahi Principles and Architecture

DEMO

Page 20: Sahi Principles and Architecture

Sahi APIs and Parsing

• Parsing done to:– Keep js code namespaces separateEg. _sahi._click – All APIs belong to _sahi object.

• Allows for automatic logging, wait handling and error recovery

Page 21: Sahi Principles and Architecture

Simple Architecture

Browser

Sahi

Web App

Local ProcessorRecorder + Player

Rhino Engine

/_s_/

Proxying + js code injection

Page 22: Sahi Principles and Architecture

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.

Page 23: Sahi Principles and Architecture

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.

Page 24: Sahi Principles and Architecture

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.

Page 25: Sahi Principles and Architecture

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”)))

Page 26: Sahi Principles and Architecture

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

Page 27: Sahi Principles and Architecture

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.

Page 28: Sahi Principles and Architecture

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

Page 29: Sahi Principles and Architecture

Sahi

• Sahi– Open Source

• Sahi Pro– Commercial product

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

Page 30: Sahi Principles and Architecture

Thank You

V Narayan Ramanhttp://sahi.co.in

Twitter: @narayanraman@_sahi

Tyto Software Pvt. Ltd.