jarib-celerity 0.0.5.5 → 0.0.5.6

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.
@@ -3,30 +3,42 @@ module Celerity
3
3
  TAGS = [ Identifier.new('select') ]
4
4
  DEFAULT_HOW = :name
5
5
 
6
+ #
6
7
  # @return [Array<String>] An array of strings representing the text value of the select list's options.
8
+ #
9
+
7
10
  def options
8
11
  assert_exists
9
12
  @object.getOptions.map { |e| e.asText }
10
13
  end
11
-
14
+
15
+ #
12
16
  # @return [Array<String>] An array of strings representing the text value of the currently selected options.
17
+ #
18
+
13
19
  def selected_options
14
20
  assert_exists
15
21
  @object.getSelectedOptions.map { |e| e.asText }
16
22
  end
17
-
23
+
24
+ #
18
25
  # Clear all selected options
19
- # TODO: should update page for each option changed?
26
+ #
27
+
20
28
  def clear
21
29
  # assert_exists called by SelectList#type here
30
+ # TODO: should update page for each option changed?
22
31
  @object.getSelectedOptions.each { |e| e.setSelected(false) } unless type() == 'select-one'
23
32
  end
24
33
 
34
+ #
25
35
  # Select the option(s) matching the given value.
26
36
  # If several options match the value given, all will be selected.
27
37
  #
28
38
  # @param [String, Regexp] value A value.
29
39
  # @raise [Celerity::Exception::NoValueFoundException] if the value does not exist.
40
+ #
41
+
30
42
  def select(value)
31
43
  assert_exists
32
44
  raise NoValueFoundException, "unknown option with value #{value.inspect} for select_list #{@conditions.inspect}" unless include?(value)
@@ -36,40 +48,52 @@ module Celerity
36
48
  end
37
49
  alias_method :set, :select
38
50
 
51
+ #
39
52
  # Returns true if the select list has one or more options matching the given value.
40
53
  #
41
54
  # @param [String, Regexp] value A value.
42
55
  # @return [true, false]
56
+ #
57
+
43
58
  def include?(value)
44
59
  assert_exists
45
60
  !!@object.getOptions.find { |e| matches?(e.asText, value) }
46
61
  end
47
62
 
63
+ #
48
64
  # Returns true if any of the selected options match the given value.
49
65
  #
50
66
  # @param [String, Regexp] value A value.
51
67
  # @raise [Celerity::Exception::UnknownObjectException] if the value does not exist.
52
68
  # @return [true, false]
69
+ #
70
+
53
71
  def selected?(value)
54
72
  assert_exists
55
73
  raise UnknownObjectException, "unknown option with value #{value.inspect} for select_list #{@conditions.inspect}" unless include?(value)
56
74
  !!@object.getOptions.find { |e| matches?(e.asText, value) && e.isSelected }
57
75
  end
58
76
 
77
+ #
59
78
  # Returns 'select-multiple' if the select list has the 'multiple' attribute,
60
79
  # defined, otherwise 'select-one'.
61
80
  #
62
81
  # @return [String]
63
82
  # TODO: Move to watir_compatibility or delete it 2008-05-23 Alexander
83
+ #
84
+
64
85
  def type
65
86
  assert_exists
66
87
  'select-' + (@object.isAttributeDefined('multiple') ? 'multiple' : 'one')
67
88
  end
68
89
 
90
+ #
69
91
  # Returns the value of the first selected option in the select list.
70
92
  # Returns nil if no option is selected.
71
93
  #
72
94
  # @return [String, nil]
95
+ #
96
+
73
97
  def value
74
98
  assert_exists
75
99
  if (optn = @object.getSelectedOptions.to_a.first)
@@ -77,5 +101,5 @@ module Celerity
77
101
  end
78
102
  end
79
103
 
80
- end
81
- end
104
+ end # SelectList
105
+ end # Celerity
@@ -22,26 +22,36 @@ module Celerity
22
22
  end
23
23
  end
24
24
  end
25
-
25
+
26
+ #
26
27
  # @return [Celerity::TableRows]
28
+ #
29
+
27
30
  def rows
28
31
  assert_exists
29
32
  TableRows.new(self, :object, @rows)
30
33
  end
31
-
34
+
35
+ #
32
36
  # @return [Celerity::TableCells]
37
+ #
38
+
33
39
  def cells
34
40
  assert_exists
35
41
  TableCells.new(self, :object, @cells)
36
42
  end
37
-
43
+
44
+ #
38
45
  # Iterates through each row in the table.
39
46
  # @yieldparam [Celerity::TableRow] row A row.
47
+ #
48
+
40
49
  def each
41
50
  assert_exists
42
51
  @rows.each { |row| yield TableRow.new(self, :object, row) }
43
52
  end
44
53
 
54
+ #
45
55
  # Returns the TableRow at the given index (1-indexed).
46
56
  #
47
57
  # browser.table(:foo, 'bar')[1] # => #<TableRow...>
@@ -50,6 +60,8 @@ module Celerity
50
60
  # @param [Fixnum] index The index of the wanted row, 1-indexed.
51
61
  # @raise [Celerity::Exception::UnknownRowException]
52
62
  # @return [Celerity::TableRow]
63
+ #
64
+
53
65
  def child_row(index)
54
66
  assert_exists
55
67
 
@@ -61,6 +73,7 @@ module Celerity
61
73
  end
62
74
  alias_method :[], :child_row
63
75
 
76
+ #
64
77
  # Returns the TableCell at the given index (1-indexed).
65
78
  #
66
79
  # In a 10-column row, table.child_cell[11] will return the first cell on the second row.
@@ -68,6 +81,8 @@ module Celerity
68
81
  # @param [Fixnum] index The index of the wanted cell, 1-indexed.
69
82
  # @raise [Celerity::Exception::UnknownCellException]
70
83
  # @return [Celerity::TableCell]
84
+ #
85
+
71
86
  def child_cell(index)
72
87
  assert_exists
73
88
 
@@ -77,24 +92,33 @@ module Celerity
77
92
  TableCell.new(self, :object, @cells[index - INDEX_OFFSET])
78
93
  end
79
94
 
95
+ #
80
96
  # The number of rows in the table
81
97
  # @return [Fixnum]
98
+ #
99
+
82
100
  def row_count
83
101
  assert_exists
84
102
  @object.getRowCount
85
103
  end
86
-
104
+
105
+ #
87
106
  # Returns the number of columns on the row at the given index. (1-indexed)
88
107
  # Default is the number of columns on the first row
89
108
  # @param [Fixnum] index An index, 1-indexed (optional).
90
109
  # @return [Fixnum]
110
+ #
111
+
91
112
  def column_count(index = INDEX_OFFSET)
92
113
  assert_exists
93
114
  @object.getRow(index - INDEX_OFFSET).getCells.length
94
115
  end
95
116
 
117
+ #
96
118
  # Returns the text of each cell in the the table as a two-dimensional array.
97
119
  # @return [Array<Array<String>>]
120
+ #
121
+
98
122
  def to_a
99
123
  assert_exists
100
124
  # @object.getRows.map do |table_row|
@@ -113,6 +137,5 @@ module Celerity
113
137
  (1..column_count(row_number)).map { |index| self[row_number][index].text }
114
138
  end
115
139
 
116
- end
117
-
118
- end
140
+ end # Table
141
+ end # Celerity
@@ -1,8 +1,8 @@
1
1
  module Celerity
2
2
 
3
3
  class TableCell < Element
4
- include ClickableElement
5
4
  include Celerity::Exception
5
+ include ClickableElement
6
6
  include Container
7
7
 
8
8
  TAGS = [ Identifier.new('td') ]
@@ -21,7 +21,7 @@ module Celerity
21
21
 
22
22
  end
23
23
 
24
- # needs code review regarding attributes/correctness of this
24
+ #-- needs code review regarding attributes/correctness of this
25
25
  class Th < TableCell
26
26
  TAGS = [ Identifier.new('th')]
27
27
  end
@@ -11,12 +11,19 @@ module Celerity
11
11
  @cells = @object.getCells if @object
12
12
  end
13
13
 
14
- # Yields each TableCell in this row cell to the given block.
14
+ #
15
+ # Yields each TableCell in this row to the given block.
16
+ #
17
+
15
18
  def each
16
19
  assert_exists
17
20
  @cells.each { |cell| yield TableCell.new(self, :object, cell) }
18
21
  end
19
22
 
23
+ #
24
+ # Get the child cell at the given index
25
+ #
26
+
20
27
  def child_cell(index)
21
28
  assert_exists
22
29
 
@@ -28,10 +35,14 @@ module Celerity
28
35
  end
29
36
  alias_method :[], :child_cell
30
37
 
38
+ #
39
+ # Number of cells in this row.
40
+ #
41
+
31
42
  def column_count
32
43
  assert_exists
33
44
  @cells.length
34
45
  end
35
46
 
36
- end
37
- end
47
+ end # TableRow
48
+ end # Celerity
@@ -1,32 +1,44 @@
1
1
  module Celerity
2
+
2
3
  #
3
4
  # Class representing text field elements
4
5
  #
5
6
  # This class is the main class for Text Fields
6
7
  # Normally a user would not need to create this object as it is returned by the Watir::Container#text_field method
8
+ #
9
+
7
10
  class TextField < InputElement
8
11
  NON_TEXT_TYPES = %w[file radio checkbox submit reset image button hidden]
9
12
  TAGS = [ Identifier.new('textarea'),
10
13
  Identifier.new('input', :type => ["text", "password", /^(?!(#{ Regexp.union(*NON_TEXT_TYPES) })$)/]) ]
11
14
  DEFAULT_HOW = :name
12
-
15
+
16
+ #
13
17
  # Clear the text field.
18
+ #
19
+
14
20
  def clear
15
21
  assert_exists
16
22
  insert_string ''
17
23
  end
18
-
24
+
25
+ #
19
26
  # Set the text field to the given value.
20
27
  # This ensures execution of JavaScript events (onkeypress etc.), but is slower than +value=+
28
+ #
29
+
21
30
  def set(value)
22
31
  assert_enabled
23
32
  assert_not_readonly
24
33
  clear
25
34
  type_string(value.to_s)
26
35
  end
27
-
36
+
37
+ #
28
38
  # This directly sets the text field to the given value, skipping exectuion of JavaScript events.
29
39
  # Use +set+ if you want to run events on text fields.
40
+ #
41
+
30
42
  def value=(value)
31
43
  assert_enabled
32
44
  assert_not_readonly
@@ -36,8 +48,11 @@ module Celerity
36
48
 
37
49
  value
38
50
  end
39
-
51
+
52
+ #
40
53
  # Returns the text in the text field.
54
+ #
55
+
41
56
  def value
42
57
  assert_exists
43
58
  case @object.getTagName
@@ -48,14 +63,18 @@ module Celerity
48
63
  end
49
64
  end
50
65
  alias_method :get_contents, :value
51
-
66
+
67
+ #
52
68
  # Append the given value to the text in the text field.
69
+ #
70
+
53
71
  def append(value)
54
72
  assert_enabled
55
73
  assert_not_readonly
56
74
  type_string(value)
57
75
  end
58
76
 
77
+
59
78
  def type
60
79
  assert_exists
61
80
  type = @object.getAttributeValue('type')
@@ -67,8 +86,11 @@ module Celerity
67
86
  end
68
87
  end
69
88
 
89
+ #
70
90
  # This bascially just moves the text to the other text field using TextField#append
71
- # Should check if the HtmlUnit API supports some kind of dragging.
91
+ # TODO: check if HtmlUnit supports some kind of dragging.
92
+ #
93
+
72
94
  def drag_contents_to(how, what)
73
95
  assert_exists # assert_enabled?
74
96
  val = self.value
@@ -76,6 +98,10 @@ module Celerity
76
98
  @container.text_field(how, what).append(val)
77
99
  end
78
100
 
101
+ #
102
+ # Check if the given text fields contains the given String or Regexp.
103
+ #
104
+
79
105
  def contains_text(expected_text)
80
106
  assert_exists
81
107
 
@@ -89,9 +115,12 @@ module Celerity
89
115
  end
90
116
  end
91
117
 
118
+ #
92
119
  # A boolean version of TextField#contains_text
93
120
  # @param [String, Regexp] expected_text The text to look for.
94
121
  # @return [boolean]
122
+ #
123
+
95
124
  def verify_contains(expected)
96
125
  # assert_exists called by contains_text
97
126
  !!contains_text(expected)
@@ -115,13 +144,21 @@ module Celerity
115
144
  raise "unknown tag name #{@object.getTagName.inspect} for #{self.class}"
116
145
  end
117
146
  end
118
- end
147
+
148
+ end # TextField
119
149
 
120
- # this class can be used to access hidden field objects
150
+ #
151
+ # This class can be used to access hidden field objects
121
152
  # Normally a user would not need to create this object as it is returned by the Celerity::Container#hidden method
153
+ #
154
+
122
155
  class Hidden < TextField
123
156
  TAGS = [ Identifier.new('input', :type => %w[hidden]) ]
124
157
  DEFAULT_HOW = :name
158
+
159
+ def visible?
160
+ false
161
+ end
125
162
  end
126
163
 
127
- end
164
+ end # Celerity
@@ -1,40 +1,77 @@
1
1
  module Celerity
2
2
  module Exception
3
-
3
+
4
+ #
4
5
  # Superclass for all Celerity exceptions.
6
+ #
7
+
5
8
  class CelerityException < StandardError; end
6
9
 
10
+ #
7
11
  # This exception is thrown if an attempt is made to access an object that doesn't exist
8
- class UnknownObjectException < CelerityException; end
12
+ #
9
13
 
14
+ class UnknownObjectException < CelerityException; end
15
+
16
+ #
10
17
  # This exception is thrown if an attempt is made to access an object that is in a disabled state
18
+ #
19
+
11
20
  class ObjectDisabledException < CelerityException; end
12
21
 
22
+ #
13
23
  # This exception is thrown if an attempt is made to access a frame that cannot be found
24
+ #
25
+
14
26
  class UnknownFrameException < CelerityException; end
15
27
 
28
+ #
16
29
  # This exception is thrown if an attempt is made to access a form that cannot be found
30
+ #
31
+
17
32
  class UnknownFormException < CelerityException; end
18
33
 
34
+ #
19
35
  # This exception is thrown if an attempt is made to access an object that is in a read-only state
36
+ #
37
+
20
38
  class ObjectReadOnlyException < CelerityException; end
21
39
 
40
+ #
22
41
  # This exception is thrown if an attempt is made to access an object when the specified value cannot be found
42
+ #
43
+
23
44
  class NoValueFoundException < CelerityException; end
24
45
 
46
+ #
25
47
  # This exception gets raised if the how argument is wrong.
48
+ #
49
+
26
50
  class MissingWayOfFindingObjectException < CelerityException; end
27
51
 
52
+ #
28
53
  # This exception is raised if an attempt is made to access a table row that doesn't exist
29
- class UnknownRowException < CelerityException; end
54
+ #
30
55
 
56
+ class UnknownRowException < CelerityException; end
57
+
58
+ #
31
59
  # This exception is raised if an attempt is made to access a table cell that doesn't exist
60
+ #
61
+
32
62
  class UnknownCellException < CelerityException; end
33
63
 
64
+ #
34
65
  # This exception is thrown if an http error, such as a 404, 500 etc is encountered while navigating
35
- class NavigationException < CelerityException; end
66
+ #
36
67
 
68
+ class NavigationException < CelerityException; end
69
+
70
+ #
37
71
  # This exception is thrown if an unexpected content type is returned by the server.
72
+ #
73
+
38
74
  class UnexpectedPageException < CelerityException; end
39
- end
40
- end
75
+
76
+ end # Exception
77
+ end # Celerity
@@ -16,7 +16,15 @@ class String # :nodoc:
16
16
  end
17
17
 
18
18
  module Celerity
19
+
20
+ #
19
21
  # Experimental - generate a method definition for accessing elements on the current page.
22
+ #
23
+ # Usage:
24
+ #
25
+ # MethodGenerator.new(browser, opts).parse
26
+ #
27
+ #
20
28
  class MethodGenerator
21
29
 
22
30
  ELEMENTS = %w[text_field select_list radio checkbox button].map { |e| e.to_sym }
@@ -135,13 +143,17 @@ module Celerity
135
143
  end # MethodGenerator
136
144
 
137
145
  class Browser
146
+
147
+ #
138
148
  # Experimental - generate a method definition for accessing elements on the current page
139
149
  # Not loaded by default - need to require 'celerity/extra/method_generator'
150
+ #
151
+
140
152
  def generate_method(opts = {})
141
153
  MethodGenerator.new(self, opts).parse
142
154
  end
155
+
143
156
  end # Browser
144
-
145
157
  end # Celerity
146
158
 
147
159
 
@@ -27,7 +27,6 @@ module Java::OrgW3cDom::NamedNodeMap
27
27
  end
28
28
  end
29
29
 
30
- # this will be added in JRuby 1.1.6
31
30
  module Java::JavaLang::Iterable
32
31
  include Enumerable
33
32
 
@@ -39,3 +38,9 @@ module Java::JavaLang::Iterable
39
38
  end
40
39
 
41
40
 
41
+ class Java::ComGargoylesoftwareHtmlunitHtml::HtmlPage
42
+ def inspect
43
+ '#<HtmlPage:0x%s(%s)>' % [self.hash.to_s(16), getWebResponse.getUrl.toString]
44
+ end
45
+ end
46
+
@@ -1,7 +1,9 @@
1
1
  module Celerity
2
2
 
3
- # This class is used to wrap some of the various listeners available
4
- # from HtmlUnit's WebClient.
3
+ #
4
+ # This class is used to wrap some of the listeners available from HtmlUnit's WebClient.
5
+ #
6
+
5
7
  class Listener
6
8
  include com.gargoylesoftware.htmlunit.AlertHandler
7
9
  include com.gargoylesoftware.htmlunit.ConfirmHandler
@@ -16,9 +18,12 @@ module Celerity
16
18
  @webclient = webclient
17
19
  @procs = Hash.new { |h, k| h[k] = [] }
18
20
  end
19
-
21
+
22
+ #
20
23
  # Add a listener block for one of the available types.
21
24
  # @see Celerity::Browser#add_listener
25
+ #
26
+
22
27
  def add_listener(type, &block)
23
28
  case type
24
29
  when :status
@@ -58,46 +63,70 @@ module Celerity
58
63
  raise TypeError, "must give proc or index"
59
64
  end
60
65
  end
61
-
66
+
67
+ #
62
68
  # interface StatusHandler
69
+ #
70
+
63
71
  def statusMessageChanged(page, message)
64
72
  @procs[:status].each { |h| h.call(page, message) }
65
73
  end
66
-
74
+
75
+ #
67
76
  # interface AlertHandler
77
+ #
78
+
68
79
  def handleAlert(page, message)
69
80
  @procs[:alert].each { |h| h.call(page, message) }
70
81
  end
71
-
82
+
83
+ #
72
84
  # interface ConfirmHandler
85
+ #
86
+
73
87
  def handleConfirm(page, message)
74
88
  @procs[:confirm].each { |h| h.call(page, message) }
75
89
  end
76
90
 
91
+ #
77
92
  # interface AttachmentHandler
93
+ #
94
+
78
95
  def handleAttachment(page)
79
96
  @procs[:attachment].each { |h| h.call(page) }
80
97
  end
81
-
98
+
99
+ #
82
100
  # interface PromptHandler
101
+ #
102
+
83
103
  def handlePrompt(page, message)
84
104
  @procs[:prompt].each { |h| h.call(page, message) }
85
105
  end
86
-
106
+
107
+ #
87
108
  # interface WebWindowListener
109
+ #
110
+
88
111
  def webWindowClosed(web_window_event)
89
112
  @procs[:web_window_event].each { |h| h.call(web_window_event) }
90
113
  end
91
114
  alias_method :webWindowOpened, :webWindowClosed
92
115
  alias_method :webWindowContentChanged, :webWindowClosed
93
116
 
117
+ #
94
118
  # interface HTMLParserListener
119
+ #
120
+
95
121
  def error(message, url, line, column, key)
96
122
  @procs[:html_parser].each { |h| h.call(message, url, line, column, key) }
97
123
  end
98
124
  alias_method :warning, :error
99
125
 
126
+ #
100
127
  # interface IncorrectnessListener
128
+ #
129
+
101
130
  def notify(message, origin)
102
131
  @procs[:incorrectness].each { |h| h.call(message, origin) }
103
132
  end
data/lib/celerity/util.rb CHANGED
@@ -51,8 +51,11 @@ module Celerity
51
51
  HtmlUnit2CelerityElement[klass]
52
52
  end
53
53
 
54
+ #
54
55
  # HtmlUnit will recognize most common file types, but custom ones can be added here.
55
56
  # Used for FileField uploads.
57
+ #
58
+
56
59
  ContentTypes = {
57
60
  ".bmp" => "image/x-ms-bmp",
58
61
  ".doc" => "application/msword",
@@ -3,7 +3,7 @@ module Celerity #:nodoc:
3
3
  MAJOR = 0
4
4
  MINOR = 0
5
5
  TINY = 5
6
- PATCH = 5 # Set to nil for official release
6
+ PATCH = 6 # Set to nil for official release
7
7
 
8
8
  STRING = [MAJOR, MINOR, TINY, PATCH].compact.join('.')
9
9
  end