ripl-watir 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/.gitignore ADDED
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in ripl-watir.gemspec
4
+ gemspec
data/README.rdoc ADDED
@@ -0,0 +1,119 @@
1
+ == Description
2
+
3
+ Experimental ripl shell for incremental development of an automation
4
+ testing infrastructure for a web site. Manual testing of the site
5
+ may then be performed with bionic superpowers.
6
+
7
+ == Installation
8
+
9
+ gem install ripl_watir
10
+
11
+ == Demonstration
12
+
13
+ Hopefully this serves as some kind of demonstration:
14
+
15
+ cd /tmp
16
+ mkdir lib
17
+ ripl watir
18
+
19
+ ... opens a browser session (firefox by default) and enters a
20
+ ripl console shell.
21
+
22
+ $: << 'lib'
23
+
24
+ ... add the 'lib' directory to the load path
25
+
26
+ Now create a file 'lib/ripl_watir/github.rb' containing the following:
27
+
28
+ require 'watir-page-helper'
29
+
30
+ module RiplWatir::Github
31
+ extend WatirPageHelper::ClassMethods
32
+
33
+ direct_url 'github.com'
34
+ link :login, text: 'Login'
35
+
36
+ def logged_in?
37
+ browser.div(id: 'user').exists?
38
+ end
39
+ end
40
+
41
+ ... and now be amazed:
42
+
43
+ >> p = visit_page :github
44
+
45
+ ... this creates an instance of the RiplWatir::Page class, requires 'ripl_watir/github' (from whereever it happens to be on the load
46
+ path), mixes RiplWatir::Github into the page class and calls the
47
+ goto method (which tells the browser to goto github.com).
48
+
49
+ >> p.login
50
+
51
+ ... calls the login method on the page (which clicks the login button).
52
+
53
+ Now create a file 'lib/ripl_watir/github/login.rb' containing the following:
54
+
55
+ require 'watir-page-helper'
56
+
57
+ module RiplWatir::Github::Login
58
+ extend WatirPageHelper::ClassMethods
59
+
60
+ text_field :email, id: 'login_field'
61
+ text_field :password, id: 'password'
62
+ button :submit, value: 'Log in'
63
+
64
+ def login email, password
65
+ self.email = email
66
+ self.password = password
67
+ self.submit
68
+ end
69
+ end
70
+
71
+ ... and be further amazed:
72
+
73
+ >> on_page(:github, :login) do |login_page|
74
+ | login_page.login 'me@my.mail.com', 'password'
75
+ | end
76
+
77
+ ... creates another instance of the RiplWatir::Page class, requires
78
+ 'ripl_watir/github/home' (from whereever it happens to be on the load
79
+ path), mixes RiplWatir::Github::Login into it and yields to the block.
80
+
81
+ The main purpose of all this is to be able to modify/define page mixins,
82
+ and reload them all without having to restart the console or create a
83
+ new browser session.
84
+
85
+ If for example, you added a new page mixin or a new method to an already instantiated one, you can simply reload the class and should find the new method is available.
86
+
87
+ >> load 'ripl_watir/github/login'
88
+
89
+ If the page mixin you've created has not been loaded already, this step
90
+ is not necessary since the page mixins are only required on first use.
91
+
92
+ If you just want to tell the browser to do something, it is directly
93
+ available as 'browser' without needing a page object.
94
+
95
+ >> browser.goto 'google.com'
96
+
97
+ == Page Objects
98
+
99
+ At this time, the page objects are always a RiplWatir::Page instance
100
+ (which is a delegate of Watir::Browser) with a specified mixin.
101
+
102
+ This mixin can add methods specifically for interacting with that page.
103
+ The watir-page-helper mixin may be used as in the github examples in this gem but is not mandatory. You can just define methods
104
+ against the @browser instance varaible or delegate to the page itself.
105
+
106
+ These page mixins will be loaded from anywhere on the load path.
107
+
108
+ == Cucumber
109
+
110
+ To use page mixins defined in this way with cucumber, define your
111
+ page objects in a 'lib' (make sure this directory is on the load path)
112
+ and mix the commands into the cucumber 'world' in env.rb:
113
+
114
+ require 'ripl_watir/'
115
+ World RiplWatir::Commands
116
+
117
+ As long as your page mixins are in a 'ripl_watir' directory on the path
118
+ and are constants defined (at any depth) under the RiplWatir module, they
119
+ should be located.
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
data/bin/ripl-watir ADDED
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+ $: << File.dirname(__FILE__)+'/../lib'
3
+ require 'ripl'
4
+ require 'ripl_watir'
5
+ Ripl::Commands.include RiplWatir::Commands
6
+ browser = RiplWatir.browser = ::Watir::Browser.new
7
+ Ripl.start :binding => binding
@@ -0,0 +1,10 @@
1
+ require 'delegate'
2
+
3
+ module RiplWatir
4
+ class Page < DelegateClass Watir::Browser
5
+ def initialize browser
6
+ @browser = browser
7
+ super browser
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,3 @@
1
+ module RiplWatir
2
+ VERSION = "0.0.1"
3
+ end
data/lib/ripl_watir.rb ADDED
@@ -0,0 +1,44 @@
1
+ require 'watir-webdriver'
2
+ require 'ripl_watir/page'
3
+
4
+ module RiplWatir
5
+ class << self
6
+ attr_accessor :browser
7
+ end
8
+
9
+ module Array
10
+ def classify
11
+ self.map(&:classify).join('::')
12
+ end
13
+ end
14
+
15
+ module Commands
16
+ def classify s
17
+ s.to_s.split('_').map(&:capitalize).join
18
+ end
19
+
20
+ def page_class *args
21
+ page = Page.new RiplWatir.browser
22
+ require "ripl_watir/#{args.join '/'}"
23
+ mod = RiplWatir
24
+ args.each do |name|
25
+ mod = mod.const_get classify name
26
+ end
27
+ page.extend mod
28
+ page
29
+ end
30
+
31
+ def on_page *args
32
+ page_class(*args).tap do |p|
33
+ yield p if block_given?
34
+ end
35
+ end
36
+
37
+ def visit_page *args
38
+ on_page(*args) do |p|
39
+ p.goto
40
+ yield p if block_given?
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,28 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "ripl_watir/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "ripl-watir"
7
+ s.version = RiplWatir::VERSION
8
+ s.authors = ["Mark Ryall"]
9
+ s.email = ["mark@ryall.name"]
10
+ s.homepage = "https://github.com/markryall/ripl_watir"
11
+ s.summary = %q{watir repl for efficiently creating page objects}
12
+ s.description = <<EOF
13
+ A ripl plugin to provide an interactive shell for creating page objects
14
+ to build an automated testing infrastructure for a site.
15
+ EOF
16
+
17
+ s.rubyforge_project = "ripl-watir"
18
+
19
+ s.files = `git ls-files`.split("\n")
20
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
21
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
22
+ s.require_paths = ["lib"]
23
+
24
+ s.add_runtime_dependency "ripl"
25
+ s.add_runtime_dependency "watir-page-helper"
26
+
27
+ s.add_development_dependency "rspec"
28
+ end
metadata ADDED
@@ -0,0 +1,98 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ripl-watir
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Mark Ryall
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-02-26 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: ripl
16
+ requirement: &70117511154860 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *70117511154860
25
+ - !ruby/object:Gem::Dependency
26
+ name: watir-page-helper
27
+ requirement: &70117511154400 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *70117511154400
36
+ - !ruby/object:Gem::Dependency
37
+ name: rspec
38
+ requirement: &70117511153920 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ type: :development
45
+ prerelease: false
46
+ version_requirements: *70117511153920
47
+ description: ! 'A ripl plugin to provide an interactive shell for creating page objects
48
+
49
+ to build an automated testing infrastructure for a site.
50
+
51
+ '
52
+ email:
53
+ - mark@ryall.name
54
+ executables:
55
+ - ripl-watir
56
+ extensions: []
57
+ extra_rdoc_files: []
58
+ files:
59
+ - .gitignore
60
+ - Gemfile
61
+ - README.rdoc
62
+ - Rakefile
63
+ - bin/ripl-watir
64
+ - lib/ripl_watir.rb
65
+ - lib/ripl_watir/page.rb
66
+ - lib/ripl_watir/version.rb
67
+ - ripl-watir.gemspec
68
+ homepage: https://github.com/markryall/ripl_watir
69
+ licenses: []
70
+ post_install_message:
71
+ rdoc_options: []
72
+ require_paths:
73
+ - lib
74
+ required_ruby_version: !ruby/object:Gem::Requirement
75
+ none: false
76
+ requirements:
77
+ - - ! '>='
78
+ - !ruby/object:Gem::Version
79
+ version: '0'
80
+ segments:
81
+ - 0
82
+ hash: 749351036081304174
83
+ required_rubygems_version: !ruby/object:Gem::Requirement
84
+ none: false
85
+ requirements:
86
+ - - ! '>='
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ segments:
90
+ - 0
91
+ hash: 749351036081304174
92
+ requirements: []
93
+ rubyforge_project: ripl-watir
94
+ rubygems_version: 1.8.11
95
+ signing_key:
96
+ specification_version: 3
97
+ summary: watir repl for efficiently creating page objects
98
+ test_files: []