watir 6.13.0 → 6.14.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (223) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +141 -0
  3. data/.travis.yml +6 -0
  4. data/CHANGES.md +12 -0
  5. data/Gemfile +4 -10
  6. data/README.md +64 -49
  7. data/Rakefile +28 -16
  8. data/lib/watir.rb +13 -15
  9. data/lib/watir/adjacent.rb +15 -13
  10. data/lib/watir/after_hooks.rb +8 -10
  11. data/lib/watir/alert.rb +7 -8
  12. data/lib/watir/aliases.rb +2 -2
  13. data/lib/watir/attribute_helper.rb +18 -20
  14. data/lib/watir/browser.rb +42 -75
  15. data/lib/watir/capabilities.rb +19 -10
  16. data/lib/watir/cell_container.rb +0 -2
  17. data/lib/watir/container.rb +4 -4
  18. data/lib/watir/cookies.rb +7 -8
  19. data/lib/watir/element_collection.rb +37 -22
  20. data/lib/watir/elements/area.rb +0 -2
  21. data/lib/watir/elements/button.rb +1 -3
  22. data/lib/watir/elements/cell.rb +0 -1
  23. data/lib/watir/elements/checkbox.rb +5 -7
  24. data/lib/watir/elements/date_field.rb +5 -9
  25. data/lib/watir/elements/date_time_field.rb +6 -10
  26. data/lib/watir/elements/dlist.rb +2 -4
  27. data/lib/watir/elements/element.rb +201 -99
  28. data/lib/watir/elements/file_field.rb +3 -4
  29. data/lib/watir/elements/font.rb +2 -4
  30. data/lib/watir/elements/form.rb +0 -2
  31. data/lib/watir/elements/hidden.rb +3 -4
  32. data/lib/watir/elements/html_elements.rb +24 -76
  33. data/lib/watir/elements/iframe.rb +57 -71
  34. data/lib/watir/elements/image.rb +3 -4
  35. data/lib/watir/elements/input.rb +0 -2
  36. data/lib/watir/elements/link.rb +2 -5
  37. data/lib/watir/elements/list.rb +4 -4
  38. data/lib/watir/elements/option.rb +3 -6
  39. data/lib/watir/elements/radio.rb +4 -6
  40. data/lib/watir/elements/row.rb +0 -1
  41. data/lib/watir/elements/select.rb +41 -43
  42. data/lib/watir/elements/svg_elements.rb +0 -116
  43. data/lib/watir/elements/table.rb +1 -2
  44. data/lib/watir/elements/table_cell.rb +2 -3
  45. data/lib/watir/elements/text_field.rb +4 -6
  46. data/lib/watir/exception.rb +0 -1
  47. data/lib/watir/extensions/nokogiri.rb +2 -4
  48. data/lib/watir/generator.rb +3 -3
  49. data/lib/watir/generator/base.rb +10 -10
  50. data/lib/watir/generator/base/generator.rb +26 -29
  51. data/lib/watir/generator/base/idl_sorter.rb +34 -32
  52. data/lib/watir/generator/base/spec_extractor.rb +132 -114
  53. data/lib/watir/generator/base/util.rb +1 -3
  54. data/lib/watir/generator/base/visitor.rb +140 -140
  55. data/lib/watir/generator/html.rb +4 -4
  56. data/lib/watir/generator/html/generator.rb +2 -4
  57. data/lib/watir/generator/html/spec_extractor.rb +33 -33
  58. data/lib/watir/generator/html/visitor.rb +14 -14
  59. data/lib/watir/generator/svg.rb +3 -3
  60. data/lib/watir/generator/svg/generator.rb +1 -3
  61. data/lib/watir/generator/svg/spec_extractor.rb +35 -35
  62. data/lib/watir/generator/svg/visitor.rb +14 -14
  63. data/lib/watir/has_window.rb +2 -4
  64. data/lib/watir/js_execution.rb +7 -9
  65. data/lib/watir/js_snippets.rb +3 -3
  66. data/lib/watir/js_snippets/attributeValues.js +11 -0
  67. data/lib/watir/legacy_wait.rb +7 -12
  68. data/lib/watir/locators.rb +9 -11
  69. data/lib/watir/locators/button/locator.rb +2 -3
  70. data/lib/watir/locators/button/selector_builder.rb +9 -9
  71. data/lib/watir/locators/button/selector_builder/xpath.rb +1 -1
  72. data/lib/watir/locators/button/validator.rb +2 -2
  73. data/lib/watir/locators/cell/locator.rb +0 -2
  74. data/lib/watir/locators/cell/selector_builder.rb +3 -5
  75. data/lib/watir/locators/element/locator.rb +85 -64
  76. data/lib/watir/locators/element/selector_builder.rb +40 -38
  77. data/lib/watir/locators/element/selector_builder/xpath.rb +20 -18
  78. data/lib/watir/locators/element/validator.rb +1 -1
  79. data/lib/watir/locators/row/locator.rb +0 -2
  80. data/lib/watir/locators/row/selector_builder.rb +6 -9
  81. data/lib/watir/locators/text_area/selector_builder.rb +1 -1
  82. data/lib/watir/locators/text_field/locator.rb +1 -3
  83. data/lib/watir/locators/text_field/selector_builder.rb +5 -5
  84. data/lib/watir/locators/text_field/selector_builder/xpath.rb +1 -1
  85. data/lib/watir/locators/text_field/validator.rb +3 -2
  86. data/lib/watir/logger.rb +11 -21
  87. data/lib/watir/navigation.rb +49 -0
  88. data/lib/watir/radio_set.rb +17 -18
  89. data/lib/watir/row_container.rb +3 -5
  90. data/lib/watir/screenshot.rb +2 -4
  91. data/lib/watir/user_editable.rb +13 -8
  92. data/lib/watir/version.rb +3 -0
  93. data/lib/watir/wait.rb +56 -55
  94. data/lib/watir/wait/timer.rb +1 -3
  95. data/lib/watir/window.rb +36 -45
  96. data/lib/watir/xpath_support.rb +1 -3
  97. data/lib/watirspec.rb +11 -11
  98. data/lib/watirspec/guards.rb +10 -7
  99. data/lib/watirspec/implementation.rb +3 -4
  100. data/lib/watirspec/rake_tasks.rb +30 -29
  101. data/lib/watirspec/remote_server.rb +3 -3
  102. data/lib/watirspec/runner.rb +1 -2
  103. data/lib/watirspec/server.rb +3 -0
  104. data/lib/watirspec/server/app.rb +14 -6
  105. data/spec/implementation_spec.rb +9 -9
  106. data/spec/locator_spec_helper.rb +3 -4
  107. data/spec/spec_helper.rb +3 -7
  108. data/spec/unit/container_spec.rb +9 -10
  109. data/spec/unit/element_locator_spec.rb +224 -219
  110. data/spec/unit/logger_spec.rb +4 -4
  111. data/spec/unit/unit_helper.rb +0 -2
  112. data/spec/unit/wait_spec.rb +26 -28
  113. data/spec/watirspec/adjacent_spec.rb +130 -130
  114. data/spec/watirspec/after_hooks_spec.rb +63 -63
  115. data/spec/watirspec/alert_spec.rb +6 -6
  116. data/spec/watirspec/attributes_spec.rb +6 -6
  117. data/spec/watirspec/browser_spec.rb +161 -162
  118. data/spec/watirspec/click_spec.rb +9 -9
  119. data/spec/watirspec/cookies_spec.rb +15 -14
  120. data/spec/watirspec/drag_and_drop_spec.rb +15 -16
  121. data/spec/watirspec/element_hidden_spec.rb +19 -21
  122. data/spec/watirspec/elements/area_spec.rb +18 -21
  123. data/spec/watirspec/elements/areas_spec.rb +13 -15
  124. data/spec/watirspec/elements/button_spec.rb +96 -99
  125. data/spec/watirspec/elements/buttons_spec.rb +17 -19
  126. data/spec/watirspec/elements/checkbox_spec.rb +102 -100
  127. data/spec/watirspec/elements/checkboxes_spec.rb +13 -15
  128. data/spec/watirspec/elements/collections_spec.rb +35 -37
  129. data/spec/watirspec/elements/date_field_spec.rb +46 -47
  130. data/spec/watirspec/elements/date_fields_spec.rb +13 -15
  131. data/spec/watirspec/elements/date_time_field_spec.rb +62 -57
  132. data/spec/watirspec/elements/date_time_fields_spec.rb +14 -15
  133. data/spec/watirspec/elements/dd_spec.rb +46 -48
  134. data/spec/watirspec/elements/dds_spec.rb +13 -15
  135. data/spec/watirspec/elements/del_spec.rb +27 -28
  136. data/spec/watirspec/elements/dels_spec.rb +13 -15
  137. data/spec/watirspec/elements/div_spec.rb +89 -91
  138. data/spec/watirspec/elements/divs_spec.rb +17 -19
  139. data/spec/watirspec/elements/dl_spec.rb +52 -54
  140. data/spec/watirspec/elements/dls_spec.rb +13 -15
  141. data/spec/watirspec/elements/dt_spec.rb +46 -48
  142. data/spec/watirspec/elements/dts_spec.rb +13 -15
  143. data/spec/watirspec/elements/element_spec.rb +240 -189
  144. data/spec/watirspec/elements/elements_spec.rb +16 -16
  145. data/spec/watirspec/elements/em_spec.rb +38 -40
  146. data/spec/watirspec/elements/ems_spec.rb +13 -15
  147. data/spec/watirspec/elements/filefield_spec.rb +45 -46
  148. data/spec/watirspec/elements/filefields_spec.rb +13 -15
  149. data/spec/watirspec/elements/font_spec.rb +11 -13
  150. data/spec/watirspec/elements/form_spec.rb +13 -15
  151. data/spec/watirspec/elements/forms_spec.rb +13 -15
  152. data/spec/watirspec/elements/frame_spec.rb +48 -50
  153. data/spec/watirspec/elements/frames_spec.rb +13 -15
  154. data/spec/watirspec/elements/hidden_spec.rb +23 -25
  155. data/spec/watirspec/elements/hiddens_spec.rb +13 -15
  156. data/spec/watirspec/elements/hn_spec.rb +22 -24
  157. data/spec/watirspec/elements/hns_spec.rb +13 -13
  158. data/spec/watirspec/elements/iframe_spec.rb +106 -74
  159. data/spec/watirspec/elements/iframes_spec.rb +16 -18
  160. data/spec/watirspec/elements/image_spec.rb +30 -32
  161. data/spec/watirspec/elements/images_spec.rb +13 -15
  162. data/spec/watirspec/elements/input_spec.rb +4 -5
  163. data/spec/watirspec/elements/ins_spec.rb +27 -29
  164. data/spec/watirspec/elements/inses_spec.rb +13 -15
  165. data/spec/watirspec/elements/label_spec.rb +17 -19
  166. data/spec/watirspec/elements/labels_spec.rb +13 -15
  167. data/spec/watirspec/elements/li_spec.rb +23 -25
  168. data/spec/watirspec/elements/link_spec.rb +45 -48
  169. data/spec/watirspec/elements/links_spec.rb +14 -16
  170. data/spec/watirspec/elements/lis_spec.rb +13 -15
  171. data/spec/watirspec/elements/list_spec.rb +14 -15
  172. data/spec/watirspec/elements/map_spec.rb +19 -20
  173. data/spec/watirspec/elements/maps_spec.rb +13 -15
  174. data/spec/watirspec/elements/meta_spec.rb +10 -10
  175. data/spec/watirspec/elements/metas_spec.rb +13 -15
  176. data/spec/watirspec/elements/ol_spec.rb +20 -21
  177. data/spec/watirspec/elements/ols_spec.rb +13 -15
  178. data/spec/watirspec/elements/option_spec.rb +63 -63
  179. data/spec/watirspec/elements/p_spec.rb +27 -26
  180. data/spec/watirspec/elements/pre_spec.rb +24 -25
  181. data/spec/watirspec/elements/pres_spec.rb +13 -15
  182. data/spec/watirspec/elements/ps_spec.rb +13 -15
  183. data/spec/watirspec/elements/radio_spec.rb +96 -97
  184. data/spec/watirspec/elements/radios_spec.rb +13 -15
  185. data/spec/watirspec/elements/select_list_spec.rb +244 -237
  186. data/spec/watirspec/elements/select_lists_spec.rb +15 -16
  187. data/spec/watirspec/elements/span_spec.rb +32 -31
  188. data/spec/watirspec/elements/spans_spec.rb +13 -15
  189. data/spec/watirspec/elements/strong_spec.rb +23 -24
  190. data/spec/watirspec/elements/strongs_spec.rb +13 -15
  191. data/spec/watirspec/elements/table_nesting_spec.rb +15 -14
  192. data/spec/watirspec/elements/table_spec.rb +61 -62
  193. data/spec/watirspec/elements/tables_spec.rb +15 -17
  194. data/spec/watirspec/elements/tbody_spec.rb +25 -26
  195. data/spec/watirspec/elements/tbodys_spec.rb +17 -19
  196. data/spec/watirspec/elements/td_spec.rb +20 -22
  197. data/spec/watirspec/elements/tds_spec.rb +9 -11
  198. data/spec/watirspec/elements/text_field_spec.rb +55 -56
  199. data/spec/watirspec/elements/text_fields_spec.rb +15 -16
  200. data/spec/watirspec/elements/textarea_spec.rb +2 -2
  201. data/spec/watirspec/elements/textareas_spec.rb +1 -1
  202. data/spec/watirspec/elements/tfoot_spec.rb +22 -23
  203. data/spec/watirspec/elements/tfoots_spec.rb +19 -19
  204. data/spec/watirspec/elements/thead_spec.rb +21 -23
  205. data/spec/watirspec/elements/theads_spec.rb +19 -19
  206. data/spec/watirspec/elements/tr_spec.rb +20 -22
  207. data/spec/watirspec/elements/trs_spec.rb +17 -19
  208. data/spec/watirspec/elements/ul_spec.rb +17 -19
  209. data/spec/watirspec/elements/uls_spec.rb +13 -14
  210. data/spec/watirspec/html/data_attributes.html +1 -0
  211. data/spec/watirspec/radio_set_spec.rb +100 -99
  212. data/spec/watirspec/relaxed_locate_spec.rb +19 -43
  213. data/spec/watirspec/screenshot_spec.rb +4 -4
  214. data/spec/watirspec/special_chars_spec.rb +2 -4
  215. data/spec/watirspec/support/rspec_matchers.rb +85 -22
  216. data/spec/watirspec/user_editable_spec.rb +84 -85
  217. data/spec/watirspec/wait_spec.rb +74 -95
  218. data/spec/watirspec/window_switching_spec.rb +131 -132
  219. data/spec/watirspec_helper.rb +12 -9
  220. data/support/travis.sh +4 -0
  221. data/support/version_differ.rb +12 -13
  222. data/watir.gemspec +29 -22
  223. metadata +76 -50
@@ -1,10 +1,9 @@
1
1
  module Watir
2
2
  module XpathSupport
3
-
4
3
  def self.escape(value)
5
4
  if value.include? "'"
6
5
  parts = value.split("'", -1).map { |part| "'#{part}'" }
7
- string = parts.join(%{,"'",})
6
+ string = parts.join(%(,"'",))
8
7
 
9
8
  "concat(#{string})"
10
9
  else
@@ -15,6 +14,5 @@ module Watir
15
14
  def self.downcase(value)
16
15
  "translate(#{value},'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')"
17
16
  end
18
-
19
17
  end # XpathSupport
20
18
  end # Watir
@@ -1,4 +1,4 @@
1
- require "tmpdir"
1
+ require 'tmpdir'
2
2
  require 'watirspec/guards'
3
3
  require 'watirspec/implementation'
4
4
  require 'watirspec/runner'
@@ -6,10 +6,10 @@ require 'watirspec/server'
6
6
 
7
7
  module WatirSpec
8
8
  class << self
9
- attr_accessor :browser_args, :unguarded, :implementation
9
+ attr_accessor :browser_args, :unguarded
10
10
 
11
11
  def htmls
12
- @htmls ||= [File.expand_path("../../spec/watirspec/html", __FILE__)]
12
+ @htmls ||= [File.expand_path('../spec/watirspec/html', __dir__)]
13
13
  end
14
14
 
15
15
  def run!
@@ -30,19 +30,19 @@ module WatirSpec
30
30
  end
31
31
 
32
32
  def load_support
33
- root = File.expand_path("../../spec/watirspec", __FILE__)
33
+ root = File.expand_path('../spec/watirspec', __dir__)
34
34
  Dir.glob("#{root}/support/**/*.rb").each do |file|
35
35
  require file
36
36
  end
37
37
  end
38
38
 
39
39
  def implementation
40
- @implementation ||= (
40
+ @implementation ||= begin
41
41
  imp = WatirSpec::Implementation.new
42
42
  yield imp if block_given?
43
43
 
44
44
  imp
45
- )
45
+ end
46
46
  end
47
47
 
48
48
  def implementation=(imp)
@@ -55,7 +55,7 @@ module WatirSpec
55
55
 
56
56
  def new_browser
57
57
  klass = WatirSpec.implementation.browser_class
58
- args = Array(WatirSpec.implementation.browser_args).map { |e| Hash === e ? e.dup : e }
58
+ args = Array(WatirSpec.implementation.browser_args).map { |e| e.is_a?(Hash) ? e.dup : e }
59
59
 
60
60
  instance = klass.new(*args)
61
61
  print_browser_info_once(instance)
@@ -67,6 +67,7 @@ module WatirSpec
67
67
 
68
68
  def print_browser_info_once(instance)
69
69
  return if defined?(@did_print_browser_info) && @did_print_browser_info
70
+
70
71
  @did_print_browser_info = true
71
72
 
72
73
  info = []
@@ -74,14 +75,13 @@ module WatirSpec
74
75
 
75
76
  caps = instance.driver.capabilities
76
77
 
77
- info << "#{caps.browser_name}"
78
- info << "#{caps.version}"
78
+ info << caps.browser_name.to_s
79
+ info << caps.version.to_s
79
80
 
80
81
  Watir.logger.warn "running watirspec against #{info.join ' '} using:\n#{WatirSpec.implementation.inspect_args}",
81
82
  ids: [:browser_info]
82
- rescue
83
+ rescue StandardError
83
84
  # ignored
84
85
  end
85
-
86
86
  end # class << WatirSpec
87
87
  end # WatirSpec
@@ -1,6 +1,5 @@
1
1
  module WatirSpec
2
2
  module Guards
3
-
4
3
  class << self
5
4
  def guards
6
5
  @guards ||= Hash.new { |hash, key| hash[key] = [] }
@@ -12,13 +11,13 @@ module WatirSpec
12
11
 
13
12
  def report
14
13
  gs = WatirSpec.implementation.matching_guards_in(guards)
15
- str= "WatirSpec guards for this implementation: \n"
14
+ str = "WatirSpec guards for this implementation: \n"
16
15
 
17
16
  if gs.empty?
18
17
  "\tnone."
19
18
  else
20
19
  gs.each do |guard|
21
- guard[:data][:file] = guard[:data][:file][/\/spec\/(.*):/, 1]
20
+ guard[:data][:file] = guard[:data][:file][%r{\/spec\/(.*):}, 1]
22
21
  guard_name = "#{guard[:name]}:".ljust(15)
23
22
  str << " \t#{guard_name} #{guard[:data].inspect}\n"
24
23
  end
@@ -30,26 +29,30 @@ module WatirSpec
30
29
  private
31
30
 
32
31
  def deviates_on(*impls)
33
- Guards.record :deviates, impls, file: caller.first
32
+ Guards.record :deviates, impls, file: caller(1..1).first
34
33
  return yield if WatirSpec.unguarded?
34
+
35
35
  yield if WatirSpec.implementation.matches_guard?(impls)
36
36
  end
37
37
 
38
38
  def not_compliant_on(*impls)
39
- Guards.record :not_compliant, impls, file: caller.first
39
+ Guards.record :not_compliant, impls, file: caller(1..1).first
40
40
  return yield if WatirSpec.unguarded?
41
+
41
42
  yield unless WatirSpec.implementation.matches_guard?(impls)
42
43
  end
43
44
 
44
45
  def compliant_on(*impls)
45
- Guards.record :compliant, impls, file: caller.first
46
+ Guards.record :compliant, impls, file: caller(1..1).first
46
47
  return yield if WatirSpec.unguarded?
48
+
47
49
  yield if WatirSpec.implementation.matches_guard?(impls)
48
50
  end
49
51
 
50
52
  def bug(key, *impls)
51
- Guards.record :bug, impls, file: caller.first, key: key
53
+ Guards.record :bug, impls, file: caller(1..1).first, key: key
52
54
  return yield if WatirSpec.unguarded?
55
+
53
56
  yield if impls.any? && !WatirSpec.implementation.matches_guard?(impls)
54
57
  end
55
58
  end
@@ -1,6 +1,5 @@
1
1
  module WatirSpec
2
2
  class Implementation
3
-
4
3
  attr_writer :name, :guard_proc, :browser_class
5
4
  attr_accessor :browser_args
6
5
 
@@ -15,11 +14,11 @@ module WatirSpec
15
14
  end
16
15
 
17
16
  def browser_class
18
- @browser_class || raise("browser_class not set")
17
+ @browser_class || raise('browser_class not set')
19
18
  end
20
19
 
21
20
  def name
22
- @name || raise("implementation name not set")
21
+ @name || raise('implementation name not set')
23
22
  end
24
23
 
25
24
  def matches_guard?(args)
@@ -43,7 +42,7 @@ module WatirSpec
43
42
  return "#{string} default capabilities" unless desired_capabilities
44
43
 
45
44
  string << "\tcapabilities:\n"
46
- caps.each { |k, v| string << "\t\t#{k}: #{v}\n"}
45
+ caps.each { |k, v| string << "\t\t#{k}: #{v}\n" }
47
46
  hash[:desired_capabilities] = desired_capabilities
48
47
  string
49
48
  end
@@ -16,7 +16,7 @@ module WatirSpec
16
16
  end
17
17
 
18
18
  desc 'Run WatirSpec examples'
19
- task :run, %i(spec line) do |_, args|
19
+ task :run, %i[spec line] do |_, args|
20
20
  run(args)
21
21
  end
22
22
  end
@@ -43,7 +43,8 @@ module WatirSpec
43
43
 
44
44
  def run(**args)
45
45
  return if system(rspec_command(args))
46
- exit $?.exitstatus || 1
46
+
47
+ exit $CHILD_STATUS.exitstatus || 1
47
48
  end
48
49
 
49
50
  def rspec_command(**args)
@@ -74,42 +75,42 @@ module WatirSpec
74
75
  end
75
76
 
76
77
  def watirspec_helper_template
77
- <<-RUBY
78
- require 'watirspec'
79
- # require your gems
80
-
81
- WatirSpec.implementation do |watirspec|
82
- # add WatirSpec implementation (see example below)
83
- #
84
- # watirspec.name = :watizzle
85
- # watirspec.browser_class = Watir::Browser
86
- # watirspec.browser_args = [:firefox, {}]
87
- # watirspec.guard_proc = lambda do |args|
88
- # args.include?(:firefox)
89
- # end
90
- end
78
+ <<~RUBY
79
+ require 'watirspec'
80
+ # require your gems
81
+
82
+ WatirSpec.implementation do |watirspec|
83
+ # add WatirSpec implementation (see example below)
84
+ #
85
+ # watirspec.name = :watizzle
86
+ # watirspec.browser_class = Watir::Browser
87
+ # watirspec.browser_args = [:firefox, {}]
88
+ # watirspec.guard_proc = lambda do |args|
89
+ # args.include?(:firefox)
90
+ # end
91
+ end
91
92
 
92
- WatirSpec.run!
93
+ WatirSpec.run!
93
94
  RUBY
94
95
  end
95
96
 
96
97
  def print_usage
97
- p <<-EOS
98
- File spec/watirspec_helper.rb is successfully created!
99
- Please, check it and customize for your needs. Once done, you can start using WatirSpec.
98
+ p <<~PRINT_USAGE
99
+ File spec/watirspec_helper.rb is successfully created!
100
+ Please, check it and customize for your needs. Once done, you can start using WatirSpec.
100
101
 
101
- Run all WatirSpec examples:
102
- $ bundle exec rake watirspec:run
102
+ Run all WatirSpec examples:
103
+ $ bundle exec rake watirspec:run
103
104
 
104
- Run specific WatirSpec example:
105
- $ bundle exec rake watirspec:run[elements/div]
105
+ Run specific WatirSpec example:
106
+ $ bundle exec rake watirspec:run[elements/div]
106
107
 
107
- Run WatirSpec example on a custom line:
108
- $ bundle exec rake watirspec:run[elements/div, 50]
108
+ Run WatirSpec example on a custom line:
109
+ $ bundle exec rake watirspec:run[elements/div, 50]
109
110
 
110
- List all WatirSpec examples:
111
- $ bundle exec rake watirspec:list
112
- EOS
111
+ List all WatirSpec examples:
112
+ $ bundle exec rake watirspec:list
113
+ PRINT_USAGE
113
114
  end
114
115
  end
115
116
  end
@@ -24,7 +24,7 @@ module WatirSpec
24
24
 
25
25
  if File.exist?(ENV['REMOTE_SERVER_BINARY'] || '')
26
26
  ENV['REMOTE_SERVER_BINARY']
27
- elsif ENV['LOCAL_SELENIUM'] && File.exists?(local)
27
+ elsif ENV['LOCAL_SELENIUM'] && File.exist?(local)
28
28
  local
29
29
  elsif !Dir.glob('*selenium*.jar').empty?
30
30
  Dir.glob('*selenium*.jar').first
@@ -33,7 +33,7 @@ module WatirSpec
33
33
  end
34
34
  rescue SocketError
35
35
  # not connected to internet
36
- raise Watir::Exception::Error, "unable to find or download selenium-server-standalone jar"
36
+ raise Watir::Exception::Error, 'unable to find or download selenium-server-standalone jar'
37
37
  end
38
38
  end
39
- end
39
+ end
@@ -1,6 +1,5 @@
1
1
  module WatirSpec
2
2
  module Runner
3
-
4
3
  module BrowserHelper
5
4
  def browser
6
5
  $browser
@@ -52,8 +51,8 @@ module WatirSpec
52
51
 
53
52
  def add_guard_hook
54
53
  return if WatirSpec.unguarded?
54
+
55
55
  at_exit { WatirSpec::Guards.report }
56
56
  end
57
-
58
57
  end # Runner
59
58
  end # WatirSpec
@@ -6,6 +6,7 @@ module WatirSpec
6
6
  class << self
7
7
  def run!
8
8
  return if running?
9
+
9
10
  Thread.new do
10
11
  run_server
11
12
  wait_for_connection
@@ -37,6 +38,7 @@ module WatirSpec
37
38
  def wait_for_connection
38
39
  socket_poller = Selenium::WebDriver::SocketPoller.new(bind, port, 30)
39
40
  return if socket_poller.connected?
41
+
40
42
  raise 'Cannot start WatirSpec server.'
41
43
  end
42
44
 
@@ -68,6 +70,7 @@ module WatirSpec
68
70
  headers = {}
69
71
  while (line = client.gets.split(' ', 2))
70
72
  break if line[0] == ''
73
+
71
74
  headers[line[0].chop] = line[1].strip
72
75
  end
73
76
 
@@ -10,7 +10,19 @@ module WatirSpec
10
10
  when '/plain_text'
11
11
  respond('This is text/plain', 'Content-Type' => 'text/plain')
12
12
  when %r{/set_cookie}
13
- respond("<html>C is for cookie, it's good enough for me</html>", 'Content-Type' => 'text/html', 'Set-Cookie' => 'monster=1')
13
+ body = "<html>C is for cookie, it's good enough for me</html>"
14
+ respond(body, 'Content-Type' => 'text/html', 'Set-Cookie' => 'monster=1')
15
+ when static_file?
16
+ respond_to_file(path)
17
+ else
18
+ respond('')
19
+ end
20
+ end
21
+
22
+ private
23
+
24
+ def respond_to_file(path)
25
+ case path
14
26
  when css_file?
15
27
  respond(file_read(path), 'Content-Type' => 'text/css')
16
28
  when js_file?
@@ -19,15 +31,11 @@ module WatirSpec
19
31
  respond(file_binread(path), 'Content-Type' => 'image/png')
20
32
  when gif_file?
21
33
  respond(file_read(path), 'Content-Type' => 'image/gif')
22
- when static_file?
23
- respond(file_read(path))
24
34
  else
25
- respond('')
35
+ respond(file_read(path))
26
36
  end
27
37
  end
28
38
 
29
- private
30
-
31
39
  def respond(body, headers = {}, status = '200 OK')
32
40
  [status, headers, body]
33
41
  end
@@ -3,19 +3,19 @@ require 'watirspec_helper'
3
3
  describe WatirSpec::Implementation do
4
4
  before { @impl = WatirSpec::Implementation.new }
5
5
 
6
- it "finds matching guards" do
6
+ it 'finds matching guards' do
7
7
  guards = {
8
8
  [:firefox] => [
9
- {name: :not_compliant, data: {file: "./spec/watirspec/div_spec.rb:108"}},
10
- {name: :deviates, data: {file: "./spec/watirspec/div_spec.rb:114"}},
11
- {name: :not_compliant, data: {file: "./spec/watirspec/div_spec.rb:200"}},
12
- {name: :bug, data: {file: "./spec/watirspec/div_spec.rb:228", key: "WTR-350"}}
9
+ {name: :not_compliant, data: {file: './spec/watirspec/div_spec.rb:108'}},
10
+ {name: :deviates, data: {file: './spec/watirspec/div_spec.rb:114'}},
11
+ {name: :not_compliant, data: {file: './spec/watirspec/div_spec.rb:200'}},
12
+ {name: :bug, data: {file: './spec/watirspec/div_spec.rb:228', key: 'WTR-350'}}
13
13
  ],
14
14
  [:chrome] => [
15
- {name: :not_compliant, data: {file: "./spec/watirspec/div_spec.rb:109"}},
16
- {name: :deviates, data: {file: "./spec/watirspec/div_spec.rb:115"}},
17
- {name: :not_compliant, data: {file: "./spec/watirspec/div_spec.rb:201"}},
18
- {name: :bug, data: {file: "./spec/watirspec/div_spec.rb:229", key: "WTR-349"}}
15
+ {name: :not_compliant, data: {file: './spec/watirspec/div_spec.rb:109'}},
16
+ {name: :deviates, data: {file: './spec/watirspec/div_spec.rb:115'}},
17
+ {name: :not_compliant, data: {file: './spec/watirspec/div_spec.rb:201'}},
18
+ {name: :bug, data: {file: './spec/watirspec/div_spec.rb:229', key: 'WTR-349'}}
19
19
  ]
20
20
  }
21
21
  @impl.name = :firefox
@@ -34,9 +34,9 @@ module LocatorSpecHelper
34
34
  attrs = opts.delete(:attributes)
35
35
  el = double(Watir::HTMLElement, opts)
36
36
 
37
- attrs.each do |key, value|
38
- allow(el).to receive(:attribute).with(key).and_return(value)
39
- end if attrs
37
+ attrs&.each do |key, value|
38
+ allow(el).to receive(:attribute).with(key.to_s).and_return(value)
39
+ end
40
40
  allow(el).to receive(:enabled?).and_return true
41
41
  el
42
42
  end
@@ -52,4 +52,3 @@ module LocatorSpecHelper
52
52
  end
53
53
  end
54
54
  end
55
-
@@ -9,14 +9,10 @@ require 'webdrivers'
9
9
  require 'locator_spec_helper'
10
10
  require 'rspec'
11
11
 
12
- SELENIUM_SELECTORS = %i(css tag_name xpath link_text partial_link_text link)
12
+ SELENIUM_SELECTORS = %i[css tag_name xpath link_text partial_link_text link].freeze
13
13
 
14
- if ENV['RELAXED_LOCATE'] == "false"
15
- Watir.relaxed_locate = false
16
- end
14
+ Watir.relaxed_locate = false if ENV['RELAXED_LOCATE'] == 'false'
17
15
 
18
16
  ENV['DISPLAY'] = ':99.0' if ENV['TRAVIS']
19
17
 
20
- if Selenium::WebDriver::Platform.linux? && ENV['DISPLAY'].nil?
21
- raise "DISPLAY not set"
22
- end
18
+ raise 'DISPLAY not set' if Selenium::WebDriver::Platform.linux? && ENV['DISPLAY'].nil?
@@ -3,34 +3,33 @@ require_relative 'unit_helper'
3
3
  describe Watir::Container do
4
4
  before { @container = Object.new.extend(Watir::Container) }
5
5
 
6
- describe "#extract_selector" do
6
+ describe '#extract_selector' do
7
7
  before do
8
8
  def @container.public_extract_selector(*args)
9
9
  extract_selector(*args)
10
10
  end
11
11
  end
12
12
 
13
- it "converts 2-arg selector into a hash" do
13
+ it 'converts 2-arg selector into a hash' do
14
14
  expect {
15
15
  expect(@container.public_extract_selector([:how, 'what'])).to eq Hash[how: 'what']
16
16
  }.to have_deprecated_selector_parameters
17
17
  end
18
18
 
19
- it "returns the hash given" do
20
- expect(@container.public_extract_selector([how: "what"])).to eq Hash[how: "what"]
19
+ it 'returns the hash given' do
20
+ expect(@container.public_extract_selector([how: 'what'])).to eq Hash[how: 'what']
21
21
  end
22
22
 
23
- it "returns an empty hash if given no args" do
23
+ it 'returns an empty hash if given no args' do
24
24
  expect(@container.public_extract_selector([])).to eq Hash[]
25
25
  end
26
26
 
27
- it "raises ArgumentError if given 1 arg which is not a Hash" do
28
- expect {@container.public_extract_selector([:how])}.to raise_error(ArgumentError)
27
+ it 'raises ArgumentError if given 1 arg which is not a Hash' do
28
+ expect { @container.public_extract_selector([:how]) }.to raise_error(ArgumentError)
29
29
  end
30
30
 
31
- it "raises ArgumentError if given > 2 args" do
32
- expect {@container.public_extract_selector([:how, 'what', 'value'])}.to raise_error(ArgumentError)
31
+ it 'raises ArgumentError if given > 2 args' do
32
+ expect { @container.public_extract_selector([:how, 'what', 'value']) }.to raise_error(ArgumentError)
33
33
  end
34
-
35
34
  end
36
35
  end