Description¶ ↑
Experimental ripl shell for incremental development of an automation testing infrastructure for a web site. Manual testing of the site may then be performed with bionic superpowers.
Installation¶ ↑
gem install ripl_watir
Usage¶ ↑
Hopefully this serves as some kind of demonstration:
cd /tmp mkdir lib ripl watir
… opens a browser session (firefox by default) and enters a ripl console shell.
Now create a file ‘lib/pages/github.rb’ containing the following:
module Pages::Github def goto browser.goto 'github.com' end end
… and now be amazed:
>> visit_page :github
… this creates an instance of the RiplWatir::Page class, loads ‘pages/github’ (from whereever it happens to be on the load path), mixes Pages::Github into the page class and calls the goto method (which tells the browser to goto github.com). Amazing?
Now edit the ‘lib/pages/github.rb’ file to add this method:
module Pages::Github def login browser.link(text: 'Sign in').click end ...
… and back in the ripl session:
>> on_page(:github).login
This reloads the github page and calls the login method on the page (which clicks the login button).
Now create a file ‘lib/pages/github/login.rb’ containing the following:
module Pages::Github::Login def login email, password browser.text_field(id: 'login_field').set email browser.text_field(id: 'password').set password browser.button(value: 'Sign in').click end end
… and be further amazed:
>> on_page(:github, :login).login 'me@my.mail.com', 'password'
… creates another instance of the RiplWatir::Page class, reloads ‘pages/github/login.rb’ (from whereever it happens to be on the load path) and mixes Pages::Github::Login into it.
The main purpose of all this is to be able to modify/define page mixins, and reload them all without having to restart the console or create a new browser session.
If for example, you added a new page mixin or a new method to an already instantiated one, you should find the new method is immediately available.
If you just want to tell the browser to do something, it is directly available as ‘browser’ without needing a page object.
>> browser.goto 'google.com'
Page Objects¶ ↑
The page objects are always a RiplWatir::Page instance (which is a delegate of Watir::Browser) with a specified mixin.
This mixins add methods specifically for interacting with that particular page.
You can just define methods against the browser instance varaible or delegate to the page itself.
These page mixins will be loaded from anywhere on the load path.
Cucumber¶ ↑
To use page mixins defined in this way with cucumber, define your page objects in a ‘lib’ (make sure this directory is on the load path) and mix the commands into the cucumber ‘world’ in env.rb:
require 'ripl_watir' World RiplWatir::Commands
As long as your page mixins are in a ‘pages’ directory on the path and are constants defined (at any depth) under the RiplWatir module, they should be successfully located.