howitzer 2.0.0 → 2.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.
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