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,21 +1,21 @@
1
1
  module Watir
2
2
  module Generator
3
- class HTML::Visitor < Base::Visitor
3
+ module HTML
4
+ class Visitor < Base::Visitor
5
+ def classify_regexp
6
+ /^HTML(.+)Element$/
7
+ end
4
8
 
5
- def classify_regexp
6
- /^HTML(.+)Element$/
7
- end
9
+ private
8
10
 
9
- private
11
+ def interface_regexp
12
+ /^HTML/
13
+ end
10
14
 
11
- def interface_regexp
12
- /^HTML/
13
- end
14
-
15
- def force_inheritance
16
- { 'HTMLElement' => 'Element' }
17
- end
18
-
19
- end # HTML::Visitor
15
+ def force_inheritance
16
+ {'HTMLElement' => 'Element'}
17
+ end
18
+ end # Visitor
19
+ end # HTML
20
20
  end # Generator
21
21
  end # Watir
@@ -2,6 +2,6 @@ ActiveSupport::Inflector.inflections do |inflect|
2
2
  inflect.plural 'defs', 'defss'
3
3
  end
4
4
 
5
- require "watir/generator/svg/generator"
6
- require "watir/generator/svg/spec_extractor"
7
- require "watir/generator/svg/visitor"
5
+ require 'watir/generator/svg/generator'
6
+ require 'watir/generator/svg/spec_extractor'
7
+ require 'watir/generator/svg/visitor'
@@ -1,7 +1,6 @@
1
1
  module Watir
2
2
  module Generator
3
3
  class SVG < Base
4
-
5
4
  private
6
5
 
7
6
  # fix collisions with HTML
@@ -10,7 +9,7 @@ module Watir
10
9
  # are inherited from HTML ones
11
10
 
12
11
  def ignored_tags
13
- %w(a audio canvas iframe image script source style text title track video unknown)
12
+ %w[a audio canvas iframe image script source style text title track video unknown]
14
13
  end
15
14
 
16
15
  def ignored_interfaces
@@ -32,7 +31,6 @@ module Watir
32
31
  def extractor_class
33
32
  SVG::SpecExtractor
34
33
  end
35
-
36
34
  end # SVG
37
35
  end # Generator
38
36
  end # Watir
@@ -1,53 +1,53 @@
1
1
  module Watir
2
2
  module Generator
3
- class SVG::SpecExtractor < Base::SpecExtractor
3
+ module SVG
4
+ class SpecExtractor < Base::SpecExtractor
5
+ private
4
6
 
5
- private
7
+ def extract_interface_map
8
+ list = @doc.search("//div[@id='chapter-eltindex']//ul/li")
9
+ list.any? || raise('could not find elements list')
6
10
 
7
- def extract_interface_map
8
- list = @doc.search("//div[@id='chapter-eltindex']//ul/li")
9
- list.any? or raise 'could not find elements list'
10
-
11
- @interface_map = parse_list(list)
12
- end
11
+ @interface_map = parse_list(list)
12
+ end
13
13
 
14
- def build_result
15
- {}.tap do |result|
16
- @interface_map.each do |tag, interface|
17
- result[tag] = fetch_interface(interface)
14
+ def build_result
15
+ {}.tap do |result|
16
+ @interface_map.each do |tag, interface|
17
+ result[tag] = fetch_interface(interface)
18
+ end
18
19
  end
19
20
  end
20
- end
21
21
 
22
- def parse_list(list)
23
- {}.tap do |result|
24
- list.each do |node|
25
- tag_name = node.css('a span').inner_text.strip
26
- id = node.css('a').attr('href').to_s
22
+ def parse_list(list)
23
+ {}.tap do |result|
24
+ list.each do |node|
25
+ tag_name = node.css('a span').inner_text.strip
26
+ id = node.css('a').attr('href').to_s
27
27
 
28
- next if external_interface?(id)
28
+ next if external_interface?(id)
29
29
 
30
- interface_css = 'div.element-summary a.idlinterface'
31
- interface_definitions = @doc.css("#{id} #{interface_css}, #{id} ~ #{interface_css}")
30
+ interface_css = 'div.element-summary a.idlinterface'
31
+ interface_definitions = @doc.css("#{id} #{interface_css}, #{id} ~ #{interface_css}")
32
32
 
33
- # TSpan is defined along with Text so the first IDL definition is SVGTextElement
34
- idx = tag_name == 'tspan' ? 1 : 0
33
+ # TSpan is defined along with Text so the first IDL definition is SVGTextElement
34
+ idx = tag_name == 'tspan' ? 1 : 0
35
35
 
36
- result[tag_name] = interface_definitions[idx].inner_text.strip
36
+ result[tag_name] = interface_definitions[idx].inner_text.strip
37
+ end
37
38
  end
38
39
  end
39
- end
40
-
41
- def issued_interfaces
42
- %w(SVGHatchElement SVGHatchPathElement SVGSolidColorElement)
43
- end
44
40
 
45
- # Some interfaces are actually defined in different specs
46
- # (for example, clipPath), so we ignore them for now.
47
- def external_interface?(id)
48
- id !~ /^#.+/
49
- end
41
+ def issued_interfaces
42
+ []
43
+ end
50
44
 
51
- end # SVG::SpecExtractor
45
+ # Some interfaces are actually defined in different specs
46
+ # (for example, clipPath), so we ignore them for now.
47
+ def external_interface?(id)
48
+ id !~ /^#.+/
49
+ end
50
+ end # SpecExtractor
51
+ end # SVG
52
52
  end # Generator
53
53
  end # Watir
@@ -1,21 +1,21 @@
1
1
  module Watir
2
2
  module Generator
3
- class SVG::Visitor < Base::Visitor
3
+ module SVG
4
+ class Visitor < Base::Visitor
5
+ def classify_regexp
6
+ /^SVG(.+)Element$/
7
+ end
4
8
 
5
- def classify_regexp
6
- /^SVG(.+)Element$/
7
- end
9
+ private
8
10
 
9
- private
11
+ def interface_regexp
12
+ /^SVG.*Element$/
13
+ end
10
14
 
11
- def interface_regexp
12
- /^SVG.*Element$/
13
- end
14
-
15
- def force_inheritance
16
- { 'SVGElement' => 'HTMLElement' }
17
- end
18
-
19
- end # SVG::Visitor
15
+ def force_inheritance
16
+ {'SVGElement' => 'HTMLElement'}
17
+ end
18
+ end # Visitor
19
+ end # SVG
20
20
  end # Generator
21
21
  end # Watir
@@ -1,6 +1,5 @@
1
1
  module Watir
2
2
  module HasWindow
3
-
4
3
  #
5
4
  # Returns browser windows array.
6
5
  #
@@ -55,14 +54,13 @@ module Watir
55
54
  private
56
55
 
57
56
  def filter_windows(selector, windows)
58
- unless selector.keys.all? { |k| [:title, :url].include? k }
57
+ unless selector.keys.all? { |k| %i[title url].include? k }
59
58
  raise ArgumentError, "invalid window selector: #{selector.inspect}"
60
59
  end
61
60
 
62
61
  windows.select do |win|
63
- selector.all? { |key, value| value === win.send(key) }
62
+ selector.all? { |key, value| win.send(key) =~ /#{value}/ }
64
63
  end
65
64
  end
66
-
67
65
  end # HasWindow
68
66
  end # Watir
@@ -1,6 +1,5 @@
1
1
  module Watir
2
2
  module JSExecution
3
-
4
3
  #
5
4
  # Delegates script execution to Browser or IFrame.
6
5
  #
@@ -50,14 +49,14 @@ module Watir
50
49
 
51
50
  def flash(preset = :default, color: 'red', flashes: 10, delay: 0.1)
52
51
  presets = {
53
- fast: { delay: 0.04 },
54
- slow: { delay: 0.2 },
55
- long: { flashes: 5, delay: 0.5 },
56
- rainbow: { flashes: 5, color: %w(red orange yellow green blue indigo violet) }
52
+ fast: {delay: 0.04},
53
+ slow: {delay: 0.2},
54
+ long: {flashes: 5, delay: 0.5},
55
+ rainbow: {flashes: 5, color: %w[red orange yellow green blue indigo violet]}
57
56
  }
58
- return self.flash(presets[preset]) unless presets[preset].nil?
57
+ return flash(presets[preset]) unless presets[preset].nil?
59
58
 
60
- background_color = original_color = style("background-color")
59
+ background_color = original_color = style('background-color')
61
60
  background_color = 'white' if background_color.empty?
62
61
  colors = Array(color).push(background_color)
63
62
 
@@ -123,7 +122,7 @@ module Watir
123
122
  def outer_html
124
123
  element_call { execute_js(:getOuterHtml, @element) }.strip
125
124
  end
126
- alias_method :html, :outer_html
125
+ alias html outer_html
127
126
 
128
127
  #
129
128
  # Returns text content of element.
@@ -149,6 +148,5 @@ module Watir
149
148
  def select_text(str)
150
149
  element_call { execute_js :selectText, @element, str }
151
150
  end
152
-
153
151
  end # JSExecution
154
152
  end # Watir
@@ -1,7 +1,8 @@
1
1
  module Watir
2
2
  module JSSnippets
3
-
4
- private
3
+ #
4
+ # @api private
5
+ #
5
6
 
6
7
  def execute_js(function_name, *arguments)
7
8
  file = File.expand_path("../js_snippets/#{function_name}.js", __FILE__)
@@ -11,6 +12,5 @@ module Watir
11
12
  script = "return (#{js}).apply(null, arguments)"
12
13
  @query_scope.execute_script(script, *arguments)
13
14
  end
14
-
15
15
  end # JSSnippets
16
16
  end # Watir
@@ -0,0 +1,11 @@
1
+ // Original Author: Justin Ko
2
+ // Source: https://stackoverflow.com/questions/12485833/how-do-i-retrieve-list-of-element-attributes-using-watir-webdriver
3
+ function() {
4
+ var s = {};
5
+ var attrs = arguments[0].attributes;
6
+ for (var l = 0; l < attrs.length; ++l) {
7
+ var a = attrs[l];
8
+ s[a.name] = a.value.trim();
9
+ }
10
+ return s;
11
+ }
@@ -1,8 +1,7 @@
1
1
  require 'forwardable'
2
2
 
3
- # TODO - remove this file for future release
3
+ # TODO: - remove this file for future release
4
4
  module Watir
5
-
6
5
  class BaseDecorator
7
6
  def initialize(element, timeout, message = nil)
8
7
  @element = element
@@ -10,18 +9,16 @@ module Watir
10
9
  @message = message
11
10
  end
12
11
 
13
- def respond_to?(*args)
12
+ def respond_to_missing?(*args)
14
13
  @element.respond_to?(*args)
15
14
  end
16
15
 
17
- def method_missing(m, *args, &block)
18
- unless @element.respond_to?(m)
19
- raise NoMethodError, "undefined method `#{m}' for #{@element.inspect}:#{@element.class}"
20
- end
16
+ def method_missing(method, *args, &block)
17
+ return super unless @element.respond_to?(method)
21
18
 
22
19
  Watir::Wait.until(@timeout, @message) { wait_until }
23
20
 
24
- @element.__send__(m, *args, &block)
21
+ @element.__send__(method, *args, &block)
25
22
  end
26
23
  end
27
24
 
@@ -51,7 +48,6 @@ module Watir
51
48
  #
52
49
 
53
50
  class WhenEnabledDecorator < BaseDecorator
54
-
55
51
  private
56
52
 
57
53
  def wait_until
@@ -83,7 +79,7 @@ module Watir
83
79
  def when_present(timeout = nil)
84
80
  warning = '#when_present has been deprecated and is unlikely to be needed; '
85
81
  warning << 'replace this with #wait_until_present if a wait is still needed'
86
- Watir.logger.warn warning, ids: [:when_present, :deprecations]
82
+ Watir.logger.warn warning, ids: %i[when_present deprecations]
87
83
 
88
84
  timeout ||= Watir.default_timeout
89
85
  message = "waiting for #{selector_string} to become present"
@@ -110,7 +106,7 @@ module Watir
110
106
 
111
107
  def when_enabled(timeout = nil)
112
108
  Watir.logger.warn '#when_enabled has been deprecated and is unlikely to be needed',
113
- ids: [:when_enabled, :deprecations]
109
+ ids: %i[when_enabled deprecations]
114
110
 
115
111
  timeout ||= Watir.default_timeout
116
112
  message = "waiting for #{selector_string} to become enabled"
@@ -122,6 +118,5 @@ module Watir
122
118
  WhenEnabledDecorator.new(self, timeout, message)
123
119
  end
124
120
  end
125
-
126
121
  end # EventuallyPresent
127
122
  end # Watir
@@ -27,23 +27,23 @@ module Watir
27
27
  module ClassHelpers
28
28
  def locator_class
29
29
  class_from_string("#{browser.locator_namespace}::#{element_class_name}::Locator") ||
30
- class_from_string("Watir::Locators::#{element_class_name}::Locator") ||
31
- class_from_string("#{browser.locator_namespace}::Element::Locator") ||
32
- Watir::Locators::Element::Locator
30
+ class_from_string("Watir::Locators::#{element_class_name}::Locator") ||
31
+ class_from_string("#{browser.locator_namespace}::Element::Locator") ||
32
+ Watir::Locators::Element::Locator
33
33
  end
34
34
 
35
35
  def element_validator_class
36
36
  class_from_string("#{browser.locator_namespace}::#{element_class_name}::Validator") ||
37
- class_from_string("Watir::Locators::#{element_class_name}::Validator") ||
38
- class_from_string("#{browser.locator_namespace}::Element::Validator") ||
39
- Watir::Locators::Element::Validator
37
+ class_from_string("Watir::Locators::#{element_class_name}::Validator") ||
38
+ class_from_string("#{browser.locator_namespace}::Element::Validator") ||
39
+ Watir::Locators::Element::Validator
40
40
  end
41
41
 
42
42
  def selector_builder_class
43
43
  class_from_string("#{browser.locator_namespace}::#{element_class_name}::SelectorBuilder") ||
44
- class_from_string("Watir::Locators::#{element_class_name}::SelectorBuilder") ||
45
- class_from_string("#{browser.locator_namespace}::Element::SelectorBuilder") ||
46
- Watir::Locators::Element::SelectorBuilder
44
+ class_from_string("Watir::Locators::#{element_class_name}::SelectorBuilder") ||
45
+ class_from_string("#{browser.locator_namespace}::Element::SelectorBuilder") ||
46
+ Watir::Locators::Element::SelectorBuilder
47
47
  end
48
48
 
49
49
  def class_from_string(string)
@@ -57,8 +57,6 @@ module Watir
57
57
  end
58
58
 
59
59
  def build_locator
60
- @query_scope.send :ensure_context
61
-
62
60
  element_validator = element_validator_class.new
63
61
  selector_builder = selector_builder_class.new(@query_scope, @selector.dup, element_class.attribute_list)
64
62
  locator_class.new(@query_scope, @selector.dup, selector_builder, element_validator)
@@ -2,8 +2,6 @@ module Watir
2
2
  module Locators
3
3
  class Button
4
4
  class Locator < Element::Locator
5
-
6
-
7
5
  private
8
6
 
9
7
  def using_selenium(*)
@@ -20,7 +18,8 @@ module Watir
20
18
  copy = selector.dup
21
19
  value = copy.delete(:value)
22
20
 
23
- super(element, copy) && (value === fetch_value(element, :value) || value === fetch_value(element, :text))
21
+ super(element, copy) &&
22
+ (fetch_value(element, :value) =~ /#{value}/ || fetch_value(element, :text) =~ /#{value}/)
24
23
  else
25
24
  super
26
25
  end
@@ -3,23 +3,23 @@ module Watir
3
3
  class Button
4
4
  class SelectorBuilder < Element::SelectorBuilder
5
5
  def build_wd_selector(selectors)
6
- return if selectors.values.any? { |e| e.kind_of? Regexp }
6
+ return if selectors.values.any? { |e| e.is_a? Regexp }
7
7
 
8
- selectors.delete(:tag_name) || raise("internal error: no tag_name?!")
8
+ selectors.delete(:tag_name) || raise('internal error: no tag_name?!')
9
9
 
10
10
  button_attr_exp = xpath_builder.attribute_expression(:button, selectors)
11
-
12
- xpath = ".//button"
11
+
12
+ xpath = './/button'
13
13
  xpath << "[#{button_attr_exp}]" unless button_attr_exp.empty?
14
-
15
- unless selectors[:type] == false
14
+
15
+ unless selectors[:type].eql? false
16
16
  selectors[:type] = Watir::Button::VALID_TYPES if [nil, true].include?(selectors[:type])
17
17
  input_attr_exp = xpath_builder.attribute_expression(:input, selectors)
18
-
19
- xpath << " | .//input"
18
+
19
+ xpath << ' | .//input'
20
20
  xpath << "[#{input_attr_exp}]"
21
21
  end
22
-
22
+
23
23
  p build_wd_selector: xpath if $DEBUG
24
24
 
25
25
  [:xpath, xpath]