howitzer 1.1.1 → 2.0.0

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 (166) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.rubocop.yml +32 -0
  4. data/.travis.yml +1 -4
  5. data/.yardopts +1 -2
  6. data/CHANGELOG.md +28 -1
  7. data/Gemfile +6 -0
  8. data/LICENSE +1 -1
  9. data/README.md +55 -85
  10. data/Rakefile +7 -7
  11. data/bin/howitzer +56 -31
  12. data/features/cli_new.feature +162 -79
  13. data/features/cli_update.feature +114 -21
  14. data/features/step_definitions/common_steps.rb +29 -9
  15. data/features/support/env.rb +1 -1
  16. data/features/support/transformers.rb +2 -2
  17. data/generators/base_generator.rb +121 -49
  18. data/generators/config/config_generator.rb +8 -5
  19. data/generators/config/templates/boot.rb +14 -0
  20. data/generators/config/templates/capybara.rb +156 -0
  21. data/generators/config/templates/custom.yml +2 -3
  22. data/generators/config/templates/default.yml +50 -82
  23. data/generators/cucumber/cucumber_generator.rb +9 -9
  24. data/generators/cucumber/templates/common_steps.rb +4 -4
  25. data/generators/cucumber/templates/cucumber.rake +63 -54
  26. data/generators/cucumber/templates/env.rb +24 -23
  27. data/generators/cucumber/templates/transformers.rb +23 -15
  28. data/generators/emails/emails_generator.rb +4 -2
  29. data/generators/emails/templates/example_email.rb +4 -4
  30. data/generators/prerequisites/prerequisites_generator.rb +24 -0
  31. data/generators/prerequisites/templates/base.rb +22 -0
  32. data/generators/prerequisites/templates/factory_girl.rb +30 -0
  33. data/generators/prerequisites/templates/user.rb +7 -0
  34. data/generators/prerequisites/templates/users.rb +12 -0
  35. data/generators/root/root_generator.rb +11 -7
  36. data/generators/root/templates/.rubocop.yml +32 -0
  37. data/generators/root/templates/Gemfile.erb +27 -0
  38. data/generators/root/templates/Rakefile +6 -8
  39. data/generators/rspec/rspec_generator.rb +7 -7
  40. data/generators/rspec/templates/example_spec.rb +1 -1
  41. data/generators/rspec/templates/rspec.rake +48 -29
  42. data/generators/rspec/templates/spec_helper.rb +33 -32
  43. data/generators/tasks/tasks_generator.rb +4 -2
  44. data/generators/tasks/templates/common.rake +1 -16
  45. data/generators/turnip/templates/.rspec +1 -0
  46. data/generators/turnip/templates/common_steps.rb +25 -0
  47. data/generators/turnip/templates/example.feature +8 -0
  48. data/generators/turnip/templates/spec_helper.rb +56 -0
  49. data/generators/turnip/templates/turnip.rake +61 -0
  50. data/generators/turnip/templates/turnip_helper.rb +6 -0
  51. data/generators/turnip/turnip_generator.rb +26 -0
  52. data/generators/web/templates/example_page.rb +15 -0
  53. data/generators/web/templates/menu_section.rb +13 -0
  54. data/generators/web/web_generator.rb +22 -0
  55. data/howitzer.gemspec +14 -21
  56. data/lib/howitzer.rb +47 -7
  57. data/lib/howitzer/cache.rb +70 -0
  58. data/lib/howitzer/capybara_helpers.rb +194 -0
  59. data/lib/howitzer/email.rb +96 -104
  60. data/lib/howitzer/exceptions.rb +10 -6
  61. data/lib/howitzer/log.rb +120 -0
  62. data/lib/howitzer/mail_adapters.rb +7 -0
  63. data/lib/howitzer/mail_adapters/abstract.rb +84 -0
  64. data/lib/howitzer/mail_adapters/mailgun.rb +115 -0
  65. data/lib/howitzer/mailgun_api.rb +9 -0
  66. data/lib/howitzer/mailgun_api/client.rb +79 -0
  67. data/lib/howitzer/mailgun_api/connector.rb +37 -0
  68. data/lib/howitzer/mailgun_api/response.rb +28 -0
  69. data/lib/howitzer/tasks/framework.rake +2 -2
  70. data/lib/howitzer/utils.rb +7 -1
  71. data/lib/howitzer/utils/string_extensions.rb +66 -0
  72. data/lib/howitzer/version.rb +2 -1
  73. data/lib/howitzer/web.rb +11 -0
  74. data/lib/howitzer/web/base_section.rb +27 -0
  75. data/lib/howitzer/web/blank_page.rb +12 -0
  76. data/lib/howitzer/web/capybara_methods_proxy.rb +29 -0
  77. data/lib/howitzer/web/element_dsl.rb +109 -0
  78. data/lib/howitzer/web/iframe_dsl.rb +93 -0
  79. data/lib/howitzer/web/page.rb +173 -0
  80. data/lib/howitzer/web/page_dsl.rb +64 -0
  81. data/lib/howitzer/web/page_validator.rb +118 -0
  82. data/lib/howitzer/web/section.rb +27 -0
  83. data/lib/howitzer/web/section_dsl.rb +154 -0
  84. data/spec/config/custom.yml +10 -1
  85. data/spec/spec_helper.rb +37 -19
  86. data/spec/support/generator_helper.rb +12 -11
  87. data/spec/support/logger_helper.rb +10 -9
  88. data/spec/support/mailgun_unit_client.rb +52 -44
  89. data/spec/support/shared_examples/capybara_context_holder.rb +33 -0
  90. data/spec/support/shared_examples/capybara_methods_proxy.rb +94 -0
  91. data/spec/support/shared_examples/dynamic_section_methods.rb +35 -0
  92. data/spec/support/shared_examples/element_dsl.rb +119 -0
  93. data/spec/unit/generators/base_generator_spec.rb +64 -33
  94. data/spec/unit/generators/config_generator_spec.rb +11 -7
  95. data/spec/unit/generators/cucumber_generator_spec.rb +26 -17
  96. data/spec/unit/generators/emails_generator_spec.rb +10 -6
  97. data/spec/unit/generators/prerequisites_generator_spec.rb +53 -0
  98. data/spec/unit/generators/root_generator_spec.rb +50 -13
  99. data/spec/unit/generators/rspec_generator_spec.rb +9 -9
  100. data/spec/unit/generators/tasks_generator_spec.rb +6 -6
  101. data/spec/unit/generators/turnip_generator_spec.rb +52 -0
  102. data/spec/unit/generators/web_generator_spec.rb +52 -0
  103. data/spec/unit/lib/cache_spec.rb +85 -0
  104. data/spec/unit/lib/capybara_helpers_spec.rb +696 -0
  105. data/spec/unit/lib/email_spec.rb +104 -91
  106. data/spec/unit/lib/howitzer.rb +31 -0
  107. data/spec/unit/lib/init_spec.rb +0 -1
  108. data/spec/unit/lib/log_spec.rb +122 -0
  109. data/spec/unit/lib/mail_adapters/abstract_spec.rb +62 -0
  110. data/spec/unit/lib/mail_adapters/mailgun_spec.rb +163 -0
  111. data/spec/unit/lib/mailgun_api/client_spec.rb +58 -0
  112. data/spec/unit/lib/mailgun_api/connector_spec.rb +54 -0
  113. data/spec/unit/lib/mailgun_api/response_spec.rb +28 -0
  114. data/spec/unit/lib/utils/string_extensions_spec.rb +77 -0
  115. data/spec/unit/lib/web/base_section_spec.rb +41 -0
  116. data/spec/unit/lib/web/element_dsl_spec.rb +17 -0
  117. data/spec/unit/lib/web/iframe_dsl_spec.rb +99 -0
  118. data/spec/unit/lib/web/page_dsl_spec.rb +52 -0
  119. data/spec/unit/lib/web/page_spec.rb +304 -0
  120. data/spec/unit/lib/web/page_validator_spec.rb +218 -0
  121. data/spec/unit/lib/web/section_dsl_spec.rb +165 -0
  122. data/spec/unit/lib/web/section_spec.rb +61 -0
  123. data/spec/unit/version_spec.rb +1 -1
  124. metadata +116 -203
  125. data/GETTING_STARTED.md +0 -774
  126. data/generators/cucumber/templates/cucumber.yml +0 -10
  127. data/generators/pages/pages_generator.rb +0 -21
  128. data/generators/pages/templates/example_menu.rb +0 -15
  129. data/generators/pages/templates/example_page.rb +0 -15
  130. data/generators/root/templates/Gemfile +0 -7
  131. data/generators/root/templates/boot.rb +0 -10
  132. data/lib/howitzer/blank_page.rb +0 -6
  133. data/lib/howitzer/capybara/dsl_ex.rb +0 -15
  134. data/lib/howitzer/capybara/settings.rb +0 -343
  135. data/lib/howitzer/helpers.rb +0 -230
  136. data/lib/howitzer/init.rb +0 -1
  137. data/lib/howitzer/mailgun/client.rb +0 -65
  138. data/lib/howitzer/mailgun/connector.rb +0 -34
  139. data/lib/howitzer/mailgun/response.rb +0 -28
  140. data/lib/howitzer/patches/rawler_patched.rb +0 -86
  141. data/lib/howitzer/settings.rb +0 -27
  142. data/lib/howitzer/utils/data_generator/data_storage.rb +0 -88
  143. data/lib/howitzer/utils/data_generator/gen.rb +0 -135
  144. data/lib/howitzer/utils/locator_store.rb +0 -217
  145. data/lib/howitzer/utils/log.rb +0 -139
  146. data/lib/howitzer/utils/page_validator.rb +0 -133
  147. data/lib/howitzer/vendor/firebug-1.12.1-fx.xpi +0 -0
  148. data/lib/howitzer/vendor/firepath-0.9.7-fx.xpi +0 -0
  149. data/lib/howitzer/web_page.rb +0 -253
  150. data/spec/active_resource.rb +0 -0
  151. data/spec/config/default.yml +0 -26
  152. data/spec/support/boot_helper.rb +0 -15
  153. data/spec/unit/generators/pages_generator_spec.rb +0 -33
  154. data/spec/unit/lib/capybara/dsl_ex_spec.rb +0 -60
  155. data/spec/unit/lib/capybara/settings_spec.rb +0 -441
  156. data/spec/unit/lib/helpers_spec.rb +0 -1129
  157. data/spec/unit/lib/mailgun/client_spec.rb +0 -36
  158. data/spec/unit/lib/mailgun/connector_spec.rb +0 -70
  159. data/spec/unit/lib/mailgun/response_spec.rb +0 -28
  160. data/spec/unit/lib/settings_spec.rb +0 -17
  161. data/spec/unit/lib/utils/data_generator/data_storage_spec.rb +0 -80
  162. data/spec/unit/lib/utils/data_generator/gen_spec.rb +0 -90
  163. data/spec/unit/lib/utils/locator_store_spec.rb +0 -157
  164. data/spec/unit/lib/utils/log_spec.rb +0 -107
  165. data/spec/unit/lib/utils/page_validator_spec.rb +0 -265
  166. data/spec/unit/lib/web_page_spec.rb +0 -346
@@ -1,139 +0,0 @@
1
- require 'log4r'
2
- require 'fileutils'
3
-
4
- module Howitzer
5
- class Log
6
- include Singleton
7
- include Log4r
8
-
9
- [:debug, :info, :warn, :fatal].each do |method_name|
10
- define_method method_name do |text|
11
- @logger.send(method_name, text)
12
- end
13
- end
14
-
15
- ##
16
- #
17
- # Prints log entry about error with ERROR severity
18
- # *Examples:*
19
- # log.error MyException, 'Some error text', caller
20
- # log.error 'Some error text', caller
21
- # log.error MyException, 'Some caller text'
22
- # log.error 'Some error text'
23
- # log.error err_object
24
- #
25
- # *Parameters:*
26
- # * +args+ - see example
27
- #
28
-
29
- def error(*args)
30
- object = if args.first.nil?
31
- $!
32
- else
33
- case args.size
34
- when 1
35
- args.first.is_a?(Exception) ? args.first : RuntimeError.new(args.first)
36
- when 2
37
- if args.first.is_a?(Class) && args.first < Exception
38
- args.first.new(args.last)
39
- else
40
- exception = RuntimeError.new(args.first)
41
- exception.set_backtrace(args.last)
42
- exception
43
- end
44
- when 3
45
- exception = args.first.new(args[1])
46
- exception.set_backtrace(args.last)
47
- exception
48
- #:nocov:
49
- else nil
50
- #:nocov:
51
- end
52
- end
53
- err_backtrace = object.backtrace ? "\n\t#{object.backtrace.join("\n\t")}" : nil
54
- @logger.error("[#{object.class}] #{object.message}#{err_backtrace}")
55
- fail(object)
56
- end
57
-
58
- ##
59
- #
60
- # Prints feature name into log with INFO severity
61
- #
62
- # *Parameters:*
63
- # * +text+ - Feature name
64
- #
65
-
66
- def print_feature_name(text)
67
- log_without_formatting{ info "*** Feature: #{text.upcase} ***" }
68
- end
69
-
70
- ##
71
- #
72
- # Returns formatted howitzer settings
73
- #
74
-
75
- def settings_as_formatted_text
76
- log_without_formatting{ info settings.as_formatted_text }
77
- end
78
-
79
- ##
80
- #
81
- # Prints scenario name into log with INFO severity
82
- #
83
- # *Parameters:*
84
- # * +text+ - Scenario name
85
- #
86
- def print_scenario_name(text)
87
- log_without_formatting{ info " => Scenario: #{text}" }
88
- end
89
-
90
- private
91
-
92
- def initialize
93
- @logger = Logger.new("ruby_log")
94
- @logger.add(console_log)
95
- @logger.add(error_log)
96
- @logger.add(txt_log) if !settings.log_dir.to_s.empty? && !settings.txt_log.to_s.empty?
97
- self.base_formatter = default_formatter
98
- Logger["ruby_log"].level = settings.debug_mode ? ALL : INFO
99
- Logger["ruby_log"].trace = true
100
- end
101
-
102
- def log_without_formatting
103
- self.base_formatter = blank_formatter
104
- yield
105
- self.base_formatter = default_formatter
106
- end
107
-
108
- def console_log
109
- StdoutOutputter.new(:console).tap{|o| o.only_at(INFO, DEBUG, WARN)}
110
- end
111
-
112
- def error_log
113
- StderrOutputter.new(:error, 'level' => ERROR)
114
- end
115
-
116
- def txt_log
117
- FileUtils.mkdir_p(settings.log_dir) unless File.exists?(settings.log_dir)
118
- filename = File.join(settings.log_dir, settings.txt_log)
119
- FileOutputter.new(:txt_log, :filename => filename, :trunc => true)
120
- end
121
-
122
- def blank_formatter
123
- PatternFormatter.new(:pattern => "%m")
124
- end
125
-
126
- def default_formatter
127
- if settings.hide_datetime_from_log
128
- params = {pattern: "[%l] %m"}
129
- else
130
- params = {pattern: "%d [%l] :: %m", date_pattern: "%Y/%m/%d %H:%M:%S"}
131
- end
132
- PatternFormatter.new(params)
133
- end
134
-
135
- def base_formatter=(formatter)
136
- @logger.outputters.each {|outputter| outputter.formatter = formatter}
137
- end
138
- end
139
- end
@@ -1,133 +0,0 @@
1
- require 'howitzer/exceptions'
2
-
3
- module Howitzer
4
- module Utils
5
- module PageValidator
6
- @validations = {}
7
-
8
- def self.included(base) #:nodoc:
9
- base.extend(ClassMethods)
10
- end
11
-
12
- ##
13
- #
14
- # Returns validation list
15
- #
16
- # @return [Hash]
17
- #
18
- def self.validations
19
- @validations
20
- end
21
-
22
- ##
23
- #
24
- # Returns page list
25
- #
26
- # @return [Array]
27
- #
28
- def self.pages
29
- @pages ||= []
30
- end
31
-
32
- ##
33
- # Check if any validations are defined, if no, tries to find old style, else raise error
34
- #
35
- # @raise [Howitzer::NoValidationError] If no one validation is defined for page
36
- #
37
-
38
- def check_validations_are_defined!
39
- if validations.nil? && !old_url_validation_present?
40
- log.error Howitzer::NoValidationError, "No any page validation was found for '#{self.class.name}' page"
41
- end
42
- end
43
-
44
- private
45
-
46
- def validations
47
- PageValidator.validations[self.class.name]
48
- end
49
-
50
- def old_url_validation_present?
51
- if self.class.const_defined?("URL_PATTERN")
52
- self.class.validates :url, pattern: self.class.const_get("URL_PATTERN")
53
- warn "[Deprecated] Old style page validation is using. Please use new style:\n\t validates :url, pattern: URL_PATTERN"
54
- true
55
- end
56
- end
57
-
58
- module ClassMethods
59
-
60
- ##
61
- #
62
- # Adds validation to validation list
63
- #
64
- # @param [Symbol or String] name Which validation type. Possible values [:url, :element_presence, :title]
65
- # @option options [Hash] Validation options
66
- # :pattern => [Regexp] For :url and :title validation types
67
- # :locator => [String] For :element_presence (Existing locator name)
68
- # @raise [Howitzer::UnknownValidationError] If unknown validation type was passed
69
- #
70
- def validates(name, options)
71
- log.error TypeError, "Expected options to be Hash, actual is '#{options.class}'" unless options.class == Hash
72
- PageValidator.validations[self.name] ||= {}
73
- case name.to_s.to_sym
74
- when :url
75
- validate_by_pattern(:url, options)
76
- when :element_presence
77
- validate_element options
78
- when :title
79
- validate_by_pattern(:title, options)
80
- else
81
- log.error Howitzer::UnknownValidationError, "unknown '#{name}' validation name"
82
- end
83
- end
84
-
85
- ##
86
- # Check whether page is opened or no
87
- #
88
- # @raise [Howitzer::NoValidationError] If no one validation is defined for page
89
- #
90
- # *Returns:*
91
- # * +boolean+
92
- #
93
-
94
- def opened?
95
- validation_list = PageValidator.validations[self.name]
96
- if validation_list.blank?
97
- log.error Howitzer::NoValidationError, "No any page validation was found for '#{self.name}' page"
98
- else
99
- !validation_list.any? {|(_, validation)| !validation.call(self)}
100
- end
101
- end
102
-
103
- ##
104
- #
105
- # Finds all matched pages which are satisfy of defined validations
106
- #
107
- # *Returns:*
108
- # * +array+ - page names
109
- #
110
-
111
- def matched_pages
112
- PageValidator.pages.select{|klass| klass.opened? }
113
- end
114
-
115
- private
116
-
117
- def validate_element(options)
118
- locator = options[:locator] || options["locator"]
119
- log.error Howitzer::WrongOptionError, "Please specify ':locator' option as one of page locator names" if locator.nil? || locator.empty?
120
- PageValidator.validations[self.name][:element_presence] = lambda { |web_page| web_page.first_element(locator) }
121
- end
122
-
123
- def validate_by_pattern(name, options)
124
- pattern = options[:pattern] || options["pattern"]
125
- log.error Howitzer::WrongOptionError, "Please specify ':pattern' option as Regexp object" if pattern.nil? || !pattern.is_a?(Regexp)
126
- PageValidator.validations[self.name][name] = lambda { |web_page| pattern === web_page.send(name) }
127
- end
128
-
129
- end
130
- end
131
-
132
- end
133
- end
@@ -1,253 +0,0 @@
1
- require 'singleton'
2
- require 'rspec/expectations'
3
- require 'howitzer/utils/locator_store'
4
- require 'howitzer/utils/page_validator'
5
- require 'howitzer/capybara/dsl_ex'
6
- require 'howitzer/exceptions'
7
-
8
- class WebPage
9
-
10
- BLANK_PAGE = 'about:blank' # @deprecated , use BlankPage instead
11
- UnknownPage = Class.new
12
-
13
- include LocatorStore
14
- include Howitzer::Utils::PageValidator
15
- include RSpec::Matchers
16
- include Howitzer::Capybara::DslEx
17
- extend Howitzer::Capybara::DslEx
18
- include Singleton
19
-
20
- def self.inherited(subclass)
21
- subclass.class_eval { include Singleton }
22
- Howitzer::Utils::PageValidator.pages << subclass
23
- end
24
-
25
- ##
26
- #
27
- # Opens web-site by given url
28
- #
29
- # *Parameters:*
30
- # * +url+ - Url string that will be opened
31
- #
32
- # *Returns:*
33
- # * +WebPage+ - New instance of current class
34
- #
35
-
36
- def self.open(url = "#{app_url unless self == BlankPage}#{self::URL}")
37
- log.info "Open #{self.name} page by '#{url}' url"
38
- retryable(tries: 2, logger: log, trace: true, on: Exception) do |retries|
39
- log.info 'Retry...' unless retries.zero?
40
- visit url
41
- end
42
- given
43
- end
44
-
45
- ##
46
- #
47
- # Returns singleton instance of current web page
48
- #
49
- # *Returns:*
50
- # * +WebPage+ - Singleton instance
51
- #
52
-
53
- def self.given
54
- wait_for_opened
55
- self.instance
56
- end
57
-
58
- ##
59
- #
60
- # Returns current url
61
- #
62
- # *Returns:*
63
- # * +string+ - Current url
64
- #
65
-
66
- def self.url
67
- self.current_url
68
- end
69
-
70
- ##
71
- #
72
- # Returns body text of html page
73
- #
74
- # *Returns:*
75
- # * +string+ - Body text
76
- #
77
-
78
- def self.text
79
- page.find('body').text
80
- end
81
-
82
- ##
83
- #
84
- # Tries to identify current page name or raise error if ambiguous page matching
85
- #
86
- # *Returns:*
87
- # * +string+ - page name
88
- #
89
-
90
- def self.current_page
91
- page_list = matched_pages
92
- if page_list.count.zero?
93
- UnknownPage
94
- elsif page_list.count > 1
95
- log.error Howitzer::AmbiguousPageMatchingError,
96
- "Current page matches more that one page class (#{page_list.join(', ')}).\n\tCurrent url: #{current_url}\n\tCurrent title: #{title}"
97
- elsif page_list.count == 1
98
- page_list.first
99
- end
100
- end
101
-
102
- ##
103
- #
104
- # Waits until web page is not opened, or raise error after timeout
105
- #
106
- # *Parameters:*
107
- # * +time_out+ - Seconds that will be waiting for web page to be loaded
108
- #
109
-
110
- def self.wait_for_opened(timeout=settings.timeout_small)
111
- end_time = ::Time.now + timeout
112
- until ::Time.now > end_time
113
- self.opened? ? return : sleep(0.5)
114
- end
115
- log.error Howitzer::IncorrectPageError, "Current page: #{self.current_page}, expected: #{self}.\n\tCurrent url: #{current_url}\n\tCurrent title: #{title}"
116
- end
117
-
118
- def initialize
119
- check_validations_are_defined!
120
- page.driver.browser.manage.window.maximize if settings.maximized_window
121
- end
122
-
123
- ##
124
- #
125
- # Fills in field that using Tinymce API
126
- #
127
- # *Parameters:*
128
- # * +name+ - Frame name that contains Tinymce field
129
- # * +Hash+ - Not required options
130
- #
131
-
132
- def tinymce_fill_in(name, options = {})
133
- if %w[selenium selenium_dev sauce].include? settings.driver
134
- page.driver.browser.switch_to.frame("#{name}_ifr")
135
- page.find(:css, '#tinymce').native.send_keys(options[:with])
136
- page.driver.browser.switch_to.default_content
137
- else
138
- page.execute_script("tinyMCE.get('#{name}').setContent('#{options[:with]}')")
139
- end
140
- end
141
-
142
- ##
143
- #
144
- # Accepts or declines JS alert box by given flag
145
- #
146
- # *Parameters:*
147
- # * +flag+ [TrueClass,FalseClass] - Determines accept or decline alert box
148
- #
149
-
150
- def click_alert_box(flag)
151
- if %w[selenium selenium_dev sauce].include? settings.driver
152
- if flag
153
- page.driver.browser.switch_to.alert.accept
154
- else
155
- page.driver.browser.switch_to.alert.dismiss
156
- end
157
- else
158
- if flag
159
- page.evaluate_script('window.confirm = function() { return true; }')
160
- else
161
- page.evaluate_script('window.confirm = function() { return false; }')
162
- end
163
- end
164
- end
165
-
166
- ##
167
- #
168
- # Clicks on button or link using JS event call
169
- #
170
- # *Parameters:*
171
- # * +css_locator+ - Css locator of link or button
172
- #
173
-
174
- def js_click(css_locator)
175
- page.execute_script("$('#{css_locator}').trigger('click')")
176
- sleep settings.timeout_tiny
177
- end
178
-
179
- # @deprecated
180
- # With Capybara 2.x it is extra
181
- #:nocov:
182
- def wait_for_ajax(timeout=settings.timeout_small, message=nil)
183
- end_time = ::Time.now + timeout
184
- until ::Time.now > end_time
185
- return true if page.evaluate_script('$.active') == 0
186
- sleep 0.25
187
- end
188
- log.error message || 'Timed out waiting for ajax requests to complete'
189
- end
190
- #:nocov:
191
-
192
- ##
193
- # @deprecated
194
- #
195
- # Waits until web page is loaded
196
- #
197
- # *Parameters:*
198
- # * +expected_url+ - Url that will be waiting for
199
- # * +time_out+ - Seconds that will be waiting for web-site to be loaded until raise error
200
- #
201
-
202
- def wait_for_url(expected_url, timeout=settings.timeout_small)
203
- warn '[Deprecated] This method is deprecated, and will be removed in next version of Howitzer'
204
- end_time = ::Time.now + timeout
205
- until ::Time.now > end_time
206
- operator = expected_url.is_a?(Regexp) ? :=~ : :==
207
- return true if current_url.send(operator, expected_url).tap{|res| sleep 1 unless res}
208
- end
209
- log.error Howitzer::IncorrectPageError, "Current url: #{current_url}, expected: #{expected_url}"
210
- end
211
-
212
- ##
213
- # @deprecated
214
- #
215
- # Waits until web is loaded with expected title
216
- #
217
- # *Parameters:*
218
- # * +expected_title+ - Page title that will be waited for
219
- # * +time_out+ - Seconds that will be waiting for web-site to be loaded until raise error
220
- #
221
-
222
- def wait_for_title(expected_title, timeout=settings.timeout_small)
223
- warn '[Deprecated] This method is deprecated, and will be removed in next version of Howitzer'
224
- end_time = ::Time.now + timeout
225
- until ::Time.now > end_time
226
- operator = expected_title.is_a?(Regexp) ? :=~ : :==
227
- return true if title.send(operator, expected_title).tap{|res| sleep 1 unless res}
228
- end
229
- log.error Howitzer::IncorrectPageError, "Current title: #{title}, expected: #{expected_title}"
230
- end
231
-
232
- ##
233
- #
234
- # Reloads current page
235
- #
236
-
237
- def reload
238
- log.info "Reload '#{current_url}'"
239
- visit current_url
240
- end
241
-
242
- ##
243
- #
244
- # Returns Page title
245
- #
246
- # *Returns:*
247
- # * +string+ - Page title
248
- #
249
-
250
- def title
251
- page.title
252
- end
253
- end