howitzer 2.0.0 → 2.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (56) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +3 -0
  3. data/CHANGELOG.md +21 -1
  4. data/features/cli_new.feature +1 -0
  5. data/features/cli_update.feature +1 -0
  6. data/generators/base_generator.rb +3 -1
  7. data/generators/config/templates/capybara.rb +1 -1
  8. data/generators/config/templates/default.yml +4 -2
  9. data/generators/cucumber/cucumber_generator.rb +1 -0
  10. data/generators/cucumber/templates/common_steps.rb +1 -1
  11. data/generators/cucumber/templates/env.rb +0 -28
  12. data/generators/cucumber/templates/hooks.rb +29 -0
  13. data/generators/prerequisites/templates/user.rb +2 -0
  14. data/generators/prerequisites/templates/users.rb +2 -2
  15. data/generators/root/templates/Gemfile.erb +1 -1
  16. data/generators/rspec/templates/spec_helper.rb +9 -2
  17. data/generators/turnip/templates/spec_helper.rb +9 -2
  18. data/generators/web/templates/example_page.rb +0 -1
  19. data/howitzer.gemspec +1 -3
  20. data/lib/howitzer.rb +7 -0
  21. data/lib/howitzer/cache.rb +1 -1
  22. data/lib/howitzer/capybara_helpers.rb +2 -2
  23. data/lib/howitzer/email.rb +26 -8
  24. data/lib/howitzer/exceptions.rb +19 -19
  25. data/lib/howitzer/mail_adapters/abstract.rb +4 -3
  26. data/lib/howitzer/mail_adapters/mailgun.rb +6 -5
  27. data/lib/howitzer/mailgun_api/client.rb +1 -1
  28. data/lib/howitzer/version.rb +1 -1
  29. data/lib/howitzer/web/base_section.rb +3 -3
  30. data/lib/howitzer/web/capybara_context_holder.rb +19 -0
  31. data/lib/howitzer/web/capybara_methods_proxy.rb +27 -19
  32. data/lib/howitzer/web/element_dsl.rb +52 -13
  33. data/lib/howitzer/web/iframe_dsl.rb +3 -7
  34. data/lib/howitzer/web/page.rb +14 -21
  35. data/lib/howitzer/web/page_dsl.rb +32 -4
  36. data/lib/howitzer/web/page_validator.rb +15 -16
  37. data/lib/howitzer/web/section_dsl.rb +3 -7
  38. data/spec/config/custom.yml +1 -1
  39. data/spec/spec_helper.rb +1 -7
  40. data/spec/support/shared_examples/capybara_context_holder.rb +3 -3
  41. data/spec/support/shared_examples/element_dsl.rb +128 -18
  42. data/spec/unit/generators/base_generator_spec.rb +15 -16
  43. data/spec/unit/generators/cucumber_generator_spec.rb +2 -0
  44. data/spec/unit/generators/root_generator_spec.rb +1 -1
  45. data/spec/unit/lib/capybara_helpers_spec.rb +2 -2
  46. data/spec/unit/lib/email_spec.rb +37 -6
  47. data/spec/unit/lib/{howitzer.rb → howitzer_spec.rb} +9 -0
  48. data/spec/unit/lib/mail_adapters/abstract_spec.rb +1 -1
  49. data/spec/unit/lib/mail_adapters/mailgun_spec.rb +4 -4
  50. data/spec/unit/lib/web/base_section_spec.rb +3 -1
  51. data/spec/unit/lib/web/element_dsl_spec.rb +7 -2
  52. data/spec/unit/lib/web/page_dsl_spec.rb +22 -0
  53. data/spec/unit/lib/web/page_spec.rb +79 -44
  54. data/spec/unit/lib/web/page_validator_spec.rb +94 -51
  55. data/spec/unit/lib/web/section_spec.rb +4 -2
  56. metadata +10 -8
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b3377af22722ffdd00c6ec6067a03d035550efa2
4
- data.tar.gz: 1ddd61bd420afbd578e960f8056e1ccdd3efb261
3
+ metadata.gz: d0462470e4e9b727be8229a5a30f4d677daacd06
4
+ data.tar.gz: 50f292514b58d7bf57b52f6dc2cc7f0dda26c2d8
5
5
  SHA512:
6
- metadata.gz: f38792fab666d6b97c8b638214901522d2c2f75862619ef0afa64dc8d73df4dc85403b1366c7921eaf5f31c9048091f00d25b734fd619aa4d77d405fb357362f
7
- data.tar.gz: 5f5a2b10f02da32f4d618f1192ce380a246998a2fa4cdd8692d12830ef2d2f62e6fea36b0a1d63c80c0cb905a3d80ae46a10fd4ba7b46ffd4971c72546afba28
6
+ metadata.gz: 6efa7374c1460bca6a650c42267525a4f2f6d1362e95cac070dc4dab101d7d3c9652a93bd898f933a0655da25856c2e281b6d2542101015329aa93a9c60d51dd
7
+ data.tar.gz: 91f1a0ec11ab2fdc23d744773bb3802aefe18fff33f465e185824002f4cfa6f8c07be9722b2c967f3228bcea0952457f44061cef13bf941f545a563fddc9d61c
data/.rubocop.yml CHANGED
@@ -30,3 +30,6 @@ Style/FrozenStringLiteralComment:
30
30
 
31
31
  Metrics/ModuleLength:
32
32
  Max: 150
33
+
34
+ Metrics/BlockLength:
35
+ Enabled: false
data/CHANGELOG.md CHANGED
@@ -1,9 +1,29 @@
1
- ## [In git](https://github.com/strongqa/howitzer/compare/v2.0.0...master)
1
+ ## [In git](https://github.com/strongqa/howitzer/compare/v2.0.1...master)
2
2
 
3
3
  ### New Features
4
4
 
5
5
  ### Bugfixes
6
6
 
7
+ ## [v2.0.1](https://github.com/strongqa/howitzer/compare/v2.0.0...v2.0.1)
8
+
9
+ ### New Features
10
+ - New rubocop changes supporting
11
+ - Add custom page url processor supporting
12
+ - Limited Selenium to v2.x
13
+ - Add ability to use instance variables and methods from outer cotext in page dsl
14
+ - Add wait time dsl method for particular email
15
+ - Implement wait_for_xxx_element method for sync
16
+ - Implement within_xxx_element method like Capybara.within
17
+
18
+ ### Bugfixes
19
+ - [#188](https://github.com/strongqa/howitzer/issues/188) Page validation by element presence does not work properly
20
+ - [#191](https://github.com/strongqa/howitzer/issues/191) Generated project is broken
21
+ - [#195](https://github.com/strongqa/howitzer/issues/195) Incorrect parameters passing in lambda locators
22
+ - [#200](https://github.com/strongqa/howitzer/issues/200) capybara-screenshot does not work
23
+ - [#205](https://github.com/strongqa/howitzer/issues/205) Fix incorrect page identification on failed test
24
+ - Fix issue for IE in configs
25
+ - Fix issue found in generated prerequisites
26
+
7
27
  ## [v2.0.0](https://github.com/strongqa/howitzer/compare/v1.1.1...v2.0.0)
8
28
 
9
29
  ### New Features
@@ -141,6 +141,7 @@ Feature: Howitzer CLI New Project Creation
141
141
  * Cucumber integration to the framework ...
142
142
  Added 'features/step_definitions/common_steps.rb' file
143
143
  Added 'features/support/env.rb' file
144
+ Added 'features/support/hooks.rb' file
144
145
  Added 'features/support/transformers.rb' file
145
146
  Added 'features/example.feature' file
146
147
  Added 'tasks/cucumber.rake' file
@@ -107,6 +107,7 @@ Feature: Howitzer CLI Update Existing Project
107
107
  * Cucumber integration to the framework ...
108
108
  Identical 'features/step_definitions/common_steps.rb' file
109
109
  Identical 'features/support/env.rb' file
110
+ Identical 'features/support/hooks.rb' file
110
111
  Identical 'features/support/transformers.rb' file
111
112
  Identical 'features/example.feature' file
112
113
  Identical 'tasks/cucumber.rake' file
@@ -67,7 +67,9 @@ module Howitzer
67
67
  end
68
68
  end
69
69
 
70
- def manifest; end
70
+ def manifest
71
+ []
72
+ end
71
73
 
72
74
  protected
73
75
 
@@ -153,4 +153,4 @@ Capybara::Screenshot.append_timestamp = false
153
153
  Capybara::Screenshot.register_filename_prefix_formatter(:default) do
154
154
  "capybara-screenshot-#{Gen.serial}"
155
155
  end
156
- Capybara::Screenshot.prune_strategy = :keep_last_run
156
+ Capybara::Screenshot.prune_strategy = :keep_all
@@ -12,6 +12,7 @@
12
12
 
13
13
  app_api_token:
14
14
  app_api_end_point: "api/v1"
15
+ app_api_protocol: http
15
16
 
16
17
  ###########################################################
17
18
  # TEST ENVIRONMENTS SETTINGS #
@@ -59,7 +60,6 @@
59
60
  cloud_bstack_resolution: '1024x768'
60
61
  cloud_bstack_project: 'Howitzer Example'
61
62
  cloud_bstack_build: 'v1'
62
- cloud_bstack_resolution: '1024x768'
63
63
  cloud_bstack_mobile_device:
64
64
 
65
65
  ###########################################################
@@ -81,7 +81,9 @@
81
81
  # MAIL SETTINGS #
82
82
  ###########################################################
83
83
  mail_adapter: mailgun
84
+ mail_wait_time: 60
85
+
86
+ # -Mailgun- (http://www.mailgun.com/)
84
87
  mailgun_key: mailgun_account_private_key
85
88
  mailgun_domain: mailgun_domain_with_stored_method
86
- mailgun_idle_timeout: 60
87
89
  mailgun_sleep_time: 3
@@ -8,6 +8,7 @@ module Howitzer
8
8
  [
9
9
  { source: 'common_steps.rb', destination: 'features/step_definitions/common_steps.rb' },
10
10
  { source: 'env.rb', destination: 'features/support/env.rb' },
11
+ { source: 'hooks.rb', destination: 'features/support/hooks.rb' },
11
12
  { source: 'transformers.rb', destination: 'features/support/transformers.rb' },
12
13
  { source: 'example.feature', destination: 'features/example.feature' },
13
14
  { source: 'cucumber.rake', destination: 'tasks/cucumber.rake' }
@@ -2,7 +2,7 @@
2
2
  # PREREQUISITES #
3
3
  #############################################################
4
4
 
5
- Given /^I have entered (.*) into the calculator$/ do |_input_|
5
+ Given /^I have entered (.*) into the calculator$/ do |_input|
6
6
  pending
7
7
  end
8
8
 
@@ -10,31 +10,3 @@ FileUtils.mkdir_p(Howitzer.log_dir)
10
10
  Howitzer::Log.settings_as_formatted_text
11
11
  Howitzer::Cache.store(:cloud, :start_time, Time.now.utc)
12
12
  Howitzer::Cache.store(:cloud, :status, true)
13
-
14
- Before do |scenario|
15
- Capybara.use_default_driver
16
- Howitzer::Log.print_feature_name(scenario.feature.name)
17
- Howitzer::Log.print_scenario_name(scenario.name)
18
- @session_start = CapybaraHelpers.duration(Time.now.utc - Howitzer::Cache.extract(:cloud, :start_time))
19
- end
20
-
21
- After do |scenario|
22
- if CapybaraHelpers.cloud_driver?
23
- Howitzer::Cache.store(:cloud, :status, false) if scenario.failed?
24
- session_end = CapybaraHelpers.duration(Time.now.utc - Howitzer::Cache.extract(:cloud, :start_time))
25
- Howitzer::Log.info "CLOUD VIDEO #{@session_start} - #{session_end}" \
26
- " URL: #{CapybaraHelpers.cloud_resource_path(:video)}"
27
- elsif CapybaraHelpers.ie_browser?
28
- Howitzer::Log.info 'IE reset session'
29
- page.execute_script("void(document.execCommand('ClearAuthenticationCache', false));")
30
- end
31
- Howitzer::Cache.clear_all_ns
32
- Capybara.reset_sessions!
33
- end
34
-
35
- at_exit do
36
- if CapybaraHelpers.cloud_driver?
37
- Howitzer::Log.info "CLOUD SERVER LOG URL: #{CapybaraHelpers.cloud_resource_path(:server_log)}"
38
- CapybaraHelpers.update_cloud_job_status(passed: Howitzer::Cache.extract(:cloud, :status))
39
- end
40
- end
@@ -0,0 +1,29 @@
1
+ Before do |scenario|
2
+ Capybara.use_default_driver
3
+ Howitzer::Log.print_feature_name(scenario.feature.name)
4
+ Howitzer::Log.print_scenario_name(scenario.name)
5
+ @session_start = CapybaraHelpers.duration(Time.now.utc - Howitzer::Cache.extract(:cloud, :start_time))
6
+ end
7
+
8
+ After do |scenario|
9
+ if CapybaraHelpers.cloud_driver?
10
+ Howitzer::Cache.store(:cloud, :status, false) if scenario.failed?
11
+ session_end = CapybaraHelpers.duration(Time.now.utc - Howitzer::Cache.extract(:cloud, :start_time))
12
+ Howitzer::Log.info "CLOUD VIDEO #{@session_start} - #{session_end}" \
13
+ " URL: #{CapybaraHelpers.cloud_resource_path(:video)}"
14
+ elsif CapybaraHelpers.ie_browser?
15
+ Howitzer::Log.info 'IE reset session'
16
+ Capybara.current_session.execute_script("void(document.execCommand('ClearAuthenticationCache', false));")
17
+ end
18
+ Howitzer::Cache.clear_all_ns
19
+ Capybara.reset_sessions!
20
+ end
21
+
22
+ at_exit do
23
+ if CapybaraHelpers.cloud_driver?
24
+ Howitzer::Log.info "CLOUD SERVER LOG URL: #{CapybaraHelpers.cloud_resource_path(:server_log)}"
25
+ CapybaraHelpers.update_cloud_job_status(passed: Howitzer::Cache.extract(:cloud, :status))
26
+ end
27
+ end
28
+
29
+ require 'capybara-screenshot/cucumber'
@@ -1,6 +1,8 @@
1
1
  require_relative 'base'
2
2
  # Example User Model
3
3
  class User < Base
4
+ attr_accessor :email, :name, :password, :password_confirmation
5
+
4
6
  def self.default
5
7
  where(email: Howitzer.app_test_user).first
6
8
  end
@@ -1,7 +1,7 @@
1
1
  FactoryGirl.define do
2
2
  factory :user do
3
- email { "u#{serial}@#{Howitzer.mailgun_domain}" }
4
- name { "FirstName LastName #{serial}" }
3
+ email { "u#{Gen.serial}@#{Howitzer.mailgun_domain}" }
4
+ name { "FirstName LastName #{Gen.serial}" }
5
5
  password { Howitzer.app_test_pass }
6
6
  password_confirmation { Howitzer.app_test_pass }
7
7
 
@@ -8,7 +8,7 @@ source 'https://rubygems.org'
8
8
  gem 'howitzer'
9
9
  # Uncomment it if you are going to use 'poltergeist' driver. PhantomJS should be installed.
10
10
  # See https://github.com/jnicklas/capybara#poltergeist
11
- # gem 'poltergeist', github: 'teampoltergeist/poltergeist', branch: :master
11
+ # gem 'poltergeist', git: 'https://github.com/teampoltergeist/poltergeist.git', branch: :master
12
12
  gem 'rest-client'
13
13
  gem 'repeater'
14
14
  gem 'factory_girl'
@@ -1,4 +1,3 @@
1
- require 'capybara-screenshot/rspec'
2
1
  require 'capybara/rspec/features'
3
2
  require_relative '../config/boot'
4
3
  require_relative '../config/capybara'
@@ -35,7 +34,7 @@ RSpec.configure do |config|
35
34
  " URL: #{CapybaraHelpers.cloud_resource_path(:video)}"
36
35
  elsif CapybaraHelpers.ie_browser?
37
36
  Howitzer::Log.info 'IE reset session'
38
- page.execute_script("void(document.execCommand('ClearAuthenticationCache', false));")
37
+ Capybara.current_session.execute_script("void(document.execCommand('ClearAuthenticationCache', false));")
39
38
  end
40
39
  Capybara.reset_sessions!
41
40
  Capybara.use_default_driver
@@ -55,3 +54,11 @@ RSpec.configure do |config|
55
54
  end
56
55
  end
57
56
  end
57
+
58
+ # We include Capybara::DSL in Howitzer::Web::Page, but capybara-screenshot hooks rely on this mixin.
59
+ RSpec::Core::ExampleGroup.instance_eval do
60
+ def include?(value)
61
+ value == Capybara::DSL ? true : super
62
+ end
63
+ end
64
+ require 'capybara-screenshot/rspec'
@@ -1,4 +1,3 @@
1
- require 'capybara-screenshot/rspec'
2
1
  require_relative '../config/boot'
3
2
  require_relative '../config/capybara'
4
3
 
@@ -34,7 +33,7 @@ RSpec.configure do |config|
34
33
  " URL: #{CapybaraHelpers.cloud_resource_path(:video)}"
35
34
  elsif CapybaraHelpers.ie_browser?
36
35
  Howitzer::Log.info 'IE reset session'
37
- page.execute_script("void(document.execCommand('ClearAuthenticationCache', false));")
36
+ Capybara.current_session.execute_script("void(document.execCommand('ClearAuthenticationCache', false));")
38
37
  end
39
38
  Capybara.reset_sessions!
40
39
  Capybara.use_default_driver
@@ -54,3 +53,11 @@ RSpec.configure do |config|
54
53
  end
55
54
  end
56
55
  end
56
+
57
+ # We include Capybara::DSL in Howitzer::Web::Page, but capybara-screenshot hooks rely on this mixin.
58
+ RSpec::Core::ExampleGroup.instance_eval do
59
+ def include?(value)
60
+ value == Capybara::DSL ? true : super
61
+ end
62
+ end
63
+ require 'capybara-screenshot/rspec'
@@ -1,4 +1,3 @@
1
- require_relative 'example_menu'
2
1
  # This class is example of web page
3
2
  class ExamplePage < Howitzer::Web::Page
4
3
  path '/'
data/howitzer.gemspec CHANGED
@@ -1,5 +1,3 @@
1
- # -*- encoding: utf-8 -*-
2
-
3
1
  require File.expand_path('../lib/howitzer/version', __FILE__)
4
2
 
5
3
  Gem::Specification.new do |gem|
@@ -28,7 +26,7 @@ Gem::Specification.new do |gem|
28
26
  gem.add_runtime_dependency 'nokogiri', '~> 1.6' if gem.platform.to_s =~ /mswin|mingw/
29
27
  gem.add_runtime_dependency 'rake'
30
28
  gem.add_runtime_dependency 'rspec', '~>3.2'
31
- gem.add_runtime_dependency 'selenium-webdriver'
29
+ gem.add_runtime_dependency 'selenium-webdriver', '< 3'
32
30
  gem.add_runtime_dependency 'sexy_settings'
33
31
 
34
32
  gem.add_development_dependency('aruba')
data/lib/howitzer.rb CHANGED
@@ -19,6 +19,13 @@ module Howitzer
19
19
  define_method(key) { value }
20
20
  end
21
21
 
22
+ # @deprecated
23
+
24
+ def mailgun_idle_timeout
25
+ puts "WARNING! 'mailgun_idle_timeout' setting is deprecated. Please replace with 'mail_wait_time' setting."
26
+ ::SexySettings::Base.instance.all['mailgun_idle_timeout']
27
+ end
28
+
22
29
  attr_accessor :current_rake_task
23
30
  end
24
31
 
@@ -4,7 +4,7 @@ module Howitzer
4
4
  # Data can be stored in memory using this class
5
5
  #
6
6
  module Cache
7
- SPECIAL_NS_LIST = [:cloud].freeze
7
+ SPECIAL_NS_LIST = [:cloud].freeze #:nodoc:
8
8
  @data ||= {}
9
9
 
10
10
  class << self
@@ -4,7 +4,7 @@ require 'howitzer/exceptions'
4
4
  module Howitzer
5
5
  # This module holds capybara helpers methods
6
6
  module CapybaraHelpers
7
- CHECK_YOUR_SETTINGS_MSG = 'Please check your settings'.freeze
7
+ CHECK_YOUR_SETTINGS_MSG = 'Please check your settings'.freeze #:nodoc:
8
8
 
9
9
  # @return [Boolean] true if current driver related with SauceLab,
10
10
  # Testingbot or Browserstack cloud service
@@ -60,7 +60,7 @@ module Howitzer
60
60
 
61
61
  # Updates a job status on the job cloud
62
62
  # @note SauceLabs is currently supported only
63
- # @param json_data [String] (for example, {passed: true})
63
+ # @param json_data [Hash] for example, (passed: true)
64
64
 
65
65
  def update_cloud_job_status(json_data = {})
66
66
  case Howitzer.driver.to_sym
@@ -32,10 +32,27 @@ module Howitzer
32
32
  # @!visibility public
33
33
 
34
34
  def subject(value)
35
- @subject = value
35
+ define_singleton_method(:subject_value) { value }
36
+ private_class_method :subject_value
37
+ end
38
+
39
+ # DSL method to specify a custom wait email time directly in an email class
40
+ # @param value [Integer] an wait time for a particular email.
41
+ # If it is ommitted, default Howitzer.mail_wait_time will be used.
42
+ # @example
43
+ # class WelcomeEmail < Howitzer::Email
44
+ # wait_time 10.minutes
45
+ # end
46
+ # @!visibility public
47
+
48
+ def wait_time(value)
49
+ define_singleton_method(:wait_time_value) { value }
50
+ private_class_method :wait_time_value
36
51
  end
37
52
  end
38
53
 
54
+ wait_time Howitzer.try(:mail_wait_time)
55
+
39
56
  # Specifies a mail adapter
40
57
  # @param adapter_name [String, Symbol] an email adapter name
41
58
  # @raise [NoMailAdapterError] when the adapter name is not String or Symbol
@@ -52,17 +69,19 @@ module Howitzer
52
69
  end
53
70
 
54
71
  # Searches a mail by a recepient
55
- # @param recepient [String] recepient's email address
72
+ # @param recipient [String] recepient's email address
56
73
  # @param params [Hash] placeholders with appropriate values
57
74
  # @raise [NoEmailSubjectError] when a subject is not specified for the email class
58
75
  # @return [Email] an instance of the email message
59
76
  # @see .subject
60
77
 
61
78
  def self.find_by_recipient(recipient, params = {})
62
- raise Howitzer::NoEmailSubjectError, "Please specify email subject. For example:\n" \
63
- "class SomeEmail < Howitzer::Email\n" \
64
- " subject ‘some subject text’\nend" if @subject.nil?
65
- new(adapter.find(recipient, expand_subject(params)))
79
+ if defined?(subject_value).nil? || subject_value.nil?
80
+ raise Howitzer::NoEmailSubjectError, "Please specify email subject. For example:\n" \
81
+ "class SomeEmail < Howitzer::Email\n" \
82
+ " subject ‘some subject text’\nend"
83
+ end
84
+ new(adapter.find(recipient, expand_subject(params), wait: wait_time_value))
66
85
  end
67
86
 
68
87
  def initialize(message)
@@ -118,8 +137,7 @@ module Howitzer
118
137
  end
119
138
 
120
139
  def self.expand_subject(params)
121
- params.each { |k, v| @subject.sub!(":#{k}", v.to_s) }
122
- @subject
140
+ params.inject(subject_value.dup) { |a, (k, v)| a.sub(":#{k}", v.to_s) }
123
141
  end
124
142
  private_class_method :expand_subject
125
143
  end
@@ -1,22 +1,22 @@
1
1
  # This module holds all custom howitzer exceptions
2
2
  module Howitzer
3
- CommunicationError = Class.new(StandardError)
4
- ParseError = Class.new(StandardError)
5
- InvalidApiKeyError = Class.new(StandardError)
6
- BadElementParamsError = Class.new(StandardError)
7
- NoValidationError = Class.new(StandardError)
8
- UnknownValidationError = Class.new(StandardError)
9
- EmailNotFoundError = Class.new(StandardError)
10
- NoAttachmentsError = Class.new(StandardError)
11
- DriverNotSpecifiedError = Class.new(StandardError)
12
- UnknownDriverError = Class.new(StandardError)
13
- CloudBrowserNotSpecifiedError = Class.new(StandardError)
14
- SelBrowserNotSpecifiedError = Class.new(StandardError)
15
- UnknownBrowserError = Class.new(StandardError)
16
- IncorrectPageError = Class.new(StandardError)
17
- AmbiguousPageMatchingError = Class.new(StandardError)
18
- NoMailAdapterError = Class.new(StandardError)
19
- NoPathForPageError = Class.new(StandardError)
20
- NoEmailSubjectError = Class.new(StandardError)
21
- NoDataError = Class.new(StandardError)
3
+ CommunicationError = Class.new(StandardError) #:nodoc:
4
+ ParseError = Class.new(StandardError) #:nodoc:
5
+ InvalidApiKeyError = Class.new(StandardError) #:nodoc:
6
+ BadElementParamsError = Class.new(StandardError) #:nodoc:
7
+ NoValidationError = Class.new(StandardError) #:nodoc:
8
+ UnknownValidationError = Class.new(StandardError) #:nodoc:
9
+ EmailNotFoundError = Class.new(StandardError) #:nodoc:
10
+ NoAttachmentsError = Class.new(StandardError) #:nodoc:
11
+ DriverNotSpecifiedError = Class.new(StandardError) #:nodoc:
12
+ UnknownDriverError = Class.new(StandardError) #:nodoc:
13
+ CloudBrowserNotSpecifiedError = Class.new(StandardError) #:nodoc:
14
+ SelBrowserNotSpecifiedError = Class.new(StandardError) #:nodoc:
15
+ UnknownBrowserError = Class.new(StandardError) #:nodoc:
16
+ IncorrectPageError = Class.new(StandardError) #:nodoc:
17
+ AmbiguousPageMatchingError = Class.new(StandardError) #:nodoc:
18
+ NoMailAdapterError = Class.new(StandardError) #:nodoc:
19
+ NoPathForPageError = Class.new(StandardError) #:nodoc:
20
+ NoEmailSubjectError = Class.new(StandardError) #:nodoc:
21
+ NoDataError = Class.new(StandardError) #:nodoc:
22
22
  end