watir-webdriver 0.6.1 → 0.6.2

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 (59) hide show
  1. data/.gitignore +2 -1
  2. data/.travis.yml +1 -0
  3. data/CHANGES.md +1693 -0
  4. data/Gemfile +0 -1
  5. data/Rakefile +22 -0
  6. data/lib/watir-webdriver/alert.rb +46 -0
  7. data/lib/watir-webdriver/aliases.rb +2 -2
  8. data/lib/watir-webdriver/atoms.rb +2 -2
  9. data/lib/watir-webdriver/atoms/README +0 -1
  10. data/lib/watir-webdriver/browser.rb +195 -14
  11. data/lib/watir-webdriver/cell_container.rb +14 -2
  12. data/lib/watir-webdriver/container.rb +22 -0
  13. data/lib/watir-webdriver/cookies.rb +41 -0
  14. data/lib/watir-webdriver/element_collection.rb +13 -3
  15. data/lib/watir-webdriver/elements/button.rb +3 -1
  16. data/lib/watir-webdriver/elements/checkbox.rb +8 -6
  17. data/lib/watir-webdriver/elements/dlist.rb +4 -4
  18. data/lib/watir-webdriver/elements/element.rb +153 -28
  19. data/lib/watir-webdriver/elements/file_field.rb +6 -4
  20. data/lib/watir-webdriver/elements/generated.rb +12 -8
  21. data/lib/watir-webdriver/elements/image.rb +10 -5
  22. data/lib/watir-webdriver/elements/input.rb +6 -0
  23. data/lib/watir-webdriver/elements/option.rb +28 -2
  24. data/lib/watir-webdriver/elements/radio.rb +5 -1
  25. data/lib/watir-webdriver/elements/select.rb +11 -9
  26. data/lib/watir-webdriver/elements/table.rb +8 -1
  27. data/lib/watir-webdriver/elements/table_cell.rb +3 -3
  28. data/lib/watir-webdriver/elements/table_row.rb +0 -1
  29. data/lib/watir-webdriver/elements/table_section.rb +8 -2
  30. data/lib/watir-webdriver/elements/text_area.rb +2 -2
  31. data/lib/watir-webdriver/elements/text_field.rb +2 -2
  32. data/lib/watir-webdriver/extensions/alerts.rb +3 -3
  33. data/lib/watir-webdriver/extensions/nokogiri.rb +2 -2
  34. data/lib/watir-webdriver/extensions/select_text.rb +2 -2
  35. data/lib/watir-webdriver/has_window.rb +23 -1
  36. data/lib/watir-webdriver/html.rb +2 -0
  37. data/lib/watir-webdriver/html/visitor.rb +2 -2
  38. data/lib/watir-webdriver/locators/element_locator.rb +8 -0
  39. data/lib/watir-webdriver/locators/text_field_locator.rb +1 -1
  40. data/lib/watir-webdriver/row_container.rb +11 -3
  41. data/lib/watir-webdriver/screenshot.rb +11 -0
  42. data/lib/watir-webdriver/user_editable.rb +10 -4
  43. data/lib/watir-webdriver/version.rb +2 -2
  44. data/lib/watir-webdriver/wait.rb +32 -11
  45. data/lib/watir-webdriver/window.rb +104 -1
  46. data/lib/watir-webdriver/xpath_support.rb +4 -0
  47. data/lib/yard/handlers/watir.rb +1 -1
  48. data/spec/element_locator_spec.rb +14 -1
  49. data/spec/html/clicks.html +1 -1
  50. data/spec/implementation.rb +29 -6
  51. data/spec/wait_spec.rb +2 -2
  52. data/support/travis.sh +5 -3
  53. data/support/version_differ.rb +59 -0
  54. data/watir-webdriver.gemspec +4 -3
  55. metadata +146 -149
  56. data/spec/alert_spec.rb +0 -91
  57. data/spec/html/alerts.html +0 -12
  58. data/spec/screenshot_spec.rb +0 -25
  59. data/support/html5.html +0 -102577
@@ -1,11 +1,11 @@
1
1
  # encoding: utf-8
2
2
  module Watir
3
3
  class FileField < Input
4
+
4
5
  #
5
6
  # Set the file field to the given path
6
7
  #
7
8
  # @param [String] a path
8
- #
9
9
  # @raise [Errno::ENOENT] if the file doesn't exist
10
10
  #
11
11
 
@@ -15,16 +15,18 @@ module Watir
15
15
  end
16
16
 
17
17
  #
18
- # Set the file field to the given path
18
+ # Sets the file field to the given path
19
19
  #
20
- # @param [String] a path
20
+ # @param [String] path
21
21
  #
22
+
22
23
  def value=(path)
23
24
  assert_exists
24
25
  path = path.gsub(File::SEPARATOR, File::ALT_SEPARATOR) if File::ALT_SEPARATOR
25
26
  @element.send_keys path
26
27
  end
27
- end
28
+
29
+ end # FileField
28
30
 
29
31
  module Container
30
32
  def file_field(*args)
@@ -62,13 +62,17 @@ module Watir
62
62
 
63
63
 
64
64
 
65
+
66
+
67
+
68
+
65
69
 
66
70
 
67
71
 
68
72
 
69
73
 
70
74
  class HTMLElement < Element
71
- attributes(:string => [:access_key, :access_key_label, :class_name, :command_icon, :command_label, :command_type, :content_editable, :dir, :item_id, :item_value, :lang, :title], :token_list => [:class_list, :dropzone, :item_prop, :item_ref, :item_type], :bool => [:command_checked, :command_disabled, :command_hidden, :draggable, :hidden, :content_editable, :item_scope, :spellcheck, :translate], :html_element => [:context_menu], :string_map => [:dataset], :function => [:onabort, :onblur, :oncancel, :oncanplay, :oncanplaythrough, :onchange, :onclick, :onclose, :oncontextmenu, :oncuechange, :ondblclick, :ondrag, :ondragend, :ondragenter, :ondragleave, :ondragover, :ondragstart, :ondrop, :ondurationchange, :onemptied, :onended, :onerror, :onfocus, :oninput, :oninvalid, :onkeydown, :onkeypress, :onkeyup, :onload, :onloadeddata, :onloadedmetadata, :onloadstart, :onmousedown, :onmousemove, :onmouseout, :onmouseover, :onmouseup, :onmousewheel, :onpause, :onplay, :onplaying, :onprogress, :onratechange, :onreset, :onscroll, :onseeked, :onseeking, :onselect, :onshow, :onstalled, :onsubmit, :onsuspend, :ontimeupdate, :onvolumechange, :onwaiting], :properties_collection => [:properties], :style => [:style], :int => [:tab_index])
75
+ attributes(:string => [:access_key, :access_key_label, :command_icon, :command_label, :command_type, :content_editable, :dir, :item_id, :item_value, :lang, :title], :bool => [:command_checked, :command_disabled, :command_hidden, :draggable, :hidden, :content_editable, :item_scope, :spellcheck, :translate], :html_element => [:context_menu], :string_map => [:dataset], :token_list => [:dropzone, :item_prop, :item_ref, :item_type], :function => [:onabort, :onblur, :oncancel, :oncanplay, :oncanplaythrough, :onchange, :onclick, :onclose, :oncontextmenu, :oncuechange, :ondblclick, :ondrag, :ondragend, :ondragenter, :ondragleave, :ondragover, :ondragstart, :ondrop, :ondurationchange, :onemptied, :onended, :onerror, :onfocus, :oninput, :oninvalid, :onkeydown, :onkeypress, :onkeyup, :onload, :onloadeddata, :onloadedmetadata, :onloadstart, :onmousedown, :onmousemove, :onmouseout, :onmouseover, :onmouseup, :onmousewheel, :onpause, :onplay, :onplaying, :onprogress, :onratechange, :onreset, :onscroll, :onseeked, :onseeking, :onselect, :onshow, :onstalled, :onsubmit, :onsuspend, :ontimeupdate, :onvolumechange, :onwaiting], :properties_collection => [:properties], :style => [:style], :int => [:tab_index])
72
76
  end
73
77
  class HTMLElementCollection < ElementCollection
74
78
  def element_class
@@ -200,7 +204,7 @@ module Watir
200
204
  end
201
205
  end
202
206
  class TextArea < HTMLElement
203
- attributes(:bool => [:autofocus, :disabled, :read_only, :required, :will_validate], :int => [:cols, :max_length, :rows, :selection_end, :selection_start, :text_length], :string => [:default_value, :dir_name, :name, :placeholder, :selection_direction, :type, :validation_message, :validity, :value, :wrap], :html_element => [:form], :list => [:labels])
207
+ attributes(:string => [:autocomplete, :default_value, :dir_name, :input_mode, :name, :placeholder, :selection_direction, :type, :validation_message, :validity, :value, :wrap], :bool => [:autofocus, :disabled, :read_only, :required, :will_validate], :int => [:cols, :max_length, :rows, :selection_end, :selection_start, :text_length], :html_element => [:form], :list => [:labels])
204
208
  end
205
209
  class TextAreaCollection < ElementCollection
206
210
  def element_class
@@ -248,7 +252,7 @@ module Watir
248
252
  end
249
253
  end
250
254
  class Input < HTMLElement
251
- attributes(:string => [:accept, :alt, :autocomplete, :default_value, :dir_name, :form_action, :form_enctype, :form_method, :form_target, :max, :min, :name, :pattern, :placeholder, :selection_direction, :src, :step, :type, :validation_message, :validity, :value], :bool => [:autofocus, :checked, :default_checked, :disabled, :form_no_validate, :indeterminate, :multiple, :read_only, :required, :will_validate], :list => [:files, :labels], :html_element => [:form, :list], :int => [:height, :max_length, :selection_end, :selection_start, :size, :width], :date => [:value_as_date], :float => [:value_as_number])
255
+ attributes(:string => [:accept, :alt, :autocomplete, :default_value, :dir_name, :form_action, :form_enctype, :form_method, :form_target, :input_mode, :max, :min, :name, :pattern, :placeholder, :selection_direction, :src, :step, :type, :validation_message, :validity, :value], :bool => [:autofocus, :checked, :default_checked, :disabled, :form_no_validate, :indeterminate, :multiple, :read_only, :required, :will_validate], :list => [:files, :labels], :html_element => [:form, :list], :int => [:height, :max_length, :selection_end, :selection_start, :size, :width], :date => [:value_as_date], :float => [:value_as_number])
252
256
  end
253
257
  class InputCollection < ElementCollection
254
258
  def element_class
@@ -308,7 +312,7 @@ module Watir
308
312
  end
309
313
  # do nothing
310
314
  class TableHeaderCell < TableCell
311
- attributes(:string => [:scope])
315
+ attributes(:string => [:abbr, :scope])
312
316
  end
313
317
  class TableHeaderCellCollection < ElementCollection
314
318
  def element_class
@@ -372,7 +376,7 @@ module Watir
372
376
  end
373
377
  # do nothing
374
378
  class Table < HTMLElement
375
- attributes(:string => [:border], :html_element => [:caption, :t_foot, :t_head], :html_collection => [:rows, :t_bodies])
379
+ attributes(:html_element => [:caption, :t_foot, :t_head], :html_collection => [:rows, :t_bodies])
376
380
  end
377
381
  class TableCollection < ElementCollection
378
382
  def element_class
@@ -380,7 +384,7 @@ module Watir
380
384
  end
381
385
  end
382
386
  class Table < HTMLElement
383
- attributes(:string => [:align, :bg_color, :cell_padding, :cell_spacing, :frame, :rules, :summary, :width])
387
+ attributes(:string => [:align, :bg_color, :border, :cell_padding, :cell_spacing, :frame, :rules, :summary, :width])
384
388
  end
385
389
  # do nothing
386
390
  class Area < HTMLElement
@@ -500,7 +504,7 @@ module Watir
500
504
  end
501
505
  # do nothing
502
506
  class Image < HTMLElement
503
- attributes(:string => [:alt, :cross_origin, :src, :use_map], :bool => [:complete, :map], :int => [:height, :natural_height, :natural_width, :width])
507
+ attributes(:string => [:alt, :cross_origin, :src, :srcset, :use_map], :bool => [:complete, :map], :int => [:height, :natural_height, :natural_width, :width])
504
508
  end
505
509
  class ImageCollection < ElementCollection
506
510
  def element_class
@@ -1170,7 +1174,7 @@ module Watir
1170
1174
  # @return [DataCollection]
1171
1175
  #
1172
1176
 
1173
- def data(*args)
1177
+ def datas(*args)
1174
1178
  DataCollection.new(self, extract_selector(args).merge(:tag_name => "data"))
1175
1179
  end
1176
1180
 
@@ -2,6 +2,12 @@
2
2
  module Watir
3
3
  class Image < HTMLElement
4
4
 
5
+ #
6
+ # Returns true if image is loaded.
7
+ #
8
+ # @return [Boolean]
9
+ #
10
+
5
11
  def loaded?
6
12
  return false unless complete?
7
13
 
@@ -12,9 +18,9 @@ module Watir
12
18
  end
13
19
 
14
20
  #
15
- # returns the image's width in pixels
21
+ # Returns the image's width in pixels.
16
22
  #
17
- # @return [Integer] width
23
+ # @return [Fixnum] width
18
24
  #
19
25
 
20
26
  def width
@@ -23,9 +29,9 @@ module Watir
23
29
  end
24
30
 
25
31
  #
26
- # returns the image's height in pixels
32
+ # Returns the image's height in pixels.
27
33
  #
28
- # @return [Integer] height
34
+ # @return [Fixnum] width
29
35
  #
30
36
 
31
37
  def height
@@ -54,5 +60,4 @@ module Watir
54
60
  alias_method :image, :img
55
61
  alias_method :images, :imgs
56
62
  end # Container
57
-
58
63
  end # Watir
@@ -4,6 +4,12 @@ module Watir
4
4
 
5
5
  alias_method :readonly?, :read_only?
6
6
 
7
+ #
8
+ # Returns true if input is enabled.
9
+ #
10
+ # @return [Boolean]
11
+ #
12
+
7
13
  def enabled?
8
14
  !disabled?
9
15
  end
@@ -8,7 +8,10 @@ module Watir
8
8
  class Option < HTMLElement
9
9
 
10
10
  #
11
- # Select this option
11
+ # Selects this option.
12
+ #
13
+ # @example
14
+ # browser.select(:id => "foo").options.first.select
12
15
  #
13
16
 
14
17
  def select
@@ -17,7 +20,10 @@ module Watir
17
20
  end
18
21
 
19
22
  #
20
- # Toggle the selected state of this option
23
+ # Toggles the selected state of this option.
24
+ #
25
+ # @example
26
+ # browser.select(:id => "foo").options.first.toggle
21
27
  #
22
28
 
23
29
  def toggle
@@ -25,6 +31,13 @@ module Watir
25
31
  @element.click
26
32
  end
27
33
 
34
+ #
35
+ # Clears (i.e. toggles selected state) option.
36
+ #
37
+ # @example
38
+ # browser.select(:id => "foo").options.first.clear
39
+ #
40
+
28
41
  def clear
29
42
  @element.click if selected?
30
43
  end
@@ -32,12 +45,25 @@ module Watir
32
45
  #
33
46
  # Is this option selected?
34
47
  #
48
+ # @return [Boolean]
49
+ #
35
50
 
36
51
  def selected?
37
52
  assert_exists
38
53
  @element.selected?
39
54
  end
40
55
 
56
+ #
57
+ # Returns the text of option.
58
+ #
59
+ # Note that the text is either one of the following respectively:
60
+ # * label attribute
61
+ # * text attribute
62
+ # * inner element text
63
+ #
64
+ # @return [String]
65
+ #
66
+
41
67
  def text
42
68
  assert_exists
43
69
 
@@ -1,8 +1,9 @@
1
1
  # encoding: utf-8
2
2
  module Watir
3
3
  class Radio < Input
4
+
4
5
  #
5
- # Select this radio button.
6
+ # Selects this radio button.
6
7
  #
7
8
 
8
9
  def set
@@ -15,11 +16,14 @@ module Watir
15
16
  #
16
17
  # Is this radio set?
17
18
  #
19
+ # @return [Boolean]
20
+ #
18
21
 
19
22
  def set?
20
23
  assert_exists
21
24
  @element.selected?
22
25
  end
26
+
23
27
  end # Radio
24
28
 
25
29
  module Container
@@ -14,7 +14,7 @@ module Watir
14
14
  end
15
15
 
16
16
  #
17
- # Clear all selected options
17
+ # Clears all selected options.
18
18
  #
19
19
 
20
20
  def clear
@@ -28,7 +28,7 @@ module Watir
28
28
  end
29
29
 
30
30
  #
31
- # Get all the options in the select list
31
+ # Gets all the options in the select list
32
32
  #
33
33
  # @return [Watir::OptionCollection]
34
34
  #
@@ -41,7 +41,7 @@ module Watir
41
41
  #
42
42
  # Returns true if the select list has one or more options where text or label matches the given value.
43
43
  #
44
- # @param [String, Regexp] value A value.
44
+ # @param [String, Regexp] str_or_rx
45
45
  # @return [Boolean]
46
46
  #
47
47
 
@@ -55,7 +55,7 @@ module Watir
55
55
  # Select the option(s) whose text or label matches the given string.
56
56
  # If this is a multi-select and several options match the value given, all will be selected.
57
57
  #
58
- # @param [String, Regexp] value A value.
58
+ # @param [String, Regexp] str_or_rx
59
59
  # @raise [Watir::Exception::NoValueFoundException] if the value does not exist.
60
60
  # @return [String] The text of the option selected. If multiple options match, returns the first match.
61
61
  #
@@ -69,7 +69,7 @@ module Watir
69
69
  #
70
70
  # @see +select+
71
71
  #
72
- # @param [String, Regexp] value A value.
72
+ # @param [String, Regexp] str_or_rx
73
73
  # @raise [Watir::Exception::NoValueFoundException] if the value does not exist.
74
74
  # @return [String] The option selected. If multiple options match, returns the first match
75
75
  #
@@ -79,10 +79,10 @@ module Watir
79
79
  end
80
80
 
81
81
  #
82
- # Returns true if any of the selected options' text or label match the given value.
82
+ # Returns true if any of the selected options' text or label matches the given value.
83
83
  #
84
- # @param [String, Regexp] value A value.
85
- # @raise [Watir::Exception::UnknownObjectException] if the value does not exist.
84
+ # @param [String, Regexp] str_or_rx
85
+ # @raise [Watir::Exception::UnknownObjectException] if the options do not exist
86
86
  # @return [Boolean]
87
87
  #
88
88
 
@@ -111,7 +111,9 @@ module Watir
111
111
 
112
112
 
113
113
  #
114
- # @return [Array<Watir::Option>] An array of Watir::Option elements that are currently selected.
114
+ # Returns an array of currently selected options.
115
+ #
116
+ # @return [Array<Watir::Option>]
115
117
  #
116
118
 
117
119
  def selected_options
@@ -4,6 +4,12 @@ module Watir
4
4
  class Table < HTMLElement
5
5
  include RowContainer
6
6
 
7
+ #
8
+ # Represents table rows as hashes
9
+ #
10
+ # @return [Array<Hash>]
11
+ #
12
+
7
13
  def hashes
8
14
  all_rows = rows.to_a
9
15
  header_row = all_rows.shift or raise Exception::Error, "no rows in table"
@@ -24,8 +30,9 @@ module Watir
24
30
  end
25
31
 
26
32
  #
27
- # Get the n'th row of this table.
33
+ # Returns row of this table with given index.
28
34
  #
35
+ # @param [Fixnum] idx
29
36
  # @return Watir::TableRow
30
37
  #
31
38
 
@@ -11,7 +11,7 @@ module Watir
11
11
  value = attribute_value :colspan
12
12
  value ? Integer(value) : 1
13
13
  end
14
- end
14
+ end # TableCell
15
15
 
16
16
  class TableCellCollection < ElementCollection
17
17
  attr_writer :locator_class
@@ -32,5 +32,5 @@ module Watir
32
32
  elements
33
33
  end
34
34
 
35
- end
36
- end
35
+ end # TableCellCollection
36
+ end # Watir
@@ -22,7 +22,6 @@ module Watir
22
22
  end
23
23
  end # TableRow
24
24
 
25
-
26
25
  class TableRowCollection < ElementCollection
27
26
  attr_writer :locator_class
28
27
 
@@ -2,8 +2,14 @@ module Watir
2
2
  class TableSection < HTMLElement
3
3
  include RowContainer
4
4
 
5
+ #
6
+ # Returns table section row with given index.
7
+ #
8
+ # @param [Fixnum] idx
9
+ #
10
+
5
11
  def [](idx)
6
12
  row(:index => idx)
7
13
  end
8
- end
9
- end
14
+ end # TableSection
15
+ end # Watir
@@ -1,5 +1,5 @@
1
1
  module Watir
2
2
  class TextArea < HTMLElement
3
3
  include UserEditable
4
- end
5
- end
4
+ end # TextArea
5
+ end # Watir
@@ -18,7 +18,7 @@ module Watir
18
18
  selector[:tag_name] = "input or textarea"
19
19
  selector.inspect
20
20
  end
21
- end
21
+ end # TextField
22
22
 
23
23
  module Container
24
24
  def text_field(*args)
@@ -41,4 +41,4 @@ module Watir
41
41
  TextField
42
42
  end
43
43
  end # TextFieldCollection
44
- end
44
+ end # Watir
@@ -22,7 +22,7 @@ module Watir
22
22
  #
23
23
 
24
24
  def alert(&blk)
25
- warn 'AlertHelper is deprecated. Use the new Alert API instead (e.g. browser.alert.close)'
25
+ warn 'AlertHelper is deprecated. Use the new Alert API instead (e.g. browser.alert.ok)'
26
26
  execute_script "window.alert = function(msg) { window.__lastWatirAlert = msg; }"
27
27
  yield
28
28
  execute_script "return window.__lastWatirAlert"
@@ -39,7 +39,7 @@ module Watir
39
39
  # end #=> "the confirm message"
40
40
 
41
41
  def confirm(bool, &blk)
42
- warn 'AlertHelper is deprecated. Use the new Alert API instead (e.g. browser.confirm.close)'
42
+ warn 'AlertHelper is deprecated. Use the new Alert API instead (e.g. browser.alert.ok)'
43
43
  execute_script "window.confirm = function(msg) { window.__lastWatirConfirm = msg; return #{!!bool} }"
44
44
  yield
45
45
  execute_script "return window.__lastWatirConfirm"
@@ -57,7 +57,7 @@ module Watir
57
57
  #
58
58
 
59
59
  def prompt(answer, &blk)
60
- warn 'AlertHelper is deprecated. Use the new Alert API instead (e.g. browser.prompt.close)'
60
+ warn 'AlertHelper is deprecated. Use the new Alert API instead (e.g. browser.alert.ok)'
61
61
  execute_script "window.prompt = function(text, value) { window.__lastWatirPrompt = { message: text, default_value: value }; return #{MultiJson.encode answer}; }"
62
62
  yield
63
63
  result = execute_script "return window.__lastWatirPrompt"
@@ -10,5 +10,5 @@ module Watir
10
10
  doc.inner_text
11
11
  end
12
12
 
13
- end
14
- end
13
+ end # Browser
14
+ end # Watir