watirsplash 1.4.3 → 2.0.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. data/.gitignore +7 -0
  2. data/.rspec +2 -0
  3. data/Gemfile +16 -0
  4. data/Gemfile.lock +88 -0
  5. data/README.rdoc +87 -63
  6. data/Rakefile +3 -41
  7. data/lib/watirsplash.rb +2 -2
  8. data/lib/watirsplash/browser.rb +3 -1
  9. data/lib/watirsplash/cli.rb +22 -26
  10. data/lib/watirsplash/frameworks/firewatir.rb +1 -1
  11. data/lib/watirsplash/frameworks/helper.rb +2 -16
  12. data/lib/watirsplash/frameworks/watir-webdriver.rb +1 -1
  13. data/lib/watirsplash/frameworks/watir-webdriver/chrome.rb +3 -1
  14. data/lib/watirsplash/frameworks/watir-webdriver/firefox.rb +3 -1
  15. data/lib/watirsplash/frameworks/watir-webdriver/ie.rb +3 -1
  16. data/lib/watirsplash/frameworks/watir.rb +1 -3
  17. data/lib/watirsplash/generators/helper.rb +15 -0
  18. data/lib/watirsplash/generators/new_project.rb +14 -13
  19. data/lib/watirsplash/generators/page.rb +64 -0
  20. data/lib/watirsplash/generators/templates/new_project/.rspec +1 -1
  21. data/lib/watirsplash/generators/templates/new_project/config.rb.tt +3 -30
  22. data/lib/watirsplash/generators/templates/new_project/environment.rb.tt +12 -10
  23. data/lib/watirsplash/generators/templates/page/lib/%formatted_namespace%/page/%formatted_page_name%.rb.tt +8 -0
  24. data/lib/watirsplash/generators/templates/page/spec/%formatted_namespace%/page/%formatted_page_name%_spec.rb.tt +5 -0
  25. data/lib/watirsplash/html_formatter.rb +1 -1
  26. data/lib/watirsplash/page/base.rb +41 -0
  27. data/lib/watirsplash/rspec_patches.rb +5 -7
  28. data/lib/watirsplash/spec_helper.rb +5 -12
  29. data/lib/watirsplash/util.rb +3 -35
  30. data/lib/watirsplash/version.rb +10 -0
  31. data/spec/environment.rb +14 -0
  32. data/spec/spec_helper_spec.rb +3 -4
  33. data/spec/spec_match_array_spec.rb +2 -2
  34. data/watirsplash.gemspec +32 -0
  35. metadata +60 -45
  36. data/VERSION +0 -1
  37. data/environment.rb +0 -2
  38. data/lib/watirsplash/generators/migrate_project.rb +0 -25
  39. data/lib/watirsplash/generators/new_common_project.rb +0 -19
  40. data/lib/watirsplash/generators/templates/new_common_project/config.rb.tt +0 -34
  41. data/lib/watirsplash/generators/templates/new_common_project/environment.rb +0 -15
  42. data/lib/watirsplash/generators/templates/new_common_project/lib/common_application_helper.rb +0 -14
  43. data/lib/watirsplash/generators/templates/new_project/spec/%formatted_name%_helper.rb.tt +0 -18
  44. data/lib/watirsplash/generators/templates/new_project/spec/dummy_spec.rb.tt +0 -41
  45. data/spec/util_spec.rb +0 -48
@@ -0,0 +1,7 @@
1
+ coverage/
2
+ pkg/
3
+ archive/
4
+ results/
5
+ .idea
6
+ todo.txt
7
+ rdoc/
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --require
2
+ spec/environment.rb
data/Gemfile ADDED
@@ -0,0 +1,16 @@
1
+ source :rubygems
2
+
3
+ # load WatirSplash and it's dependencies
4
+ gemspec
5
+
6
+ platforms :mingw, :mswin do
7
+ gem "watir", WatirSplash::Version::WATIR
8
+ gem "win32screenshot", WatirSplash::Version::WIN32SCREENSHOT, :require => "win32/screenshot"
9
+ end
10
+
11
+ gem "watir-webdriver", WatirSplash::Version::WATIR_WEBDRIVER
12
+ gem "firewatir", WatirSplash::Version::WATIR
13
+ gem "rspec", "~>2.6.0"
14
+
15
+ # add your project specific dependencies here:
16
+ # gem "ruby-debug", "0.10.3"
@@ -0,0 +1,88 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ watirsplash (1.5.0)
5
+ bundler (~> 1.0)
6
+ rake (= 0.8.7)
7
+ require_all
8
+ rspec (~> 2.6)
9
+ syntax
10
+ thor (~> 0)
11
+
12
+ GEM
13
+ remote: http://rubygems.org/
14
+ specs:
15
+ builder (3.0.0)
16
+ childprocess (0.1.9)
17
+ ffi (~> 1.0.6)
18
+ commonwatir (1.9.0)
19
+ user-choices
20
+ diff-lcs (1.1.2)
21
+ ffi (1.0.9-x86-mingw32)
22
+ firewatir (1.9.0)
23
+ commonwatir (= 1.9.0)
24
+ hoe (2.9.4)
25
+ rake (>= 0.8.7)
26
+ json_pure (1.5.3)
27
+ mini_magick (3.2.1)
28
+ subexec (~> 0.0.4)
29
+ nokogiri (1.4.5-x86-mingw32)
30
+ rake (0.8.7)
31
+ rautomation (0.5.1)
32
+ require_all (1.2.0)
33
+ rspec (2.6.0)
34
+ rspec-core (~> 2.6.0)
35
+ rspec-expectations (~> 2.6.0)
36
+ rspec-mocks (~> 2.6.0)
37
+ rspec-core (2.6.4)
38
+ rspec-expectations (2.6.0)
39
+ diff-lcs (~> 1.1.2)
40
+ rspec-mocks (2.6.0)
41
+ rubyzip (0.9.4)
42
+ s4t-utils (1.0.4)
43
+ hoe (>= 1.3.0)
44
+ selenium-webdriver (0.2.2)
45
+ childprocess (>= 0.1.9)
46
+ ffi (>= 1.0.7)
47
+ json_pure
48
+ rubyzip
49
+ subexec (0.0.4)
50
+ syntax (1.0.0)
51
+ thor (0.14.6)
52
+ user-choices (1.1.6.1)
53
+ builder (>= 2.1.2)
54
+ s4t-utils (>= 1.0.3)
55
+ xml-simple (>= 1.0.11)
56
+ watir (1.9.0)
57
+ commonwatir (= 1.9.0)
58
+ ffi (~> 1.0)
59
+ firewatir (= 1.9.0)
60
+ nokogiri
61
+ rautomation (~> 0.5)
62
+ win32-process (>= 0.5.5)
63
+ windows-pr (>= 0.6.6)
64
+ watir-webdriver (0.2.5)
65
+ selenium-webdriver (>= 0.2.2)
66
+ win32-api (1.4.8-x86-mingw32)
67
+ win32-process (0.6.5)
68
+ windows-pr (>= 1.1.2)
69
+ win32screenshot (1.0.4)
70
+ ffi (~> 1.0)
71
+ mini_magick (~> 3.2.0)
72
+ rautomation (~> 0.5)
73
+ windows-api (0.4.0)
74
+ win32-api (>= 1.4.5)
75
+ windows-pr (1.2.0)
76
+ win32-api (>= 1.4.5)
77
+ windows-api (>= 0.3.0)
78
+ xml-simple (1.0.16)
79
+
80
+ PLATFORMS
81
+ x86-mingw32
82
+
83
+ DEPENDENCIES
84
+ firewatir (= 1.9.0)
85
+ watir (= 1.9.0)
86
+ watir-webdriver (~> 0.2.5)
87
+ watirsplash!
88
+ win32screenshot (~> 1.0.4)
@@ -6,8 +6,8 @@
6
6
  == DESCRIPTION
7
7
 
8
8
  WatirSplash makes browser-based web page testing in Ruby splashin' easy.
9
- It combines Watir (http://www.watir.com) for controlling the browser and
10
- RSpec (http://relishapp.com/rspec) for testing framework. This powerful combination gives you
9
+ It combines Watir, FireWatir or Watir-WebDriver for controlling the browser and
10
+ RSpec for testing framework. This powerful combination gives you
11
11
  the ability to write easily well-maintained and easy-to-read specs (specifications in RSpec) so
12
12
  you don't need to have any extra documentation for your applications.
13
13
 
@@ -15,78 +15,100 @@ WatirSplash makes it easier to use best features of both of these tools together
15
15
  you won't have to spend time on thinking how to do that yourself - you can start
16
16
  testing right away!
17
17
 
18
- == SYNOPSIS
19
-
20
- === With vanilla Watir and RSpec
21
- require 'watir'
22
- require 'rspec'
23
-
24
- describe "Google" do
25
- before :all do
26
- @browser = Watir::Browser.new
27
- @browser.maximize
28
- @browser.goto "http://google.com"
29
- @browser.url.should =~ /google/
18
+ == GETTING STARTED
19
+
20
+ 1) Install Ruby (version 1.8.7 is recommended)
21
+
22
+ 2) Install WatirSplash
23
+ C:\my_project>gem install watirsplash
24
+
25
+ 3) Create a new project
26
+ C:\my_project>watirsplash new
27
+ create ui-test
28
+ ...
29
+
30
+ C:\my_project>cd ui-test
31
+
32
+ 4) Install all possible runtime dependencies
33
+ C:\my_project\ui-test>bundle install
34
+ Fetching source index for http://rubygems.org/
35
+ ...
36
+ Using watirsplash
37
+ ...
38
+
39
+ 5) Create a "search" page class and a spec skeleton for it
40
+ C:\my_project\ui-test>watirsplash page search --url http://bing.com
41
+ create lib
42
+ create lib/app/page/search.rb
43
+ create spec
44
+ create spec/app/page/search_spec.rb
45
+
46
+ 6) Create a "results" page class without spec
47
+ C:\Users\jarmo\Desktop\minu\projects\Ruby\my_project\ui-test>watirsplash page results --no-spec
48
+ exist lib
49
+ create lib/app/page/results.rb
50
+
51
+ 7) Modify the created files
52
+ # lib\app\page\search.rb
53
+ module App
54
+ module Page
55
+ class Search < WatirSplash::Page::Base
56
+ url "http://bing.com"
57
+
58
+ def search_field
59
+ text_field(:name => "q")
60
+ end
61
+
62
+ def search_button
63
+ return_for button(:name => "go"),
64
+ # clicking the search button results a page transition to "results" page
65
+ :click => lambda {Results.new @browser}
66
+ end
30
67
  end
68
+ end
69
+ end
31
70
 
32
- it "has search field" do
33
- text_field = @browser.text_field(:name => "q")
34
- text_field.should exist
35
- text_field.should be_visible
36
- end
37
71
 
38
- it "performs search" do
39
- @browser.text_field(:name => "q").set "Bing"
40
- @browser.button(:name => "btnG").click
41
- @browser.text.should include("Bing")
42
- end
72
+ # lib\app\page\results.rb
73
+ module App
74
+ module Page
75
+ class Results < WatirSplash::Page::Base
76
+
77
+ def result index
78
+ div(:id => "results").
79
+ ul(:class => "sb_results").
80
+ li(:class => /sa_wr/, :index => index).
81
+ text
82
+ end
43
83
 
44
- after :all do
45
- @browser.close
46
84
  end
85
+ end
47
86
  end
48
87
 
49
88
 
50
-
51
- === With WatirSplash
52
- describe "Google" do
53
- before :all do
54
- goto "http://google.com"
55
- url.should =~ /google/
56
- end
57
-
58
- it "has search field" do
59
- text_field = text_field(:name => "q")
60
- text_field.should exist
61
- text_field.should be_visible
62
- end
63
-
64
- it "performs search" do
65
- text_field(:name => "q").set "Bing"
66
- button(:name => "btnG").click
67
- text.should include("Bing")
68
- end
89
+ # spec\app\page\search_spec.rb
90
+ describe App::Page::Search do
91
+ it "has something on the search page" do
92
+ search_page = App::Page::Search.new
93
+ search_page.search_field.set "watirsplash"
94
+ results_page = search_page.search_button.click
95
+ results_page.result(1).should =~ /watirsplash/i
96
+ end
69
97
  end
70
-
71
- C:\project\ui-test>rspec spec\google_spec.rb
72
- Results will be saved into the directory C:/project/ui-test/results
73
- Google
74
- has search field
75
- performs search
76
98
 
77
- Finished in 6.782388 seconds
99
+ 8) Execute all specs
100
+ C:\my_project\ui-test>rspec spec
101
+ Results will be saved into the directory C:/my_project/ui-test/results
78
102
 
79
- 2 examples, 0 failures
103
+ App::Page::Search @ app/page/search_spec.rb:1 (30.06.2011)
104
+ has something on the search page:2 (09:34:30)
80
105
 
81
- == INSTALL
106
+ Finished in 4.48 seconds
107
+ 1 example, 0 failures
82
108
 
83
- 1) install Ruby
84
-
85
- 2) install WatirSplash:
86
- gem install watirsplash
109
+ 9) Check out the html report at results/index.html
87
110
 
88
- 3) execute in your project's directory:
89
- watirsplash new
111
+ 10) Repeat & profit!
90
112
 
91
113
  == SUPPORTED PLATFORMS & BROWSERS
92
114
 
@@ -99,15 +121,17 @@ Each framework drives a specific browser:
99
121
  * Watir - IE
100
122
  * Watir-WebDriver - Chrome, IE and Firefox
101
123
 
102
- It is possible to specify what framework to use in ui-test/config.rb and/or in ui-test-common/config.rb files:
124
+ It is possible to specify what framework to use in config.rb file:
103
125
  WatirSplash::Util.framework = "watir-webdriver/firefox"
104
126
 
105
- If framework is not specified manually then a default framework will be used for the current platform.
127
+ It is also possible to specify used framework by using environment variable WATIRSPLASH_FRAMEWORK.
128
+
129
+ If framework is not specified manually then the default framework will be used for the current platform.
106
130
 
107
131
  PS! Please note that all frameworks are not 100% compatible with each other. If you find any concrete incompatibilities then
108
132
  it would be great if you'd contribute fixes or information to the authors of the frameworks.
109
133
 
110
- == WHAT'S NEXT?
134
+ == MORE INFORMATION?
111
135
 
112
136
  You can read more information about the usage and features from the wiki at http://github.com/jarmo/WatirSplash/wiki
113
137
 
data/Rakefile CHANGED
@@ -1,42 +1,6 @@
1
1
  require 'rubygems'
2
- require 'rake'
3
-
4
- begin
5
- require 'jeweler'
6
- Jeweler::Tasks.new do |gem|
7
- version = File.read("VERSION").strip
8
- gem.name = "watirsplash"
9
- gem.summary = %Q{watirsplash #{version}}
10
- gem.description = %q{WatirSplash makes testing of web applications splashin' easy by combining best features of Watir, RSpec and Ruby!}
11
- gem.email = "jarmo.p@gmail.com"
12
- gem.homepage = "http://github.com/jarmo/WatirSplash"
13
- gem.authors = ["Jarmo Pertman"]
14
- gem.executables = ["watirsplash"]
15
- gem.extra_rdoc_files = ["README.rdoc", "History.rdoc", "License.txt"]
16
- gem.rdoc_options << "--main" << "README.rdoc" <<
17
- "--template" << "hanna" <<
18
- "--inline-source" << "--format=html"
19
- ignored_files = File.readlines(".gitignore").map {|l| l.strip.gsub("*", "")}
20
- ignored_files << ".gitignore" << ".gemspec"
21
- gem.files = Dir.glob("**/*").delete_if {|f| f =~ Regexp.union(*ignored_files)}
22
- gem.files << "lib/watirsplash/generators/templates/new_project/.rspec"
23
- gem.post_install_message = %Q{#{"*"*25}
24
-
25
- Thank you for installing WatirSplash #{version}! Don't forget to take a look at the README and History files!
26
-
27
- Execute `watirsplash new` under your project's directory to generate a default project structure.
28
-
29
- #{"*"*25}}
30
-
31
- gem.add_dependency("rspec", "~>2.6")
32
- gem.add_dependency("thor", "~>0")
33
- gem.add_dependency("require_all")
34
- gem.add_dependency("syntax")
35
- end
36
- Jeweler::GemcutterTasks.new
37
- rescue LoadError
38
- puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
39
- end
2
+ require 'bundler'
3
+ Bundler::GemHelper.install_tasks
40
4
 
41
5
  require 'rspec/core/rake_task'
42
6
  RSpec::Core::RakeTask.new(:spec)
@@ -49,10 +13,8 @@ task :default => :spec
49
13
 
50
14
  require 'rake/rdoctask'
51
15
  Rake::RDocTask.new do |rdoc|
52
- version = File.exist?('VERSION') ? File.read('VERSION') : ""
53
-
54
16
  rdoc.rdoc_dir = 'rdoc'
55
- rdoc.title = "WatirSplash #{version}"
17
+ rdoc.title = "WatirSplash #{WatirSplash::Version::WATIRSPLASH}"
56
18
  rdoc.rdoc_files.include('README*')
57
19
  rdoc.rdoc_files.include('lib/**/*.rb')
58
20
  end
@@ -2,6 +2,7 @@ require "rubygems"
2
2
  require "require_all"
3
3
  require "rspec"
4
4
  require "pathname"
5
+ require_rel "watirsplash/version" unless defined? WatirSplash::Version
5
6
  require_rel "watirsplash/browser"
6
7
  require_rel "watirsplash/file_helper"
7
8
  require_rel "watirsplash/spec_helper"
@@ -9,7 +10,6 @@ require_rel "watirsplash/rspec_patches"
9
10
  require_rel "watirsplash/util"
10
11
  require_rel "watirsplash/html_formatter"
11
12
  require_rel "watirsplash/frameworks/helper"
13
+ require_rel "watirsplash/page/base"
12
14
  WatirSplash::Util.configure_rspec_formatters
13
- WatirSplash::Util.load_environment
14
- WatirSplash::Util.load_framework
15
15
 
@@ -1,7 +1,9 @@
1
1
  module WatirSplash
2
2
  class Browser
3
3
  def self.new
4
- Watir::Browser.new
4
+ browser = Watir::Browser.new
5
+ Util.formatter.browser = browser
6
+ browser
5
7
  end
6
8
  end
7
9
  end
@@ -1,39 +1,35 @@
1
1
  require "thor"
2
2
  require "thor/group"
3
+ require "watirsplash/generators/helper"
3
4
  require "watirsplash/generators/new_project"
4
- require "watirsplash/generators/new_common_project"
5
- require "watirsplash/generators/migrate_project"
5
+ require "watirsplash/generators/page"
6
6
  require "watirsplash/util"
7
7
 
8
8
  module WatirSplash
9
9
  class CLI < Thor
10
- framework_option = proc do
11
- method_option :framework, :default => WatirSplash::Util.send(:default_framework).to_s, :aliases => "-f",
12
- :desc => "Framework to use. Possible values are watir, firewatir, watir-webdriver/ie, watir-webdriver/firefox, watir-webdriver/chrome."
13
- end
14
-
15
- desc "new [APPLICATION_NAME]", "Create a new WatirSplash project."
16
- method_option :load_common, :type => :boolean, :default => false, :aliases => "-l",
17
- :desc => "Load WatirSplash common project automatically."
18
- method_option :url, :default => "about:blank", :aliases => "-u",
19
- :desc => "URL to open in the browser before each test. May be relative if WatirSplash common project is loaded."
20
- framework_option.call
21
- def new(name = "Application")
22
- WatirSplash::Generators::NewProject.start([Thor::Util.camel_case(name), options[:url], options[:framework], options.load_common?])
23
- end
10
+ extend Generators::Helper
24
11
 
25
- desc "new_common", "Create a new WatirSplash common project."
26
- method_option :url, :default => "http://localhost", :aliases => "-u",
27
- :desc => "URL for the application main page."
28
- framework_option.call
29
- def new_common
30
- WatirSplash::Generators::NewCommonProject.start([options[:url], options[:framework]])
12
+ unless Dir.entries(Dir.pwd).include? ".rspec"
13
+ desc "new [DIRECTORY_NAME]", "Create a new WatirSplash project."
14
+ method_option :url, :default => "about:blank", :aliases => "-u",
15
+ :desc => "URL for the application under test."
16
+ method_option :framework, :default => "default", :aliases => "-f",
17
+ :desc => "Framework to use. Possible values are #{supported_frameworks.join(", ")}."
18
+ def new(name = "ui-test")
19
+ WatirSplash::Generators::NewProject.start([name, options[:url], options[:framework]])
20
+ end
31
21
  end
32
22
 
33
- if File.basename(Dir.pwd) =~ /^ui-test(-common)?$/
34
- desc "migrate", "Migrates old WatirSplash generated project to new."
35
- def migrate
36
- WatirSplash::Generators::MigrateProject.start
23
+ if Dir.entries(Dir.pwd).include? ".rspec"
24
+ desc "page PAGE_NAME [element_name:element_type:locator_name:locator_value]", "Create a new WatirSplash page."
25
+ method_option :spec, :default => true, :aliases => "-s", :type => :boolean,
26
+ :desc => "Create spec file for page."
27
+ method_option :url, :default => nil, :aliases => "-u",
28
+ :desc => "URL for the page if directly accessible."
29
+ method_option :module, :default => "App", :aliases => "-m",
30
+ :desc => "Namespace module for the page."
31
+ def page(page_name = "Main", *elements)
32
+ WatirSplash::Generators::Page.start([page_name.gsub("-", "_"), elements, options[:module].gsub("-", "_"), options[:spec], options[:url]])
37
33
  end
38
34
  end
39
35