awetestlib 0.1.13 → 0.1.14

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,42 +1,10 @@
1
1
  module Awetestlib
2
2
  module Regression
3
+ # Backward compatible methods and alias to support earlier versions of the Awetest DSL.
4
+ # These are deprecated in favor of the corresponding methods in the module name under which they are grouped.
5
+ # Work in Progress
3
6
  module Legacy
4
7
 
5
- #--
6
- ##def open_log
7
- # start = Time.now.to_f.to_s
8
- #
9
- # logTS = Time.at(@myRun.launched.to_f).strftime("%Y%m%d%H%M%S")
10
- # xls = @myAppEnv.xls_name.gsub('.xls', '') + '_' if @myAppEnv.xls_name.length > 0
11
- # @logFileSpec = "#{@myRoot}/#{logdir}/#{@myName}_#{@targetBrowser.abbrev}_#{xls}#{logTS}.log"
12
- # init_logger(@logFileSpec, @myName)
13
- #
14
- # # message_tolog( self.inspect )
15
- # message_to_log("#{@myName} launched at [#{@myRun.launched.to_f.to_s}][#{@myScript.id}][#{@myRun.id}][#{@myChild.id}]")
16
- # debug_to_log("pid: #{$$}")
17
- # message_to_log("#{@myName} begin at [#{start}]")
18
- # message_to_log("#{@myName} environment [#{@myAppEnv.name}]")
19
- # message_to_log("#{@myName} xls_name [#{@myAppEnv.xls_name}]") if @myAppEnv.xls_name.length > 0
20
- # message_to_log("#{@myName} rootDir [#{@myRoot}]")
21
- # message_to_log("#{@myName} Target Browser [#{@targetBrowser.name}]")
22
- # mark_testlevel(@myParent.name, @myParent.level) # Module
23
- # mark_testlevel(@myChild.name, @myChild.level) # SubModule
24
- #
25
- #end
26
- #++
27
-
28
- #def find_me(where, how, what)
29
- # me = where.element(how, what)
30
- # puts me.inspect
31
- #rescue
32
- # error_to_log("#{where.inspect} doesn't seem to respond to element() #{$!}")
33
- #end
34
-
35
- # def click_me(element)
36
- # element.click
37
- # rescue
38
- # error_to_log("#{element.inspect} doesn't seem to respond to click() #{$!}")
39
- # end
40
8
 
41
9
 
42
10
  end
@@ -1,7 +1,11 @@
1
1
  module Awetestlib
2
2
  module Regression
3
+ # Methods for capture and manipulation of data contained in
4
+ # text, values, and/or states of spans, text fields, radios, checkboxes, and select_lists.
3
5
  module PageData
4
6
 
7
+ # @!group Core
8
+
5
9
  =begin rdoc
6
10
  :category: Page Data
7
11
  :tags: data, DOM, page
@@ -36,7 +40,7 @@ No positive validations are reported but failure is rescued and reported.
36
40
  end
37
41
 
38
42
  def compare_page_data(before, after, how, desc = '')
39
- [:text, :textarea, :select_list, :span, :checkbox, :radio].each do |type|
43
+ [:text, :textarea, :select_list, :span, :hidden, :checkbox, :radio].each do |type|
40
44
  before[how][type].each_key do |what|
41
45
  msg = "#{desc} #{type} #{how}=#{what}: Expected '#{before[how][type][what]}'."
42
46
  if after[how][type][what] == before[how][type][what]
@@ -144,45 +148,42 @@ No positive validations are reported but failure is rescued and reported.
144
148
  end
145
149
 
146
150
  def get_textfield_value(browser, how, what, desc = '')
147
- msg = "Return value in textfield #{how}='#{what}'"
148
- msg << " #{desc}" if desc.length > 0
151
+ msg = build_message("Return value in textfield #{how}='#{what}'", desc)
149
152
  tf = browser.text_field(how, what)
150
- if validate(browser, @myName, __LINE__)
151
- if tf
152
- debug_to_log("#{tf.inspect}")
153
- vlu = tf.value
154
- passed_to_log("#{msg} Value='#{vlu}'")
155
- vlu
156
- else
157
- failed_to_log("#{msg}")
158
- end
153
+ if tf
154
+ debug_to_log("#{tf.inspect}")
155
+ vlu = tf.value
156
+ passed_to_log("#{msg} Value='#{vlu}'")
157
+ vlu
158
+ else
159
+ failed_to_log("#{msg}")
159
160
  end
160
161
  rescue
161
162
  failed_to_log("Unable to #{msg}: '#{$!}'")
162
163
  end
163
164
 
164
- def get_textfield_value_by_name(browser, strg, desc = '')
165
- get_textfield_value(browser, :name, strg, desc)
166
- end
167
-
168
- def get_textfield_value_by_id(browser, strg)
169
- get_textfield_value(browser, :id, strg)
170
- end
171
-
172
165
  def get_element_text(browser, element, how, what, desc = '')
173
- msg = "Return text in #{element} #{how}='#{what}'"
174
- msg << " #{desc}" if desc.length > 0
166
+ msg = build_message("Return text in #{element} #{how}='#{what}'", desc)
175
167
  text = browser.element(how, what).text
176
- if validate(browser, @myName, __LINE__)
177
- passed_to_log("#{msg} text='#{text}'")
178
- text
179
- end
168
+ passed_to_log("#{msg} text='#{text}'")
169
+ text
180
170
  rescue
181
171
  failed_to_log("Unable to #{msg}: '#{$!}'")
182
172
  end
183
173
 
174
+ # @!endgroup Core
175
+
176
+ # @!group Legacy (Backward compatible usage)
177
+
178
+ def get_textfield_value_by_name(browser, strg, desc = '')
179
+ get_textfield_value(browser, :name, strg, desc)
180
+ end
184
181
 
182
+ def get_textfield_value_by_id(browser, strg)
183
+ get_textfield_value(browser, :id, strg)
184
+ end
185
185
 
186
+ # @!endgroup Legacy
186
187
 
187
188
  end
188
189
  end
@@ -6,6 +6,7 @@ require 'awetestlib/regression/tables'
6
6
  require 'awetestlib/regression/page_data'
7
7
  require 'awetestlib/regression/drag_and_drop'
8
8
  require 'awetestlib/regression/utilities'
9
+ require 'awetestlib/regression/legacy'
9
10
  require 'awetestlib/logging'
10
11
  require 'awetestlib/regression/validations'
11
12
  require 'awetestlib/html_report'
@@ -20,6 +21,7 @@ module Awetestlib
20
21
 
21
22
  # order matters here
22
23
  include Awetestlib::Logging
24
+ include Awetestlib::Regression::Utilities
23
25
  include Awetestlib::Regression::Browser
24
26
  include Awetestlib::Regression::Find
25
27
  include Awetestlib::Regression::UserInput
@@ -27,8 +29,8 @@ module Awetestlib
27
29
  include Awetestlib::Regression::Tables
28
30
  include Awetestlib::Regression::PageData
29
31
  include Awetestlib::Regression::DragAndDrop
30
- include Awetestlib::Regression::Utilities
31
32
  include Awetestlib::Regression::Validations
33
+ include Awetestlib::Regression::Legacy
32
34
 
33
35
  ::DEBUG = 0
34
36
  ::INFO = 1
@@ -1,7 +1,12 @@
1
1
  module Awetestlib
2
2
  module Regression
3
+ # Methods for handling Tables, Rows, and Cells
4
+ # Rdoc work in progress
3
5
  module Tables
4
6
 
7
+
8
+ # Groups: Columns, Rows, Sorting
9
+
5
10
  def get_index_for_column_head(panel, table_index, strg, desc = '')
6
11
  table = panel.tables[table_index]
7
12
  get_column_index(table, strg, desc, true)
@@ -241,6 +246,32 @@ module Awetestlib
241
246
  text
242
247
  end
243
248
 
249
+ # Return a hash containing a cross reference of the header names and indexes (columns) for the specified table.
250
+ # @example
251
+ # (need example and usage)
252
+ # @param [Watir::Table] table A reference to the table.
253
+ # @param [Fixnum] header_index The index of the row containing the header names.
254
+ # @return [Hash] Two level hash of hashes. Internal hashes are 'name' which allows look-up of a column index
255
+ # by the header name, and 'index' which allows look-up of the name by the column index.
256
+ def get_table_headers(table, header_index = 1)
257
+ headers = Hash.new
258
+ headers['index'] = Hash.new
259
+ headers['name'] = Hash.new
260
+ count = 1
261
+ table[header_index].each do |cell|
262
+ if cell.text.length > 0
263
+ name = cell.text.gsub(/\s+/, ' ')
264
+ headers['index'][count] = name
265
+ headers['name'][name] = count
266
+ end
267
+ count += 1
268
+ end
269
+ #debug_to_log("#{__method__}: headers:\n#{headers.to_yaml}")
270
+ headers
271
+ rescue
272
+ failed_to_log("Unable to get content headers. '#{$!}'")
273
+ end
274
+
244
275
  def count_rows_with_string(container, table_index, strg)
245
276
  hit = 0
246
277
  container.tables[table_index].each do |row|
@@ -510,6 +541,32 @@ module Awetestlib
510
541
  sleep_for(1)
511
542
  end
512
543
 
544
+ def text_in_table?(browser, how, what, expected, desc = '')
545
+ msg = build_message("Table :#{how}=>#{what} contains '#{expected}.", desc)
546
+ if browser.table(how, what).text =~ expected
547
+ passed_to_log(msg)
548
+ true
549
+ else
550
+ failed_to_log(msg)
551
+ end
552
+ rescue
553
+ failed_to_log("Unable to verify that #{msg}': '#{$!}'")
554
+ end
555
+
556
+ def text_in_table_row_with_text?(table, text, target, desc = '')
557
+ #TODO This needs clarification, renaming
558
+ msg = build_message("Table :id=>#{table.id} row with text '#{text} also contains '#{target}.", desc)
559
+ index = get_index_of_row_with_text(table, text)
560
+ if table[index].text =~ target
561
+ passed_to_log(msg)
562
+ true
563
+ else
564
+ failed_to_log(msg)
565
+ end
566
+ end
567
+
568
+ alias verify_text_in_table_with_text text_in_table_row_with_text?
569
+
513
570
  end
514
571
  end
515
572
  end
@@ -1,37 +1,37 @@
1
1
  module Awetestlib
2
+ # Awetest DSL for browser based testing.
2
3
  module Regression
4
+ # Methods covering user interactions with the browser.
5
+ #
6
+ #
7
+ # All of the methods in groups other than Core call Core methods.
8
+ # The methods in the other groups, along with aliases, exist for backward compatibility with earlier versions
9
+ # of the Awetest DSL.
3
10
  module UserInput
4
11
 
5
- =begin rdoc
6
- :category: A_rdoc_test
7
- Click a specific DOM element by one of its attributes and that attribute's value.
8
-
9
- _Parameters_::
10
-
11
- *browser* - a reference to the browser window or container element to be tested
12
-
13
- *element* - the kind of element to click. Must be one of the elements recognized by Watir.
14
- Some common values are :link, :button, :image, :div, :span.
15
-
16
- *how* - the element attribute used to identify the specific element. Valid values depend on the kind of element.
17
- Common values: :text, :id, :title, :name, :class, :href (:link only)
18
-
19
- *what* - a string or a regular expression to be found in the *how* attribute that uniquely identifies the element.
20
-
21
- *desc* - a string containing a message or description intended to appear in the log and/or report output
22
-
23
- _Example_
24
-
25
- # html for a link element:
26
- # <a href="http://pragmaticprogrammer.com/titles/ruby/" id="one" name="book">Pickaxe</a>
27
- click(browser, :link, :text, 'Pickaxe')
28
-
29
- =end
30
-
12
+ # @!group Core
13
+
14
+ # Click a specific DOM element identified by one of its attributes and that attribute's value.
15
+ #
16
+ # @example
17
+ # # html for a link element:
18
+ # # <a href="http://pragmaticprogrammer.com/titles/ruby/" id="one" name="book">Pickaxe</a>
19
+ #
20
+ # click(browser, :link, :text, 'Pickaxe')
21
+ #
22
+ # @param [Watir::Browser] browser A reference to the browser window or container element to be tested.
23
+ # @param [Symbol] element The kind of element to click. Must be one of the elements recognized by Watir.
24
+ # Some common values are :link, :button, :image, :div, :span.
25
+ # @param [Symbol] how The element attribute used to identify the specific element.
26
+ # Valid values depend on the kind of element.
27
+ # Common values: :text, :id, :title, :name, :class, :href (:link only)
28
+ # @param [String, Regexp] what A string or a regular expression to be found in the *how* attribute that uniquely identifies the element.
29
+ # @param [String] desc Contains a message or description intended to appear in the log and/or report output
30
+ # @return [Boolean] True if the Watir or Watir-webdriver function does not throw an exception.
31
+ #
31
32
  def click(browser, element, how, what, desc = '')
32
33
  #debug_to_log("#{__method__}: #{element}, #{how}, #{what}")
33
- msg = "Click #{element} :#{how}=>'#{what}'"
34
- msg << ", '#{desc}'" if desc.length > 0
34
+ msg = build_message("Click #{element} :#{how}=>'#{what}'", desc)
35
35
  msg1 = "#{element}(#{how}, '#{what}')"
36
36
  begin
37
37
  case element
@@ -58,46 +58,207 @@ _Example_
58
58
  browser.element(how, what).click
59
59
  end
60
60
  end
61
- if validate(browser, @myName, __LINE__)
62
61
  passed_to_log(msg)
63
62
  true
64
- end
65
63
  rescue
66
64
  failed_to_log("Unable to #{msg}. '#{$!}'")
67
65
  end
68
66
 
69
- =begin rdoc
70
- :category: A_rdoc_test
71
- Click a specific DOM element by one of its attributes and that attribute's value and
72
- do not wait for the browser to finish reloading. Used when a modal popup or alert is expected. Allows the script
73
- to keep running so the popup can be handled.
67
+ # @!endgroup Core
68
+
69
+ # @!group Click
70
+
71
+ # Click a button element identified by the value of its *:id* attribute. A button is an HTML element with tag 'input' and type 'submit' or 'button'.
72
+ # @param [Watir::Browser, Watir::Container] browser A reference to the browser window or container element to be tested.
73
+ # @param [String, Regexp] what A string or a regular expression to be found in the specified attribute that uniquely identifies the element.
74
+ # @param [String] desc Contains a message or description intended to appear in the log and/or report output
75
+ # @return (see #click)
76
+ def click_button_by_id(browser, what, desc = '')
77
+ click(browser, :button, :id, what, desc)
78
+ end
79
+
80
+ # Click a button element identified by the value of its index within the container referred to by <b>*browser*</b>.
81
+ # @param [Watir::Browser, Watir::Container] browser A reference to the browser window or container element to be tested.
82
+ # @param [Fixnum] what An integer that indicates the index of the element within the container.
83
+ # @param [String] desc Contains a message or description intended to appear in the log and/or report output
84
+ # @return (see #click)
85
+ def click_link_by_index(browser, what, desc = '')
86
+ click(browser, :link, :index, what, desc)
87
+ end
88
+
89
+ # Click a link element identified by the value of its *:href* attribute. Take care to escape characters in the url that are reserved by Regexp.
90
+ # @param (see #click_button_by_id)
91
+ # @return (see #click)
92
+ def click_link_by_href(browser, what, desc = '')
93
+ click(browser, :link, :href, what, desc)
94
+ end
95
+
96
+ alias click_href click_link_by_href
97
+
98
+ # Click a link element identified by the value of its *:href* attribute and do not wait for the browser to reach ready state.
99
+ # Take care to escape characters in the url that are reserved by Regexp.
100
+ # @param (see #click_button_by_id)
101
+ # @return (see #click)
102
+ def click_link_no_wait_by_href(browser, what, desc = '')
103
+ click_no_wait(browser, :link, :href, what, desc)
104
+ end
105
+
106
+ # Click a button element identified by the value of its index within the container referred to by <b>*browser*</b>.
107
+ # @param (see #click_link_by_index)
108
+ # @return (see #click)
109
+ def click_button_by_index(browser, what, desc = '')
110
+ click(browser, :button, :index, what, desc)
111
+ end
112
+
113
+ # Click a button element identified by the value of its *:name* attribute. A button is an HTML element with tag 'input' and type 'submit' or 'button'.
114
+ # @param (see #click_button_by_id)
115
+ # @return (see #click)
116
+ def click_button_by_name(browser, what, desc = '')
117
+ click(browser, :button, :name, what, desc)
118
+ end
119
+
120
+ # Click a button element identified by the value of its *:text* attribute. A button is an HTML element with tag 'input' and type 'submit' or 'button'.
121
+ # @param (see #click_button_by_id)
122
+ # @return (see #click)
123
+ def click_button_by_text(browser, what, desc = '')
124
+ click(browser, :button, :text, what, desc)
125
+ end
126
+
127
+ # Click a button element identified by the value of its *:class* attribute. A button is an HTML element with tag 'input' and type 'submit' or 'button'.
128
+ # @param (see #click_button_by_id)
129
+ # @return (see #click)
130
+ def click_button_by_class(browser, what, desc = '')
131
+ click(browser, :button, :class, what, desc)
132
+ end
133
+
134
+ # Click a button element identified by the value of its *:value* attribute. A button is an HTML element with tag 'input' and type 'submit' or 'button'.
135
+ # @param (see #click_button_by_id)
136
+ # @return (see #click)
137
+ def click_button_by_value(browser, what, desc = '')
138
+ click(browser, :button, :value, what, desc)
139
+ end
74
140
 
75
- _Parameters_::
141
+ # Click a button element identified by the value of its *:title* attribute. A button is an HTML element with tag 'input' and type 'submit' or 'button'.
142
+ # @param (see #click_button_by_id)
143
+ # @return (see #click)
144
+ def click_button_by_title(browser, what, desc = '')
145
+ click(browser, :button, :title, what, desc)
146
+ end
76
147
 
77
- *browser* - a reference to the browser window to be tested
148
+ # Click a link element identified by the value of its *:id* attribute.
149
+ # @param (see #click_button_by_id)
150
+ # @return (see #click)
151
+ def click_link_by_id(browser, what, desc = '')
152
+ click(browser, :link, :id, what, desc)
153
+ end
78
154
 
79
- *element* - the kind of element to click. Must be one of the elements recognized by Watir.
80
- Some common values are :link, :button, :image, :div, :span.
155
+ alias click_id click_link_by_id
81
156
 
82
- *how* - the element attribute used to identify the specific element. Valid values depend on the kind of element.
83
- Common values: :text, :id, :title, :name, :class, :href (:link only)
157
+ # Click a link element identified by the value of its *:name* attribute.
158
+ # @param (see #click_button_by_id)
159
+ # @return (see #click)
160
+ def click_link_by_name(browser, what, desc = '')
161
+ click(browser, :link, :name, what, desc)
162
+ end
84
163
 
85
- *what* - a string or a regular expression to be found in the *how* attribute that uniquely identifies the element.
164
+ alias click_name click_link_by_name
86
165
 
87
- *desc* - a string containing a message or description intended to appear in the log and/or report output
166
+ # Click a file_field element identified by the value of its *:id* attribute.
167
+ # @param (see #click_button_by_id)
168
+ # @return (see #click)
169
+ def click_file_field_by_id(browser, what, desc = '')
170
+ click(browser, :file_field, :id, what, desc)
171
+ end
172
+
173
+ # Click an image element identified by the value of its *:id* attribute.
174
+ # @param (see #click_button_by_id)
175
+ # @return (see #click)
176
+ def click_img_by_alt(browser, what, desc = '')
177
+ click(browser, :image, :alt, what, desc)
178
+ end
179
+
180
+ # Click an image element identified by the value of its *:title* attribute.
181
+ # @param (see #click_button_by_id)
182
+ # @return (see #click)
183
+ def click_img_by_title(browser, what, desc = '')
184
+ click(browser, :image, :title, what, desc)
185
+ end
186
+
187
+ # Click an image element identified by the value of its *:src* attribute.
188
+ # Take care to escape characters in the source url that are reserved by Regexp.
189
+ # @param (see #click_button_by_id)
190
+ # @return (see #click)
191
+ def click_img_by_src(browser, what, desc = '')
192
+ click(browser, :image, :src, what, desc)
193
+ end
194
+
195
+ # Click a link element identified by the value of its *:value* attribute.
196
+ # @param (see #click_button_by_id)
197
+ # @return (see #click)
198
+ def click_link_by_value(browser, what, desc = '')
199
+ click(browser, :link, :value, what, desc)
200
+ end
201
+
202
+ # Click a link element identified by the value in its text (innerHTML).
203
+ # @param (see #click_button_by_id)
204
+ # @return (see #click)
205
+ def click_link_by_text(browser, what, desc = '')
206
+ click(browser, :link, :text, what, desc)
207
+ end
208
+
209
+ alias click_link click_link_by_text
210
+ alias click_text click_link_by_text
211
+ alias click_js_button click_link_by_text
212
+
213
+ # Click a link element identified by the value of its *:class* attribute.
214
+ # @param (see #click_button_by_id)
215
+ # @return (see #click)
216
+ def click_link_by_class(browser, what, desc = '')
217
+ click(browser, :link, :class, what, desc)
218
+ end
219
+
220
+ alias click_class click_link_by_class
221
+
222
+ # Click a span element identified by the value in its text (innerHTML).
223
+ # @param (see #click_button_by_id)
224
+ # @return (see #click)
225
+ def click_span_by_text(browser, what, desc = '')
226
+ click(browser, :span, :text, what)
227
+ end
88
228
 
89
- _Example_
229
+ alias click_span_with_text click_span_by_text
90
230
 
91
- # html for a link element:
92
- # <a href="http://pragmaticprogrammer.com/titles/ruby/" id="one" name="book">Pickaxe</a>
93
- click_no_wait(browser, :link, :text, 'Pickaxe')
231
+ # Click a link element identified by the value of its *:title* attribute.
232
+ # @param (see #click_button_by_id)
233
+ # @return (see #click)
234
+ def click_link_by_title(browser, what, desc = '')
235
+ click(browser, :link, :title, what, desc)
236
+ end
94
237
 
95
- =end
238
+ alias click_title click_link_by_title
96
239
 
240
+ # @!endgroup Click
241
+
242
+ # @!group Core
243
+
244
+ # Click a specific DOM element by one of its attributes and that attribute's value and
245
+ # do not wait for the browser to finish reloading. Used when a modal popup or alert is expected. Allows the script
246
+ # to keep running so the popup can be handled.
247
+ #
248
+ # @example
249
+ # # html for a link element:
250
+ # # <a href="http://pragmaticprogrammer.com/titles/ruby/" id="one" name="book">Pickaxe</a>
251
+ #
252
+ # click_no_wait(browser, :link, :text, 'Pickaxe')
253
+ #
254
+ # @see #click
255
+ #
256
+ # @param (see #click)
257
+ # @return (see #click)
258
+ #
97
259
  def click_no_wait(browser, element, how, what, desc = '')
98
260
  debug_to_log("#{__method__}: #{element}, #{how}, #{what}")
99
- msg = "Click no wait #{element} :#{how}=>'#{what}'"
100
- msg << ", '#{desc}'" if desc.length > 0
261
+ msg = build_message("Click no wait #{element} :#{how}=>'#{what}'", desc)
101
262
  msg1 = "#{element}(#{how}, '#{what}'"
102
263
  begin
103
264
  case element
@@ -130,151 +291,53 @@ _Example_
130
291
  raise e
131
292
  end
132
293
  end
133
- if validate(browser, @myName, __LINE__)
134
294
  passed_to_log(msg)
135
295
  true
136
- end
137
296
  rescue
138
297
  failed_to_log("Unable to #{msg} '#{$!}'")
139
298
  sleep_for(1)
140
299
  end
141
300
 
142
- # :category: User Input
143
- def click_button_by_id(browser, strg, desc = '')
144
- click(browser, :button, :id, strg, desc)
145
- end
146
-
147
- # :category: User Input
148
- def click_link_by_index(browser, strg, desc = '')
149
- click(browser, :link, :index, strg, desc)
150
- end
151
-
152
- # :category: User Input
153
- def click_link_by_href(browser, strg, desc = '')
154
- click(browser, :link, :href, strg, desc)
155
- end
156
-
157
- alias click_href click_link_by_href
158
- # :category: User Input
159
- def click_link_no_wait_by_href(browser, strg, desc = '')
160
- click_no_wait(browser, :link, :href, strg, desc)
161
- end
301
+ # @!endgroup Core
162
302
 
163
303
  alias click_href_no_wait click_link_no_wait_by_href
164
- # :category: User Input
165
- def click_button_by_index(browser, index, desc = '')
166
- click(browser, :button, :index, index, desc)
167
- end
168
304
 
169
- # :category: User Input
170
- def click_button_by_name(browser, strg, desc = '')
171
- click(browser, :button, :name, strg, desc)
172
- end
173
-
174
- # :category: User Input
175
- def click_button_by_text(browser, strg, desc = '')
176
- click(browser, :button, :text, strg, desc)
177
- end
305
+ # @!group Click No Wait
178
306
 
179
- # :category: User Input
180
- def click_button_by_class(browser, strg, desc = '')
181
- click(browser, :button, :class, strg, desc)
182
- end
183
-
184
- # :category: User Input
185
- def click_button_no_wait_by_id(browser, strg, desc = '')
186
- click_no_wait(browser, :button, :id, strg, desc)
307
+ # Click a button element identified by the value of its *:id* attribute
308
+ # and do not wait for the browser to reach ready state.
309
+ # @param (see #click_button_by_id)
310
+ # @return (see #click)
311
+ def click_button_no_wait_by_id(browser, what, desc = '')
312
+ click_no_wait(browser, :button, :id, what, desc)
187
313
  end
188
314
 
189
315
  alias click_button_by_id_no_wait click_button_no_wait_by_id
190
- # :category: User Input
191
- def click_button_no_wait_by_name(browser, strg, desc = '')
192
- click_no_wait(browser, :button, :name, strg, desc)
193
- end
194
-
195
- # :category: User Input
196
- def click_button_no_wait_by_class(browser, strg, desc = '')
197
- click_no_wait(browser, :button, :class, strg, desc)
198
- end
199
-
200
- alias click_button_by_class_no_wait click_button_no_wait_by_class
201
- # :category: User Input
202
- def click_button_by_value(browser, strg, desc = '')
203
- click(browser, :button, :value, strg, desc)
204
- end
205
-
206
- # :category: User Input
207
- def click_button_by_title(browser, strg, desc = '')
208
- click(browser, :button, :title, strg, desc)
209
- end
210
-
211
- # :category: User Input
212
- def click_button_by_xpath_and_id(browser, strg, desc = '')
213
- msg = "Click button by xpath and id '#{strg}' #{desc}"
214
- if browser.button(:xpath, "//a[@id = '#{strg}']").click
215
- passed_to_log(msg)
216
- true
217
- else
218
- failed_to_log(msg)
219
- end
220
- rescue
221
- failed_to_log("Unable to click button by xpath and id '#{strg}' #{desc} '#{$!}' (#{__LINE__})")
222
- end
223
-
224
- alias click_button_by_xpath click_button_by_xpath_and_id
225
-
226
- =begin rdoc
227
- :category: A_rdoc_test
228
- Click a link identified by the value in its id attribute. Calls click()
229
-
230
- _Parameters_::
231
-
232
- *browser* - a reference to the browser window to be tested
233
316
 
234
- *strg* - a string or a regular expression to be found in the id attribute that uniquely identifies the element.
235
-
236
- *desc* - a string containing a message or description intended to appear in the log and/or report output
237
-
238
-
239
- _Example_
240
-
241
- # html for a link element:
242
- # <a href="http://pragmaticprogrammer.com/titles/ruby/" id="one" name="book">Pickaxe</a>
243
- click_link_by_text(browser, 'Pickaxe', 'Open the page for the Pickaxe book')
244
-
245
- =end
246
-
247
- def click_link_by_id(browser, strg, desc = '')
248
- click(browser, :link, :id, strg, desc)
317
+ # Click a button element identified by the value of its *:name* attribute
318
+ # and do not wait for the browser to reach ready state.
319
+ # @param (see #click_button_by_id)
320
+ # @return (see #click)
321
+ def click_button_no_wait_by_name(browser, what, desc = '')
322
+ click_no_wait(browser, :button, :name, what, desc)
249
323
  end
250
324
 
251
- # :category: A_rdoc_test
252
- alias click_id click_link_by_id
253
-
254
- # :category: User Input
255
- def click_link_by_name(browser, strg, desc = '')
256
- click(browser, :link, :name, strg, desc)
257
- end
258
-
259
- alias click_name click_link_by_name
260
- # :category: User Input
261
- def click_link_by_xpath_and_id(browser, strg, desc = '')
262
- msg = "Click link by xpath and id '#{strg}' #{desc}"
263
- if browser.link(:xpath, "//a[@id = '#{strg}']").click
264
- passed_to_log(msg)
265
- true
266
- else
267
- failed_to_log(msg)
268
- end
269
- rescue
270
- failed_to_log("Unable click on link by xpath and id '#{strg}' #{desc} '#{$!}' (#{__LINE__})")
325
+ # Click a button element identified by the value of its *:class* attribute
326
+ # and do not wait for the browser to reach ready state.
327
+ # @param (see #click_button_by_id)
328
+ # @return (see #click)
329
+ def click_button_no_wait_by_class(browser, what, desc = '')
330
+ click_no_wait(browser, :button, :class, what, desc)
271
331
  end
272
332
 
273
- alias click_link_by_xpath click_link_by_xpath_and_id
333
+ alias click_button_by_class_no_wait click_button_no_wait_by_class
274
334
 
275
- # :category: User Input
276
- def click_link_no_wait_by_id(browser, strg, desc = '')
277
- click_no_wait(browser, :link, :id, strg, desc)
335
+ # Click a link element identified by the value of its *:id* attribute
336
+ # and do not wait for the browser to reach ready state.
337
+ # @param (see #click_button_by_id)
338
+ # @return (see #click)
339
+ def click_link_no_wait_by_id(browser, what, desc = '')
340
+ click_no_wait(browser, :link, :id, what, desc)
278
341
  end
279
342
 
280
343
  alias click_no_wait_id click_link_no_wait_by_id
@@ -282,266 +345,241 @@ _Example_
282
345
  alias click_id_no_wait click_link_no_wait_by_id
283
346
  alias click_no_wait_link_by_id click_link_no_wait_by_id
284
347
 
285
- # :category: User Input
286
- def click_file_field_by_id(browser, strg, desc = '')
287
- click(browser, :file_field, :id, strg, desc)
288
- end
289
-
290
- # :category: User Input
291
- def click_img_by_alt(browser, strg, desc = '')
292
- click(browser, :image, :alt, strg, desc)
293
- end
294
-
295
- # :category: User Input
296
- def click_img_by_title(browser, strg, desc = '')
297
- click(browser, :image, :title, strg, desc)
298
- end
299
-
300
- # :category: User Input
301
- def click_img_by_xpath_and_name(browser, strg, desc = '')
302
- msg = "Click image by xpath where name='#{strg}' #{desc}"
303
- if browser.link(:xpath, "//input[@name = '#{strg}']").click
304
- passed_to_log(msg)
305
- true
306
- else
307
- failed_to_log(msg)
308
- end
309
- rescue
310
- failed_to_log("Unable to click image by xpath where name='#{strg}' #{desc} '#{$!}'")
311
- end
312
-
313
- alias click_img_by_xpath click_img_by_xpath_and_name
314
- alias click_image_by_xpath click_img_by_xpath_and_name
315
- alias click_image_by_xpath_and_name click_img_by_xpath_and_name
316
-
317
- # :category: User Input
318
- def click_img_no_wait_by_alt(browser, strg, desc = '')
319
- click_no_wait(browser, :image, :alt, strg, desc)
348
+ # Click an image element identified by the value of its *:alt* attribute
349
+ # and do not wait for the browser to reach ready state.
350
+ # @param (see #click_button_by_id)
351
+ # @return (see #click)
352
+ def click_img_no_wait_by_alt(browser, what, desc = '')
353
+ click_no_wait(browser, :image, :alt, what, desc)
320
354
  end
321
355
 
322
356
  alias click_img_by_alt_no_wait click_img_no_wait_by_alt
323
- # :category: User Input
324
- def click_img_by_src(browser, strg, desc = '')
325
- click(browser, :image, :src, strg, desc)
326
- end
327
357
 
328
- # :category: User Input
329
- def click_img_by_src_and_index(browser, strg, index, desc = '')
330
- msg = "Click image by src='#{strg}' and index=#{index}"
331
- msg << " #{desc}" if desc.length > 0
332
- browser.image(:src => strg, :index => index).click
333
- if validate(browser, @myName, __LINE__)
334
- passed_to_log(msg)
335
- true
336
- end
337
- rescue
338
- failed_to_log("Unable to #{msg} '#{$!}'")
358
+ # Click a button element identified by the value in its text (innerHTML)
359
+ # and do not wait for the browser to reach ready state.
360
+ # @param (see #click_button_by_id)
361
+ # @return (see #click)
362
+ def click_button_no_wait_by_text(browser, what, desc = '')
363
+ click_no_wait(browser, :button, :text, what, desc)
339
364
  end
340
365
 
341
- # :category: User Input
342
- def click_link_by_value(browser, strg, desc = '')
343
- click(browser, :link, :value, strg, desc)
366
+ # Click a button element identified by the value of its *:value* attribute
367
+ # and do not wait for the browser to reach ready state.
368
+ # @param (see #click_button_by_id)
369
+ # @return (see #click)
370
+ def click_button_no_wait_by_value(browser, what, desc = '')
371
+ click_no_wait(browser, :button, :value, what, desc)
344
372
  end
345
373
 
346
- =begin rdoc
347
- :category: A_rdoc_test
348
- Click a link identified by the value in its text attribute. Calls click()
349
-
350
- _Parameters_::
351
-
352
- *browser* - a reference to the browser window to be tested
353
-
354
- *strg* - a string or a regular expression to be found in the *how* attribute that uniquely identifies the element.
355
-
356
- *desc* - a string containing a message or description intended to appear in the log and/or report output
357
-
358
-
359
- _Example_
360
-
361
- # html for a link element:
362
- # <a href="http://pragmaticprogrammer.com/titles/ruby/" id="one" name="book">Pickaxe</a>
363
- click_link_by_text(browser, 'Pickaxe', 'Open the page for the Pickaxe book')
364
-
365
- =end
366
-
367
- def click_link_by_text(browser, strg, desc = '')
368
- click(browser, :link, :text, strg, desc)
374
+ # Click a button element identified by the value of its *:name* attribute
375
+ # and do not wait for the browser to reach ready state.
376
+ # @param (see #click_button_by_id)
377
+ # @return (see #click)
378
+ def click_link_by_name_no_wait(browser, what, desc = '')
379
+ click_no_wait(browser, :link, :name, what, desc)
369
380
  end
370
381
 
371
- alias click_link click_link_by_text
372
- # :category: A_rdoc_test
373
- alias click_text click_link_by_text
374
- alias click_js_button click_link_by_text
382
+ alias click_no_wait_name click_link_by_name_no_wait
383
+ alias click_name_no_wait click_link_by_name_no_wait
375
384
 
376
- # :category: User Input
377
- def click_link_by_class(browser, strg, desc = '')
378
- click(browser, :link, :class, strg, desc)
385
+ # Click a link element identified by the value in its text (innerHTML)
386
+ # and do not wait for the browser to reach ready state.
387
+ # @param (see #click_button_by_id)
388
+ # @return (see #click)
389
+ def click_link_by_text_no_wait(browser, what, desc = '')
390
+ click_no_wait(browser, :link, :text, what, desc)
379
391
  end
380
392
 
381
- alias click_class click_link_by_class
393
+ alias click_no_wait_text click_link_by_text_no_wait
394
+ alias click_text_no_wait click_link_by_text_no_wait
382
395
 
383
- # :category: User Input
384
- def click_button_no_wait_by_text(browser, strg, desc = '')
385
- click_no_wait(browser, :button, :text, strg, desc)
396
+ # Click a link element identified by the value of its *:title* attribute
397
+ # and do not wait for the browser to reach ready state.
398
+ # @param (see #click_button_by_id)
399
+ # @return (see #click)
400
+ def click_title_no_wait(browser, what, desc = '')
401
+ click_no_wait(browser, :link, :title, what, desc)
386
402
  end
387
403
 
388
- # :category: User Input
389
- def click_button_no_wait_by_value(browser, strg, desc = '')
390
- click_no_wait(browser, :button, :value, strg, desc)
391
- end
404
+ # @!endgroup Click No Wait
392
405
 
393
- # :category: User Input
394
- def click_link_by_name_no_wait(browser, strg, desc = '')
395
- click_no_wait(browser, :link, :name, strg, desc)
406
+ # @!group Xpath
407
+
408
+ # Click a button element identified by the value of its *:id* attribute using the xpath functionality in Watir.
409
+ # A button is an HTML element with tag 'input' and type 'submit' or 'button'.
410
+ # @note Normally used only when the element is not located by other methods.
411
+ # @param (see #click_button_by_id)
412
+ # @return (see #click)
413
+ def click_button_by_xpath_and_id(browser, what, desc = '')
414
+ click(browser, :button, :xpath, "//a[@id = '#{what}']", desc)
396
415
  end
397
416
 
398
- alias click_no_wait_name click_link_by_name_no_wait
399
- alias click_name_no_wait click_link_by_name_no_wait
417
+ alias click_button_by_xpath click_button_by_xpath_and_id
400
418
 
401
- # :category: User Input
402
- def click_link_by_text_no_wait(browser, strg, desc = '')
403
- click_no_wait(browser, :link, :text, strg, desc)
419
+ # Click a link element identified by the value of its *:id* attribute using the xpath functionality in Watir.
420
+ # @note Normally used only when the element is not located by other methods.
421
+ # @param (see #click_button_by_id)
422
+ # @return (see #click)
423
+ def click_link_by_xpath_and_id(browser, what, desc = '')
424
+ click(browser, :link, :xpath, "//a[@id = '#{what}']", desc)
404
425
  end
405
426
 
406
- alias click_no_wait_text click_link_by_text_no_wait
407
- alias click_text_no_wait click_link_by_text_no_wait
427
+ alias click_link_by_xpath click_link_by_xpath_and_id
408
428
 
409
- # :category: User Input
410
- def click_span_by_text(browser, strg, desc = '')
411
- if not desc and not strg.match(/Save|Open|Close|Submit|Cancel/)
412
- desc = 'to navigate to selection'
413
- end
414
- msg = "Click span containing text '#{strg}'."
415
- msg << " #{desc}" if desc.length > 0
416
- if validate(browser, @myName, __LINE__)
417
- passed_to_log("#{msg}")
418
- end
419
- rescue
420
- failed_to_log("Unable to #{msg}: '#{$!}'")
429
+ # Click an image element identified by the value of its *:name* attribute using the xpath functionality in Watir.
430
+ # @note Normally used only when the element is not located by other methods.
431
+ # @param (see #click_button_by_id)
432
+ # @return (see #click)
433
+ def click_img_by_xpath_and_name(browser, what, desc = '')
434
+ click(browser, :image, :xpath, "//a[@id = '#{what}']", desc)
421
435
  end
422
436
 
423
- # TODO no logging yet. slow.# :category: User Input
424
- def click_span_with_text(browser, trgt, desc = '')
425
- msg = "Find and click span containing text '#{trgt}'."
426
- msg << " #{desc}" if desc.length > 0
427
- spans = browser.spans
428
- x = 0
429
- spans.each do |span|
430
- x += 1
431
- debug_to_log("Span #{x}: #{span.text}")
432
- aText = span.text
433
- if aText and aText.size > 0
434
- if aText =~ /#{trgt}/
435
- break
436
- end
437
- end
438
- end
439
- spans[x].click
440
- end
437
+ alias click_img_by_xpath click_img_by_xpath_and_name
438
+ alias click_image_by_xpath click_img_by_xpath_and_name
439
+ alias click_image_by_xpath_and_name click_img_by_xpath_and_name
441
440
 
442
- # :category: User Input
443
- def click_link_by_title(browser, strg, desc = '')
444
- click(browser, :link, :title, strg, desc)
445
- end
441
+ # @!endgroup Xpath
446
442
 
447
- alias click_title click_link_by_title
448
- # :category: User Input
449
- def click_title_no_wait(browser, strg, desc = '')
450
- click_no_wait(browser, :link, :title, strg, desc)
451
- end
443
+ # @!group Core
452
444
 
453
- # :category: User Input
454
- def click_table_row_with_text_by_id(browser, ptrn, strg, column = nil)
455
- msg = "id=#{ptrn} row with text='#{strg}"
456
- table = get_table_by_id(browser, /#{ptrn}/)
457
- if table
458
- index = get_index_of_row_with_text(table, strg, column)
459
- if index
460
- table[index].click
461
- if validate(browser, @myName, __LINE__)
462
- passed_to_log("Click #{msg} row index=#{index}.")
463
- index
464
- end
465
- else
466
- failed_to_log("Table #{msg} not found to click.")
467
- end
468
- else
469
- failed_to_log("Table id=#{ptrn} not found.")
470
- end
445
+ # Click an image element identified by the value of its *:src* attribute and its index
446
+ # within the array of image elements with src containing <b>*what*</b> and
447
+ # within the container referred to by <b>*browser*</b>.
448
+ # @param [Watir::Browser, Watir::Container] browser A reference to the browser window or container element to be tested.
449
+ # @param [String, Regexp] what A string or a regular expression to be found in the specified attribute that uniquely identifies the element.
450
+ # @param [Fixnum] index An integer that indicates the index of the element within the array of image elements with src containing <b>*what*</b>.
451
+ # @param [String] desc Contains a message or description intended to appear in the log and/or report output
452
+ # @return (see #click)
453
+ def click_img_by_src_and_index(browser, what, index, desc = '')
454
+ msg = "Click image by src='#{what}' and index=#{index}"
455
+ msg << " #{desc}" if desc.length > 0
456
+ browser.image(:src => what, :index => index).click
457
+ passed_to_log(msg)
458
+ true
471
459
  rescue
472
- failed_to_log("Unable to click table #{msg}: '#{$!}' (#{__LINE__}) ")
460
+ failed_to_log("Unable to #{msg} '#{$!}'")
473
461
  end
474
462
 
475
- # :category: User Input
476
- def click_table_row_with_text_by_index(browser, idx, strg, column = nil)
477
- msg = "index=#{idx} row with text='#{strg}"
478
- table = get_table_by_index(browser, idx)
463
+ # Click the first row which contains a particular string in a table identified by attribute and value.
464
+ # A specific column in the table can also be specified.
465
+ # @param [Watir::Browser] browser A reference to the browser window or container element to be tested.
466
+ # @param [Symbol] how The element attribute used to identify the specific element.
467
+ # Valid values depend on the kind of element.
468
+ # Common values: :text, :id, :title, :name, :class, :href (:link only)
469
+ # @param [String, Regexp] what A string or a regular expression to be found in the *how* attribute that uniquely identifies the element.
470
+ # @param [String] text Full text string to be found in the table row.
471
+ # @param [String] desc Contains a message or description intended to appear in the log and/or report output
472
+ # @param [Fixnum] column Integer indicating the column to search for the text string.
473
+ # If not supplied all columns will be checked.
474
+ # @return (see #click)
475
+ #
476
+ def click_table_row_with_text(browser, how, what, text, desc = '', column = nil)
477
+ msg = build_message("Click row with text #{text} in table :#{how}=>'#{what}.", desc)
478
+ table = get_table(browser, how, what, desc)
479
479
  if table
480
- index = get_index_of_row_with_text(table, strg, column)
480
+ index = get_index_of_row_with_text(table, text, column)
481
481
  if index
482
482
  table[index].click
483
- if validate(browser, @myName, __LINE__)
484
- passed_to_log("Click #{msg} row index=#{index}.")
483
+ passed_to_log(msg)
485
484
  index
486
- end
487
485
  else
488
- failed_to_log("Table #{msg} not found to click.")
486
+ failed_to_log("#{msg} Row not found.")
489
487
  end
490
488
  else
491
- failed_to_log("Table id=#{ptrn} not found.")
489
+ failed_to_log("#{msg} Table not found.")
492
490
  end
493
491
  rescue
494
- failed_to_log("Unable to click table #{msg}: '#{$!}' (#{__LINE__}) ")
495
- end
496
-
497
- def double_click_table_row_with_text_by_id(browser, ptrn, strg, column = nil)
498
- msg = "id=#{ptrn} row with text='#{strg}"
499
- table = get_table_by_id(browser, /#{ptrn}/)
500
- if table
501
- index = get_index_of_row_with_text(table, strg, column)
502
- if index
503
- table[index].fire_event('ondblclick')
504
- if validate(browser, @myName, __LINE__)
505
- passed_to_log("Double click #{msg} row index=#{index}.")
506
- index
507
- end
508
- else
509
- failed_to_log("Table #{msg} not found to double click.")
510
- end
511
- else
512
- failed_to_log("Table id=#{ptrn} not found.")
513
- end
514
- rescue
515
- failed_to_log("Unable to double click table #{msg}: '#{$!}' (#{__LINE__}) ")
492
+ failed_to_log("Unable to #{msg}: '#{$!}'")
516
493
  end
517
494
 
518
- def double_click_table_row_with_text_by_index(browser, idx, strg, column = nil)
519
- msg = "index=#{idx} row with text='#{strg}"
520
- table = get_table_by_index(browser, idx)
495
+ # Double click the first row which contains a particular string in a table identified by attribute and value.
496
+ # A specific column in the table can also be specified.
497
+ # Uses fire_event method in Watir to send 'onDblClick' event.
498
+ # @param (see #click_table_row_with_text)
499
+ # @return (see #click)
500
+ #
501
+ def double_click_table_row_with_text(browser, how, what, text, desc = '', column = nil)
502
+ msg = build_message("Double click row with text #{text} in table :#{how}=>'#{what}.", desc)
503
+ table = get_table(browser, how, what, desc)
521
504
  if table
522
- index = get_index_of_row_with_text(table, strg, column)
505
+ index = get_index_of_row_with_text(table, text, column)
523
506
  if index
524
- row = table[index]
525
507
  table[index].fire_event('ondblclick')
526
- row.fire_event('ondblclick')
527
- if validate(browser, @myName, __LINE__)
528
- passed_to_log("Double click #{msg} row index=#{index}.")
508
+ passed_to_log(msg)
529
509
  index
530
- end
531
510
  else
532
- failed_to_log("Table #{msg} not found to double click.")
511
+ failed_to_log("#{msg} Row not found.")
533
512
  end
534
513
  else
535
- failed_to_log("Table id=#{ptrn} not found.")
514
+ failed_to_log("#{msg} Table not found.")
536
515
  end
537
516
  rescue
538
- failed_to_log("Unable to double click table #{msg}: '#{$!}' (#{__LINE__}) ")
517
+ failed_to_log("Unable to #{msg}: '#{$!}'")
539
518
  end
540
519
 
541
- def click_popup_button(title, button, waitTime= 9, user_input=nil)
520
+ # @!endgroup Core
521
+
522
+ # @!group Tables
523
+
524
+ # Click the first row which contains a particular string in a table identified by the value in its *:id* attribute.
525
+ #
526
+ # @param [Watir::Browser] browser A reference to the browser window or container element to be tested.
527
+ # @param [String, Regexp] what A string or a regular expression to be found in the *how* attribute that uniquely identifies the element.
528
+ # @param [String] text Full text string to be found in the table row.
529
+ # @param [String] desc Contains a message or description intended to appear in the log and/or report output
530
+ # @param [Fixnum] column Integer indicating the column to search for the text string.
531
+ # If not supplied all columns will be checked.
532
+ # @return (see #click)
533
+ #
534
+ def click_table_row_with_text_by_id(browser, what, text, desc = '', column = nil)
535
+ click_table_row_with_text(browser, :id, what, text, desc, column)
536
+ end
537
+
538
+ # Click the first row which contains a particular string in a table identified by its index
539
+ # in the array of tables contained in <b>*browser*</b>.
540
+ # A specific column in the table can also be specified.
541
+ #
542
+ # @param (see #click_table_row_with_text_by_id)
543
+ # @return (see #click)
544
+ #
545
+ def click_table_row_with_text_by_index(browser, what, text, desc = '', column = nil)
546
+ click_table_row_with_text(browser, :id, what, text, desc, column)
547
+ end
548
+
549
+ # Double click the first row which contains a particular string in a table identified by the value in its *:id* attribute.
550
+ # A specific column in the table can also be specified.
551
+ #
552
+ # @param (see #click_table_row_with_text_by_id)
553
+ # @return (see #click)
554
+ #
555
+ def double_click_table_row_with_text_by_id(browser, what, text, desc = '', column = nil)
556
+ double_click_table_row_with_text(browser, :id, what, text, desc, column)
557
+ end
558
+
559
+ # Double click the first row which contains a particular string in a table identified by its index
560
+ # in the array of tables contained in <b>*browser*</b>.
561
+ # A specific column in the table can also be specified.
562
+ # @param (see #click_table_row_with_text_by_id)
563
+ # @return (see #click)
564
+ #
565
+ def double_click_table_row_with_text_by_index(browser, idx, what, column = nil)
566
+ double_click_table_row_with_text(browser, :index, what, text, desc, column)
567
+ end
568
+
569
+ # @!endgroup Tables
570
+
571
+ # @!group Core
572
+
573
+ # Click a specifific button on a popup window.
574
+ # (Windows only)
575
+ # @param [String] title A string starting at the beginning of the title which uniquely identifies the popup window.
576
+ # @param [String] button The value displayed for the button (e.g. OK, Yes, Cancel, etc)
577
+ # @param [Fixnum] wait Integer indicating the number of seconds to wait for the popup window to appear.
578
+ # @return (see #click)
579
+ def click_popup_button(title, button, wait= 9, user_input=nil)
542
580
  #TODO: is winclicker still viable/available?
543
581
  wc = WinClicker.new
544
- if wc.clickWindowsButton(title, button, waitTime)
582
+ if wc.clickWindowsButton(title, button, wait)
545
583
  passed_to_log("Window '#{title}' button '#{button}' found and clicked.")
546
584
  true
547
585
  else
@@ -549,7 +587,7 @@ _Example_
549
587
  end
550
588
  wc = nil
551
589
  # get a handle if one exists
552
- # hwnd = $ie.enabled_popup(waitTime)
590
+ # hwnd = $ie.enabled_popup(wait)
553
591
  # if (hwnd) # yes there is a popup
554
592
  # w = WinClicker.new
555
593
  # if ( user_input )
@@ -565,240 +603,160 @@ _Example_
565
603
  # end
566
604
  end
567
605
 
568
- def select_option(browser, how, what, which, value, desc = '')
569
- msg = "Select option #{which}='#{value}' from list #{how}=#{what}. #{desc}"
570
- list = browser.select_list(how, what)
571
- case which
572
- when :text
573
- list.select(value)
574
- when :value
575
- list.select_value(value)
576
- when :index
577
- all = list.getAllContents
578
- txt = all[value]
579
- list.select(txt)
580
- else
581
- na = "#{__method__} cannot support select by '#{which}'. (#{msg})"
582
- debug_to_log(na, __LINE__, true)
583
- raise na
584
- end
585
- passed_to_log(msg)
586
- rescue
587
- failed_to_log("#Unable to #{msg}': '#{$!}'")
588
- end
589
-
590
- def select_option_from_list(list, what, what_strg, desc = '')
606
+ # Select option from select list (dropdown) already identified and passed to the method. Selection can be by *:text* or *:value*.
607
+ # @param [Watir::SelectList] list A reference to the specific select list object.
608
+ # @param [Symbol] how Either :text or :value.
609
+ # @param [String/Rexexp] what A string or regular expression that will uniquely identify the option to select.
610
+ # @param [String] desc Contains a message or description intended to appear in the log and/or report output
611
+ # @param [Boolean] nofail If true do not log a failed message if the option is not found in the select list.
612
+ # @return (see #click)
613
+ def select_option_from_list(list, how, what, desc = '', nofail = false)
614
+ msg = build_message("Select :#{how}=>'#{what}", desc)
591
615
  ok = true
592
- msg = "#{__method__.to_s.titleize} "
593
616
  if list
594
- msg << "list id=#{list.id}: "
595
- case what
617
+ case which
596
618
  when :text
597
- list.select(what_strg) #TODO: regex?
619
+ list.select(what) #TODO: regex?
598
620
  when :value
599
- list.select_value(what_strg) #TODO: regex?
621
+ list.select_value(what) #TODO: regex?
600
622
  when :index
601
- list.select(list.getAllContents[what_strg.to_i])
623
+ list.select(list.getAllContents[what.to_i])
602
624
  else
603
- msg << "select by #{what} not supported. #{desc} (#{__LINE__})"
604
- failed_to_log(msg)
625
+ failed_to_log("#{msg} Select by #{how} not supported.")
605
626
  ok = false
606
627
  end
607
628
  if ok
608
- msg << "#{what}='#{what_strg}' selected. #{desc}"
609
629
  passed_to_log(msg)
610
630
  true
631
+ else
632
+ if nofail
633
+ passed_to_log("#{msg} Option not found. No Fail specified.")
634
+ true
635
+ else
636
+ failed_to_log("#{msg} Option not found.")
637
+ end
611
638
  end
612
639
  else
613
- failed_to_log("#{__method__.to_s.titleize} list not found. #{desc} (#{__LINE__})")
640
+ failed_to_log("#{msg} Select list not found.")
614
641
  end
615
642
  rescue
616
- failed_to_log("#{__method__.to_s.titleize}: #{what}='#{what_strg}' could not be selected: '#{$!}'. #{desc} (#{__LINE__})")
643
+ failed_to_log("Unable to #{msg} '#{$!}'")
617
644
  end
618
645
 
619
- =begin rdoc
620
- :category: A_rdoc_test
621
- Select an option from a specific drop down list. The drop down (select list) is id
622
-
623
- _Parameters_::
624
-
625
- *browser* - a reference to the browser window to be tested
626
-
627
- *how* - the element attribute used to identify the specific element. Valid values depend on the kind of element.
628
- Common values: :text, :id, :title, :name, :class, :href (:link only)
629
-
630
- *what* - a string or a regular expression to be found in the *how* attribute that uniquely identifies the element.
631
-
632
- *desc* - a string containing a message or description intended to appear in the log and/or report output
633
-
634
- _Example_
646
+ # Select option from select list identified by *how* and *what*. Option is identified by *which* and *value*
647
+ # @param [Watir::Browser] browser A reference to the browser window or container element to be tested.
648
+ # @param [Symbol] how The element attribute used to identify the specific element.
649
+ # Valid values depend on the kind of element.
650
+ # Common values: :text, :id, :title, :name, :class, :href (:link only)
651
+ # @param [String, Regexp] what A string or a regular expression to be found in the specified attribute that uniquely identifies the element.
652
+ # @param [Symbol] which Either :text or :value.
653
+ # @param [String/Rexexp] option A string or regular expression that will uniquely identify the option to select.
654
+ # @param [String] desc Contains a message or description intended to appear in the log and/or report output
655
+ # @param [Boolean] nofail If true do not log a failed message if the option is not found in the select list.
656
+ # @return (see #click)
657
+ def select_option(browser, how, what, which, option, desc = '', nofail = false)
658
+ list = browser.select_list(how, what)
659
+ msg = build_message(" from list with :#{how}=>'#{what}", desc)
660
+ select_option_from_list(list, which, option, msg, nofail)
661
+ end
635
662
 
636
- # html for a link element:
637
- # <a href="http://pragmaticprogrammer.com/titles/ruby/" id="one" name="book">Pickaxe</a>
638
- click_no_wait(browser, :link, :text, 'Pickaxe')
663
+ # @!endgroup Core
639
664
 
640
- =end
665
+ # @!group Select
641
666
 
642
- def select_option_by_id_and_option_text(browser, strg, option, nofail=false, desc = '')
643
- msg = "Select list id=#{strg} option text='#{option}' selected."
644
- msg << " #{desc}" if desc.length > 0
645
- list = browser.select_list(:id, strg)
646
- list.select(option)
647
- # browser.select_list(:id, strg).select(option) #(browser.select_list(:id, strg).getAllContents[option])
648
- if validate(browser, @myName, __LINE__)
649
- passed_to_log(msg)
650
- true
651
- end
652
- rescue
653
- if !nofail
654
- failed_to_log("#{msg} '#{$!}'")
655
- end
667
+ # Select option from select list (dropdown) identified by the value in its *:id* attribute. Option is identified by *which* and *value*
668
+ # @param [Watir::Browser] browser A reference to the browser window or container element to be tested.
669
+ # @param [String, Regexp] what A string or a regular expression to be found in the specified attribute that uniquely identifies the element.
670
+ # @param [String/Rexexp] option A string or regular expression that will uniquely identify the option to select.
671
+ # @param [String] desc Contains a message or description intended to appear in the log and/or report output
672
+ # @param [Boolean] nofail If true do not log a failed message if the option is not found in the select list.
673
+ # @return (see #click)
674
+ def select_option_by_id_and_option_text(browser, what, option, nofail = false, desc = '')
675
+ select_option(browser, :id, what, :text, option, desc, nofail)
656
676
  end
657
677
 
658
678
  alias select_option_by_id select_option_by_id_and_option_text
659
679
  alias select_option_by_id_and_text select_option_by_id_and_option_text
660
680
 
661
- def select_option_by_name_and_option_text(browser, strg, option, desc = '')
662
- msg = "Select list name=#{strg} option text='#{option}' selected."
663
- msg << " #{desc}" if desc.length > 0
664
- begin
665
- list = browser.select_list(:name, strg)
666
- rescue => e
667
- if not rescue_me(e, __method__, "#{__LINE__}: select_list(:name,'#{strg}')", "#{browser.class}")
668
- raise e
669
- end
670
- end
671
- begin
672
- list.select(option)
673
- rescue => e
674
- if not rescue_me(e, __method__, "#{__LINE__}: select_list#select('#{option}')", "#{browser.class}")
675
- raise e
676
- end
677
- end
678
- if validate(browser, @myName, __LINE__)
679
- passed_to_log(msg)
680
- true
681
- end
682
- rescue
683
- failed_to_log("#{msg} '#{$!}'")
681
+ # Select option from select list (dropdown) identified by the value in its *:name* attribute. Option is selected by its *:text* attribute.
682
+ # @param [Watir::Browser] browser A reference to the browser window or container element to be tested.
683
+ # @param [String, Regexp] what A string or a regular expression to be found in the specified attribute that uniquely identifies the element.
684
+ # @param [String/Rexexp] option A string or regular expression that will uniquely identify the option to select.
685
+ # @param [String] desc Contains a message or description intended to appear in the log and/or report output
686
+ # @return (see #click)
687
+ def select_option_by_name_and_option_text(browser, what, option, desc = '')
688
+ select_option(browser, :name, what, :text, option, desc)
684
689
  end
685
690
 
686
691
  alias select_option_by_name select_option_by_name_and_option_text
687
692
 
688
- def select_option_by_title_and_option_text(browser, strg, option, desc = '')
689
- msg = "Select list name=#{strg} option text='#{option}' selected."
690
- msg << " #{desc}" if desc.length > 0
691
- browser.select_list(:title, strg).select(option)
692
- if validate(browser, @myName, __LINE__)
693
- passed_to_log(msg)
694
- end
695
- rescue
696
- failed_to_log("#{msg} '#{$!}'")
693
+ # Select option from select list (dropdown) identified by the value in its *:name* attribute. Option is selected by its *:text* attribute.
694
+ # @param (see #select_option_by_name_and_option_text)
695
+ # @return (see #click)
696
+ def select_option_by_title_and_option_text(browser, what, option, desc = '')
697
+ select_option(browser, :title, what, :text, option, desc)
697
698
  end
698
699
 
699
- def select_option_by_class_and_option_text(browser, strg, option, desc = '')
700
- msg = "Select list class=#{strg} option text='#{option}' selected."
701
- msg << " #{desc}" if desc.length > 0
702
- browser.select_list(:class, strg).select(option)
703
- if validate(browser, @myName, __LINE__)
704
- passed_to_log(msg)
705
- true
706
- end
707
- rescue
708
- failed_to_log("#{msg} '#{$!}'")
700
+ # Select option from select list (dropdown) identified by the value in its *:class* attribute. Option is selected by its *:text* attribute.
701
+ # @param (see #select_option_by_name_and_option_text)
702
+ # @return (see #click)
703
+ def select_option_by_class_and_option_text(browser, what, option, desc = '')
704
+ select_option(browser, :class, what, :text, option, desc)
709
705
  end
710
706
 
711
- def select_option_by_name_and_option_value(browser, strg, option, desc = '')
712
- msg = "Select list name=#{strg} option value='#{option}' selected."
713
- msg << " #{desc}" if desc.length > 0
714
- begin
715
- list = browser.select_list(:name, strg)
716
- rescue => e
717
- if not rescue_me(e, __method__, "#{__LINE__}: select_list(:name,'#{strg}')", "#{browser.class}")
718
- raise e
719
- end
720
- end
721
- begin
722
- list.select_value(option)
723
- rescue => e
724
- if not rescue_me(e, __method__, "#{__LINE__}: select_list#select_value('#{option}')", "#{browser.class}")
725
- raise e
726
- end
727
- end
728
- if validate(browser, @myName, __LINE__)
729
- passed_to_log(msg)
730
- true
731
- end
732
- rescue
733
- failed_to_log("#{msg} '#{$!}'")
707
+ # Select option from select list (dropdown) identified by the value in its *:name* attribute. Option is selected by its *:value* attribute.
708
+ # @param (see #select_option_by_name_and_option_text)
709
+ # @return (see #click)
710
+ def select_option_by_name_and_option_value(browser, what, option, desc = '')
711
+ select_option(browser, :name, what, :value, option, desc)
734
712
  end
735
713
 
736
- def select_option_by_id_and_option_value(browser, strg, option, desc = '')
737
- msg = "Select list name=#{strg} option value='#{option}' selected."
738
- msg << " #{desc}" if desc.length > 0
739
- begin
740
- list = browser.select_list(:id, strg)
741
- rescue => e
742
- if not rescue_me(e, __method__, "#{__LINE__}: select_list(:text,'#{strg}')", "#{browser.class}")
743
- raise e
744
- end
745
- end
746
- sleep(0.5) unless @targetBrowser.abbrev == 'IE'
747
- begin
748
- list.select_value(option)
749
- rescue => e
750
- if not rescue_me(e, __method__, "#{__LINE__}: select_list#select_value('#{option}')", "#{browser.class}")
751
- raise e
752
- end
753
- end
754
- if validate(browser, @myName, __LINE__)
755
- passed_to_log(msg)
756
- true
757
- end
758
- rescue
759
- failed_to_log("#{msg} '#{$!}'")
714
+ # Select option from select list (dropdown) identified by the value in its *:id* attribute. Option is selected by its *:value* attribute.
715
+ # @param (see #select_option_by_name_and_option_text)
716
+ # @return (see #click)
717
+ def select_option_by_id_and_option_value(browser, what, option, desc = '')
718
+ select_option(browser, :id, what, :value, option, desc)
760
719
  end
761
720
 
762
- def select_option_by_id_and_index(browser, strg, idx, desc = '')
763
- msg = "Select list id=#{strg} index='#{idx}' selected."
764
- msg << " #{desc}" if desc.length > 0
765
- list = browser.select_list(:id, strg)
766
- all = list.getAllContents
767
- txt = all[idx]
768
- browser.select_list(:id, strg).set(browser.select_list(:id, strg).getAllContents[idx])
769
- if validate(browser, @myName, __LINE__)
770
- passed_to_log(msg)
771
- true
772
- end
773
- rescue
774
- failed_to_log("#{msg} '#{$!}'")
721
+ # Select option from select list (dropdown) identified by the value in its *:id* attribute.
722
+ # Option is selected by its index withing the select list's array of options.
723
+ # @param [Watir::Browser] browser A reference to the browser window or container element to be tested.
724
+ # @param [String, Regexp] what A string or a regular expression to be found in the specified attribute that uniquely identifies the element.
725
+ # @param [Fixnum] index An integer that indicates the index of the element within the array of options.
726
+ # @param [String] desc Contains a message or description intended to appear in the log and/or report output
727
+ # @return (see #click)
728
+ def select_option_by_id_and_index(browser, what, index, desc = '')
729
+ select_option(browser, :id, what, :index, index, desc)
775
730
  end
776
731
 
777
- def select_option_by_name_and_index(browser, strg, idx)
778
- # TODO add check that both list and option exist
779
- msg = "Select list name=#{strg} index='#{idx}' selected."
780
- msg << " #{desc}" if desc.length > 0
781
- browser.select_list(:name, strg).set(browser.select_list(:name, strg).getAllContents[idx])
782
- if validate(browser, @myName, __LINE__)
783
- passed_to_log(msg)
784
- true
785
- end
786
- rescue
787
- failed_to_log("#{msg} '#{$!}'")
732
+ # Select option from select list (dropdown) identified by the value in its *:name* attribute. Option is selected by its *:index* attribute.
733
+ # @param (see #select_option_by_id_and_index)
734
+ # @return (see #click)
735
+ def select_option_by_name_and_index(browser, what, option, desc = '')
736
+ select_option(browser, :name, what, :index, option, desc)
788
737
  end
789
738
 
790
- def select_option_by_xpath_and_index(browser, strg, idx)
791
- msg = "Select list xpath=#{strg} index='#{idx}' selected."
792
- msg << " #{desc}" if desc.length > 0
793
- browser.select_list(:xpath, strg).set(browser.select_list(:xpath, strg).getAllContents[idx])
794
- if validate(browser, nil, __LINE__)
795
- passed_to_log(msg)
796
- true
797
- end
798
- rescue
799
- failed_to_log("#{msg} '#{$!}'")
739
+ # Select option from select list (dropdown) identified by the xpath command supplied in *what*. Option is selected by its *:index* attribute.
740
+ # @param (see #select_option_by_id_and_index)
741
+ # @return (see #click)
742
+ def select_option_by_xpath_and_index(browser, what, option, desc = '')
743
+ select_option(browser, :xpath, what, :index, option, desc)
800
744
  end
801
745
 
746
+ # @!endgroup Select
747
+
748
+ # @!group Core
749
+
750
+ # Set radio button or checkbox to selected.
751
+ # @param [Watir::Browser] browser A reference to the browser window or container element to be tested.
752
+ # @param [Symbol] element The kind of element to click. Must be either :radio or :checkbox.
753
+ # @param [Symbol] how The element attribute used to identify the specific element.
754
+ # Valid values depend on the kind of element.
755
+ # Common values: :text, :id, :title, :name, :class, :href (:link only)
756
+ # @param [String, Regexp] what A string or a regular expression to be found in the specified attribute that uniquely identifies the element.
757
+ # @param [String, Regexp] value A string or a regular expression to be found in the *:value* attribute of the radio or checkbox.
758
+ # @param [String] desc Contains a message or description intended to appear in the log and/or report output
759
+ # @return (see #click)
802
760
  def set(browser, element, how, what, value = nil, desc = '')
803
761
  msg = "Set #{element} #{how}=>'#{what}' "
804
762
  msg << ", :value=>#{value} " if value
@@ -811,112 +769,265 @@ _Example_
811
769
  else
812
770
  failed_to_log("#{__method__}: #{element} not supported")
813
771
  end
814
- if validate(browser, @myName, __LINE__)
815
772
  passed_to_log(msg)
816
773
  true
817
- end
818
774
  rescue
819
- failed_to_log("#{msg} '#{$!}'")
820
- end
821
-
822
- def set_checkbox(browser, how, what, value, desc = '')
823
- set(browser, :checkbox, how, what, value, desc)
824
- end
825
-
826
- def set_checkbox_by_class(browser, strg, value = nil, desc = '')
827
- set(browser, :checkbox, :class, strg, value, desc)
828
- end
829
-
830
- def set_checkbox_by_id(browser, strg, value = nil, desc = '')
831
- set(browser, :checkbox, :id, strg, value, desc)
832
- end
833
-
834
- def set_checkbox_by_name(browser, strg, value = nil, desc = '')
835
- set(browser, :checkbox, :name, strg, value, desc)
836
- end
837
-
838
- def set_checkbox_by_title(browser, strg, value = nil, desc = '')
839
- set(browser, :checkbox, :title, strg, value, desc)
840
- end
841
-
842
- def set_checkbox_by_value(browser, strg, desc = '')
843
- set(browser, :checkbox, :value, strg, nil, desc)
844
- end
775
+ failed_to_log("#{msg} '#{$!}'")
776
+ end
845
777
 
846
- def set_radio(browser, how, what, value = nil, desc = '')
847
- set(browser, :radio, how, what, value, desc)
778
+ # Set file field element, identified by *how* and +what, to a specified file path and name.
779
+ # @param [Watir::Browser] browser A reference to the browser window or container element to be tested.
780
+ # @param [Symbol] how The element attribute used to identify the specific element.
781
+ # Valid values depend on the kind of element.
782
+ # Common values: :text, :id, :title, :name, :class, :href (:link only)
783
+ # @param [String, Regexp] what A string or a regular expression to be found in the specified attribute that uniquely identifies the element.
784
+ # @param [String] filespec The full path and name of the target file.
785
+ # @param [String] desc Contains a message or description intended to appear in the log and/or report output
786
+ # @return (see #click)
787
+ def set_file_field(browser, how, what, filespec, desc = '')
788
+ msg = build_message("Set file field #{how}=>#{what} to '#{filespec}.", desc)
789
+ ff = browser.file_field(how, what)
790
+ if ff
791
+ ff.set filespec
792
+ sleep_for(8)
793
+ passed_to_log(msg)
794
+ true
795
+ else
796
+ failed_to_log("#{msg} File field not found.")
797
+ end
798
+ rescue
799
+ failed_to_log("Unable to #{msg} '#{$!}'")
848
800
  end
849
801
 
802
+ # Set radio button as selected using two element attributes.
803
+ # @param [Watir::Browser] browser A reference to the browser window or container element to be tested.
804
+ # @param [Symbol] how1 The first element attribute used to identify the specific element.
805
+ # Valid values depend on the kind of element.
806
+ # Common values: :text, :id, :title, :name, :class, :href (:link only)
807
+ # @param [String, Regexp] what1 A string or a regular expression to be found in the specified attribute that uniquely identifies the element.
808
+ # @param [Symbol] how2 The second element attribute used to identify the specific element.
809
+ # @param [String, Regexp] what2 A string or a regular expression to be found in the specified attribute that uniquely identifies the element.
810
+ # @param [String] desc Contains a message or description intended to appear in the log and/or report output
811
+ # @return (see #click)
850
812
  def set_radio_two_attributes(browser, how1, what1, how2, what2, desc = '')
851
- msg = "Set radio #{how1}='#{what1}', #{how2}= #{what2}"
852
- msg << " '#{desc}' " if desc.length > 0
813
+ msg = build_message("Set radio #{how1}='#{what1}', #{how2}= #{what2}", desc)
853
814
  browser.radio(how1 => what1, how2 => what2).set
854
- if validate(browser, @myName, __LINE__)
855
815
  passed_to_log(msg)
856
816
  true
857
- end
858
817
  rescue
859
818
  failed_to_log("#{msg} '#{$!}'")
860
819
  end
861
820
 
862
- def set_radio_by_class(browser, strg, value = nil, desc = '')
863
- set(browser, :radio, :class, strg, value, desc)
821
+ #def set_radio_no_wait_by_index(browser, index, desc = '')
822
+ # #TODO: Not supported by Watir 1.8.x
823
+ # msg = "Radio :index=#{index} "
824
+ # radios = browser.radios
825
+ # debug_to_log("\n#{radios}")
826
+ # radio = radios[index]
827
+ # debug_to_log("\n#{radio}")
828
+ # radio.click_no_wait
829
+ # msg << 'set ' + desc
830
+ # passed_to_log(msg)
831
+ # true
832
+ #rescue
833
+ # msg << 'not found ' + desc
834
+ # failed_to_log("#{msg} (#{__LINE__})")
835
+ #end
836
+
837
+ # @!endgroup Core
838
+
839
+ # @!group Set
840
+
841
+ # Set checkbox as checked. Checkbox is identified by the attribute specified in *how* with value *what*. It's *:value* attribute can also be used
842
+ # when needed by specifying *value*.
843
+ # @param [Watir::Browser] browser A reference to the browser window or container element to be tested.
844
+ # @param [Symbol] how The element attribute used to identify the specific checkbox.
845
+ # Valid values depend on the kind of element.
846
+ # Common values: :text, :id, :title, :name, :class, :href (:link only)
847
+ # @param [String, Regexp] what A string or a regular expression to be found in the specified attribute that uniquely identifies the checkbox.
848
+ # @param [String, Regexp] value A string or a regular expression to be found in the *:value* attribute of the checkbox.
849
+ # @param [String] desc Contains a message or description intended to appear in the log and/or report output
850
+ # @return (see #click)
851
+ def set_checkbox(browser, how, what, value = nil, desc = '')
852
+ set(browser, :checkbox, how, what, value, desc)
864
853
  end
865
854
 
866
- def set_radio_by_id(browser, strg, value = nil, desc = '')
867
- set(browser, :radio, :id, strg, value, desc)
855
+ # Set checkbox as checked identified by its *:class* attribute with the value in *what*. It's *:value* attribute can also be used
856
+ # when needed by specifying *value*.
857
+ # @param [Watir::Browser] browser A reference to the browser window or container element to be tested.
858
+ # @param [String, Regexp] what A string or a regular expression to be found in the specified attribute that uniquely identifies the checkbox.
859
+ # @param [String, Regexp] value A string or a regular expression to be found in the *:value* attribute of the checkbox.
860
+ # @param [String] desc Contains a message or description intended to appear in the log and/or report output
861
+ # @return (see #click)
862
+ def set_checkbox_by_class(browser, what, value = nil, desc = '')
863
+ set(browser, :checkbox, :class, what, value, desc)
868
864
  end
869
865
 
870
- def set_radio_by_index(browser, index, desc = '')
871
- set(browser, :radio, :index, index, value, desc)
866
+ # Set checkbox as checked identified by its *:class* attribute with the value in *what*. It's *:value* attribute can also be used
867
+ # when needed by specifying *value*.
868
+ # @param (see #set_checkbox_by_class)
869
+ # @return (see #click)
870
+ def set_checkbox_by_id(browser, what, value = nil, desc = '')
871
+ set(browser, :checkbox, :id, what, value, desc)
872
872
  end
873
873
 
874
- def set_radio_by_name(browser, strg, value = nil, desc = '')
875
- set(browser, :radio, :name, strg, value, desc)
874
+ # Set checkbox as checked identified by its *:name* attribute with the value in *what*. It's *:value* attribute can also be used
875
+ # when needed by specifying *value*.
876
+ # @param (see #set_checkbox_by_class)
877
+ # @return (see #click)
878
+ def set_checkbox_by_name(browser, what, value = nil, desc = '')
879
+ set(browser, :checkbox, :name, what, value, desc)
876
880
  end
877
881
 
878
- def set_radio_by_title(browser, strg, value = nil, desc = '')
879
- set(browser, :radio, :title, strg, value, desc)
882
+ # Set checkbox as checked identified by its *:title* attribute with the value in *what*. It's *:value* attribute can also be used
883
+ # when needed by specifying *value*.
884
+ # @param (see #set_checkbox_by_class)
885
+ # @return (see #click)
886
+ def set_checkbox_by_title(browser, what, value = nil, desc = '')
887
+ set(browser, :checkbox, :title, what, value, desc)
880
888
  end
881
889
 
882
- def set_radio_by_value(browser, strg, desc = '')
883
- set(browser, :radio, :value, strg, nil, desc)
890
+ # Set checkbox as checked identified by its *:value* attribute with the value in *what*.
891
+ # @param [Watir::Browser] browser A reference to the browser window or container element to be tested.
892
+ # @param [String, Regexp] what A string or a regular expression to be found in the specified attribute that uniquely identifies the checkbox.
893
+ # @param [String] desc Contains a message or description intended to appear in the log and/or report output
894
+ # @return (see #click)
895
+ def set_checkbox_by_value(browser, what, desc = '')
896
+ set(browser, :checkbox, :value, what, nil, desc)
884
897
  end
885
898
 
886
- def set_radio_no_wait_by_index(browser, index, desc = '')
887
- #TODO: Not supported by Watir 1.8.x
888
- msg = "Radio :index=#{index} "
889
- radios = browser.radios
890
- debug_to_log("\n#{radios}")
891
- radio = radios[index]
892
- debug_to_log("\n#{radio}")
893
- radio.click_no_wait
894
- if validate(browser)
895
- msg << 'set ' + desc
896
- passed_to_log(msg)
897
- true
898
- end
899
- rescue
900
- msg << 'not found ' + desc
901
- failed_to_log("#{msg} (#{__LINE__})")
899
+ # Set radio button as set. Radio is identified by the attribute specified in *how* with value *what*. It's *:value* attribute can also be used
900
+ # when needed by specifying *value*.
901
+ # @param (see #set_checkbox)
902
+ # @return (see #click)
903
+ def set_radio(browser, how, what, value = nil, desc = '')
904
+ set(browser, :radio, how, what, value, desc)
902
905
  end
903
906
 
904
- def set_radio_by_name_and_index(browser, name, index, desc = '')
905
- set_radio_two_attributes(browser, :name, name, :index, index, desc)
907
+ # Set radio button as set identified by its *:class* attribute with the value in *what*. It's *:value* attribute can also be used
908
+ # when needed by specifying *value*.
909
+ # @param (see #set_checkbox_by_class)
910
+ def set_radio_by_class(browser, what, value = nil, desc = '')
911
+ set(browser, :radio, :class, what, value, desc)
906
912
  end
907
913
 
908
- def set_radio_by_name_and_text(browser, name, text, desc = '')
909
- set_radio_two_attributes(browser, :name, name, :text, text, desc)
910
- end
914
+ # Set radio button as set identified by its *:id* attribute with the value in *what*. It's *:value* attribute can also be used
915
+ # when needed by specifying *value*.
916
+ # @param (see #set_checkbox_by_class)
917
+ # @return (see #click)
918
+ def set_radio_by_id(browser, what, value = nil, desc = '')
919
+ set(browser, :radio, :id, what, value, desc)
920
+ end
911
921
 
922
+ # Set radio button as set identified by its index within the array of radio buttons found in the container specified by *browser*.
923
+ # @param [Watir::Browser] browser A reference to the browser window or container element to be tested.
924
+ # @param [Fixnum] index An integer that indicates the index of the element within *browser*.
925
+ # @param [String] desc Contains a message or description intended to appear in the log and/or report output
926
+ # @return (see #click)
927
+ def set_radio_by_index(browser, index, desc = '')
928
+ set(browser, :radio, :index, index, nil, desc)
929
+ end
930
+
931
+ # Set radio button as set identified by its *:name* attribute with the value in *what*. It's *:value* attribute can also be used
932
+ # when needed by specifying *value*.
933
+ # @param (see #set_checkbox_by_class)
934
+ # @return (see #click)
935
+ def set_radio_by_name(browser, what, value = nil, desc = '')
936
+ set(browser, :radio, :name, what, value, desc)
937
+ end
938
+
939
+ # Set radio button as set identified by its *:title* attribute with the value in *what*. It's *:value* attribute can also be used
940
+ # when needed by specifying *value*.
941
+ # @param (see #set_checkbox_by_class)
942
+ # @return (see #click)
943
+ def set_radio_by_title(browser, what, value = nil, desc = '')
944
+ set(browser, :radio, :title, what, value, desc)
945
+ end
946
+
947
+ # Set radio button as set identified by its *:value* attribute with the value in *what*.
948
+ # @param (see #set_checkbox_by_value)
949
+ # @return (see #click)
950
+ def set_radio_by_value(browser, what, desc = '')
951
+ set(browser, :radio, :value, what, nil, desc)
952
+ end
953
+
954
+ # Set radio button as set identified by its *:name* attribute with the value in *what*
955
+ # and its index within the array of radio buttons with that :name
956
+ # @param [Watir::Browser] browser A reference to the browser window or container element to be tested.
957
+ # @param [String, Regexp] what A string or a regular expression to be found in the *:name* attribute that identifies the group of radio buttons.
958
+ # @param [Fixnum] index An integer that indicates the index of the radio button to be set.
959
+ # @param [String] desc Contains a message or description intended to appear in the log and/or report output
960
+ # @return (see #click)
961
+ def set_radio_by_name_and_index(browser, what, index, desc = '')
962
+ set_radio_two_attributes(browser, :name, what, :index, index, desc)
963
+ end
964
+
965
+ # Set radio button as set identified by its *:name* attribute with the value in *what*
966
+ # and its index within the array of radio buttons with that :name
967
+ # @param [Watir::Browser] browser A reference to the browser window or container element to be tested.
968
+ # @param [String, Regexp] what A string or a regular expression to be found in the *:name* attribute that identifies the group of radio buttons.
969
+ # @param [String, Regexp] text A string or a regular expression to be found in the *:text* attribute that uniquely identifies the the radio button to be set.
970
+ # @param [String] desc Contains a message or description intended to appear in the log and/or report output
971
+ # @return (see #click)
972
+ def set_radio_by_name_and_text(browser, what, text, desc = '')
973
+ set_radio_two_attributes(browser, :name, what, :text, text, desc)
974
+ end
975
+
976
+ # Set radio button as set identified by its *:value* attribute with the value in *what*
977
+ # and its index within the array of radio buttons with that :name
978
+ # @param [Watir::Browser] browser A reference to the browser window or container element to be tested.
979
+ # @param [String, Regexp] value A string or a regular expression to be found in the *:value* attribute that identifies the group of radio buttons.
980
+ # @param [Fixnum] index An integer that indicates the index of the radio button to be set.
981
+ # @param [String] desc Contains a message or description intended to appear in the log and/or report output
982
+ # @return (see #click)
912
983
  def set_radio_by_value_and_index(browser, value, index, desc = '')
913
984
  set_radio_two_attributes(browser, :value, value, :index, index, desc)
914
985
  end
915
986
 
916
- def set_radio_by_name_and_value(browser, strg, value, desc = '')
917
- set_radio(browser, :name, strg, value, desc)
918
- end
919
-
987
+ # Set radio button as set identified by its *:name* attribute with the value in *what*
988
+ # and the *:value* attribute with the value in *value*.
989
+ # @param [Watir::Browser] browser A reference to the browser window or container element to be tested.
990
+ # @param [String, Regexp] what A string or a regular expression to be found in the *:name* attribute that identifies the group of radio buttons.
991
+ # @param [String, Regexp] value A string or a regular expression to be found in the *:value* attribute that uniquely identifies the the radio button to be set.
992
+ # @param [String] desc Contains a message or description intended to appear in the log and/or report output
993
+ # @return (see #click)
994
+ def set_radio_by_name_and_value(browser, what, value, desc = '')
995
+ set_radio(browser, :name, what, value, desc)
996
+ end
997
+
998
+ # Set file field element, identified by its *:name* attribute with the value in *what*.
999
+ # @param [Watir::Browser] browser A reference to the browser window or container element to be tested.
1000
+ # @param [String, Regexp] what A string or a regular expression to be found in the specified attribute that uniquely identifies the element.
1001
+ # @param [String] filespec The full path and name of the target file.
1002
+ # @param [String] desc Contains a message or description intended to appear in the log and/or report output
1003
+ # @return (see #click)
1004
+ def set_file_field_by_name(browser, what, filespec, desc = '')
1005
+ set_file_field(browser, :name, what, filespec, desc)
1006
+ end
1007
+
1008
+ # Set file field element, identified by its *:id* attribute with the value in *what*.
1009
+ # @param (see #set_file_field_by_name)
1010
+ # @return (see #click)
1011
+ def set_file_field_by_id(browser, what, filespec, desc = '')
1012
+ set_file_field(browser, :id, what, filespec, desc)
1013
+ end
1014
+
1015
+ # @!endgroup Set
1016
+
1017
+ # @!group Core
1018
+
1019
+ # Clear (unset) radio, checkbox or text field as identified by the attribute specified in *how* with value *what*.
1020
+ # It's *:value* attribute can also be used when needed by specifying *value* (Ignored for text_field).
1021
+ # @param [Watir::Browser] browser A reference to the browser window or container element to be tested.
1022
+ # @param [Symbol] element The kind of element to clear. Must be :radio, :checkbox or :text_field.
1023
+ # @param [Symbol] how The element attribute used to identify the specific checkbox.
1024
+ # Valid values depend on the kind of element.
1025
+ # Common values: :text, :id, :title, :name, :class.
1026
+ # @param [String, Regexp] what A string or a regular expression to be found in the specified attribute that uniquely identifies the element.
1027
+ # @param [String, Regexp] value A string or a regular expression to be found in the *:value* attribute of the element.
1028
+ # In the case of text_field this is the string to be entered in the field.
1029
+ # @param [String] desc Contains a message or description intended to appear in the log and/or report output
1030
+ # @return (see #click)
920
1031
  def clear(browser, element, how, what, value = nil, desc = '')
921
1032
  msg = "Clear #{element} #{how}=>'#{what}' "
922
1033
  msg << ", value=>#{value} " if value
@@ -931,122 +1042,89 @@ _Example_
931
1042
  else
932
1043
  failed_to_log("#{__method__}: #{element} not supported")
933
1044
  end
934
- if validate(browser, @myName, __LINE__)
935
1045
  passed_to_log(msg)
936
1046
  true
937
- end
938
1047
  rescue
939
1048
  failed_to_log("#{msg} '#{$!}'")
940
1049
  end
941
1050
 
942
- def clear_checkbox(browser, how, what, value = nil, desc = '')
943
- clear(browser, :checkbox, how, what, value, desc)
944
- end
1051
+ # @!endgroup Core
945
1052
 
946
- def clear_checkbox_by_name(browser, strg, value = nil, desc = '')
947
- clear(browser, :checkbox, :name, strg, value, desc)
948
- end
1053
+ # @!group Clear
949
1054
 
950
- def clear_checkbox_by_id(browser, strg, value = nil, desc = '')
951
- clear(browser, :checkbox, :id, strg, value, desc)
1055
+ # Clear (uncheck) checkbox identified by the attribute specified in *how* with value *what*.
1056
+ # It's *:value* attribute can also be used when needed by specifying *value*.
1057
+ # @param [Watir::Browser] browser A reference to the browser window or container element to be tested.
1058
+ # @param [Symbol] how The element attribute used to identify the specific checkbox.
1059
+ # Valid values depend on the kind of element.
1060
+ # Common values: :text, :id, :title, :name, :class.
1061
+ # @param [String, Regexp] what A string or a regular expression to be found in the specified attribute that uniquely identifies the element.
1062
+ # @param [String, Regexp] value A string or a regular expression to be found in the *:value* attribute of the element.
1063
+ # @param [String] desc Contains a message or description intended to appear in the log and/or report output
1064
+ # @return (see #click)
1065
+ def clear_checkbox(browser, how, what, value = nil, desc = '')
1066
+ clear(browser, :checkbox, how, what, value, desc)
952
1067
  end
953
1068
 
1069
+ # Clear (uncheck) checkbox identified by its *:name* attribute with value *what*.
1070
+ # It's *:value* attribute can also be used when needed by specifying *value*.
1071
+ # @param [Watir::Browser] browser A reference to the browser window or container element to be tested.
1072
+ # @param [String, Regexp] what A string or a regular expression to be found in the specified attribute that uniquely identifies the element.
1073
+ # @param [String, Regexp] value A string or a regular expression to be found in the *:value* attribute of the element.
1074
+ # @param [String] desc Contains a message or description intended to appear in the log and/or report output
1075
+ # @return (see #click)
1076
+ def clear_checkbox_by_name(browser, what, value = nil, desc = '')
1077
+ clear(browser, :checkbox, :name, what, value, desc)
1078
+ end
1079
+
1080
+ # Clear (uncheck) checkbox identified by its *:id* attribute with value *what*.
1081
+ # It's *:value* attribute can also be used when needed by specifying *value*.
1082
+ # @param (see #set_file_field_by_name)
1083
+ # @return (see #click)
1084
+ def clear_checkbox_by_name(browser, what, value = nil, desc = '')
1085
+ clear(browser, :checkbox, :id, what, value, desc)
1086
+ end
1087
+
1088
+ # Clear (unset) radio button identified by the attribute specified in *how* with value *what*.
1089
+ # It's *:value* attribute can also be used when needed by specifying *value*.
1090
+ # This clears the specified radio without setting any other radio buttons on.
1091
+ # @param [Watir::Browser] browser A reference to the browser window or container element to be tested.
1092
+ # @param [Symbol] how The element attribute used to identify the specific checkbox.
1093
+ # Valid values depend on the kind of element.
1094
+ # Common values: :text, :id, :title, :name, :class.
1095
+ # @param [String, Regexp] what A string or a regular expression to be found in the specified attribute that uniquely identifies the element.
1096
+ # @param [String, Regexp] value A string or a regular expression to be found in the *:value* attribute of the element.
1097
+ # @param [String] desc Contains a message or description intended to appear in the log and/or report output
1098
+ # @return (see #click)
954
1099
  def clear_radio(browser, how, what, value = nil, desc = '')
955
1100
  clear(browser, :radio, how, what, value, desc)
956
1101
  end
957
1102
 
958
- # Set skip_value_check = true when string is altered by application and/or
959
- # this method will be followed by validate_text
960
- def clear_textfield(browser, how, which, skip_value_check = false)
961
- if browser.text_field(how, which).exists?
962
- tf = browser.text_field(how, which)
963
- if validate(browser, @myName, __LINE__)
964
- tf.clear
965
- if validate(browser, @myName, __LINE__)
966
- if tf.value == ''
967
- passed_to_log("Textfield #{how}='#{which}' cleared.")
968
- true
969
- elsif skip_value_check
970
- passed_to_log("Textfield #{how}='#{which}' cleared. (skip value check)")
971
- true
972
- else
973
- failed_to_log("Textfield #{how}='#{which}' not cleared: Found:'#{tf.value}'. (#{__LINE__})")
974
- end
975
- end
976
- end
977
- else
978
- failed_to_log("Textfield id='#{id}' to clear. (#{__LINE__})")
979
- end
980
- rescue
981
- failed_to_log("Textfield id='#{id}' could not be cleared: '#{$!}'. (#{__LINE__})")
982
- end
983
-
984
- def set_file_field(browser, how, what, filespec, desc = '')
985
- msg = "Set file field #{how}=>#{what} to '#{filespec}."
986
- msg << " #{desc}" if desc.length > 0
987
- ff = browser.file_field(how, what)
988
- if ff
989
- ff.set filespec
990
- sleep_for(8)
991
- if validate(browser, @myName, __LINE__)
992
- passed_to_log(msg)
993
- true
994
- end
995
- else
996
- failed_to_log("#{msg} File field not found.")
997
- end
998
- rescue
999
- failed_to_log("Unable to #{msg} '#{$!}'")
1000
- end
1001
-
1002
- def set_file_field_by_name(browser, strg, path, desc = '')
1003
- set_file_field(browser, :name, strg, path, desc)
1004
- end
1005
-
1006
- def set_file_field_by_id(browser, strg, path, desc = '')
1007
- set_file_field(browser, :id, strg, path, desc)
1008
- end
1009
-
1010
- =begin rdoc
1011
- :category: A_rdoc_test
1012
- Enter a string into a text field element identified by an attribute type and a value.
1013
- After the entry the value in the text field is validated against the input value unless the *skip_value_check*
1014
- parameter is set to true
1015
-
1016
- _Parameters_::
1017
-
1018
- *browser* - a reference to the browser window to be tested
1019
-
1020
- *how* - the element attribute used to identify the specific element. Valid values depend on the kind of element.
1021
- Common values: :text, :id, :title, :name, :class, :href (:link only)
1022
-
1023
- *what* - a string or a regular expression to be found in the *how* attribute that uniquely identifies the element.
1103
+ # @!endgroup Clear
1024
1104
 
1025
- *value* - a string to be entered in the text field
1026
-
1027
- *desc* - a string containing a message or description intended to appear in the log and/or report output
1028
-
1029
- *skip_value_check* (Optional, default is false). Set to true to prevent the built-in verification
1030
- that the text field actually contains the value entered. Useful when application reformats
1031
- or otherwise edits the input string.
1032
-
1033
- _Example_
1034
-
1035
- set_text_field(browser, :name, /thisTextfield/, 'The text to enter')
1036
-
1037
- =end
1105
+ # @!group Core
1038
1106
 
1107
+ # Set text field as identified by the attribute specified in *how* with value in *what* to the string specified in *value*.
1108
+ # This method differs from set() in that it validates that the text field has been set to the specified value.
1109
+ # The value verification can be turned off by setting *skip_value_check* to true.
1110
+ # This is useful when the text_field performs formatting on the entered string. See set_text_field_and_validate()
1111
+ # @param [Watir::Browser] browser A reference to the browser window or container element to be tested.
1112
+ # @param [Symbol] how The element attribute used to identify the specific checkbox.
1113
+ # Valid values depend on the kind of element.
1114
+ # Common values: :text, :id, :title, :name, :class.
1115
+ # @param [String, Regexp] what A string or a regular expression to be found in the specified attribute that uniquely identifies the element.
1116
+ # @param [String] value A string to enter into the text field.
1117
+ # @param [String] desc Contains a message or description intended to appear in the log and/or report output
1118
+ # @param [Boolean] skip_value_check Forces verification of value in text field to pass.
1119
+ # @return (see #click)
1039
1120
  def set_text_field(browser, how, what, value, desc = '', skip_value_check = false)
1040
1121
  #TODO: fix this to handle Safari password field
1041
- msg = "Set textfield #{how}='#{what}' to '#{value}'"
1042
- msg << " #{desc}" if desc.length > 0
1122
+ msg = build_message("Set textfield #{how}='#{what}' to '#{value}'", desc)
1043
1123
  msg << " (Skip value check)" if skip_value_check
1044
1124
  if browser.text_field(how, what).exists?
1045
1125
  tf = browser.text_field(how, what)
1046
- debug_to_log("#{tf.inspect}")
1047
- if validate(browser, @myName, __LINE__)
1126
+ #debug_to_log("#{tf.inspect}")
1048
1127
  tf.set(value)
1049
- if validate(browser, @myName, __LINE__)
1050
1128
  if tf.value == value
1051
1129
  passed_to_log(msg)
1052
1130
  true
@@ -1056,10 +1134,8 @@ _Example_
1056
1134
  else
1057
1135
  failed_to_log("#{msg}: Found:'#{tf.value}'.")
1058
1136
  end
1059
- end
1060
- end
1061
1137
  else
1062
- failed_to_log("Textfield #{how}='#{what}' not found to set to '#{value}''")
1138
+ failed_to_log("#{msg}: Textfield #{how}='#{what}' not found")
1063
1139
  end
1064
1140
  rescue
1065
1141
  failed_to_log("Unable to '#{msg}': '#{$!}'")
@@ -1067,99 +1143,58 @@ _Example_
1067
1143
 
1068
1144
  alias set_textfield set_text_field
1069
1145
 
1070
- def set_textfield_by_name(browser, name, value, desc = '', skip_value_check = false)
1071
- if browser.text_field(:name, name).exists?
1072
- tf = browser.text_field(:name, name)
1073
- # Workaround because browser.text_field doesn't work for password fields in Safari
1074
- elsif @browserAbbrev.eql?("S")
1075
- tf = browser.password(:name, name)
1076
- end
1077
- if tf.exists?
1078
- if validate(browser, @myName, __LINE__)
1079
- tf.set(value)
1080
- if validate(browser, @myName, __LINE__)
1081
- if tf.value == value
1082
- passed_to_log("Set textfield name='#{name}' to '#{value}' #{desc}")
1146
+ # Clear text field as identified by the attribute specified in *how* with value in *what* to the string specified in *value*.
1147
+ # This method differs from set() in that 1( it uses the Watir #clear method, 2( it validates that the text field has been
1148
+ # set to the specified value.
1149
+ # The value verification can be turned off by setting *skip_value_check* to true.
1150
+ # This is useful when the text_field performs formatting on the entered string. See set_text_field_and_validate()
1151
+ # @param [Watir::Browser] browser A reference to the browser window or container element to be tested.
1152
+ # @param [Symbol] how The element attribute used to identify the specific checkbox.
1153
+ # Valid values depend on the kind of element.
1154
+ # Common values: :text, :id, :title, :name, :class.
1155
+ # @param [String, Regexp] what A string or a regular expression to be found in the specified attribute that uniquely identifies the element.
1156
+ # @param [Boolean] skip_value_check Forces verification of value in text field to pass.
1157
+ # @return (see #click)
1158
+ def clear_textfield(browser, how, what, skip_value_check = false)
1159
+ if browser.text_field(how, what).exists?
1160
+ tf = browser.text_field(how, what)
1161
+ tf.clear
1162
+ if tf.value == ''
1163
+ passed_to_log("Textfield #{how}='#{what}' cleared.")
1083
1164
  true
1084
1165
  elsif skip_value_check
1085
- passed_to_log("Set textfield name='#{name}' to '#{value}' #{desc} (skip value check)")
1166
+ passed_to_log("Textfield #{how}='#{what}' cleared. (skip value check)")
1086
1167
  true
1087
1168
  else
1088
- failed_to_log("Set textfield name='#{name}' to '#{value}': Found:'#{tf.value}'. #{desc} (#{__LINE__})")
1169
+ failed_to_log("Textfield #{how}='#{what}' not cleared: Found:'#{tf.value}'. (#{__LINE__})")
1089
1170
  end
1090
- end
1091
- end
1092
1171
  else
1093
- failed_to_log("Textfield name='#{name}' not found to set to '#{value}'. #{desc} (#{__LINE__})")
1172
+ failed_to_log("Textfield id='#{id}' to clear. (#{__LINE__})")
1094
1173
  end
1095
1174
  rescue
1096
- failed_to_log("Textfield name='#{name}' could not be set to '#{value}': '#{$!}'. #{desc} (#{__LINE__})")
1097
- end
1098
-
1099
- =begin rdoc
1100
- :category: A_rdoc_test
1101
- Enter a string into a text field element identified by the value in its id attribute.
1102
-
1103
- _Parameters_::
1104
-
1105
- *browser* - a reference to the browser window to be tested
1106
-
1107
- *id* - a string or a regular expression to be found in the id attribute that uniquely identifies the element.
1108
-
1109
- *value* - a string to be entered in the text field
1110
-
1111
- *desc* - a string containing a message or description intended to appear in the log and/or report output
1112
-
1113
- *skip_value_check* (Optional, default is false). Set to true to prevent the built-in verification
1114
- that the text field actually contains the value entered. Useful when application reformats
1115
- or otherwise edits the input string.
1116
-
1117
- _Example_
1118
-
1119
- set_text_field_by_id(browser, /thisTextfield/, 'The text to enter')
1120
-
1121
- =end
1122
-
1123
- def set_textfield_by_id(browser, id, value, desc = '', skip_value_check = false)
1124
- set_text_field(browser, :id, id, value, desc, skip_value_check)
1125
- end
1126
-
1127
- def set_textfield_by_title(browser, title, value, desc = '', skip_value_check = false)
1128
- set_text_field(browser, :title, title, value, desc, skip_value_check)
1129
- end
1130
-
1131
- def set_textfield_by_class(browser, strg, value, desc = '', skip_value_check = false)
1132
- set_text_field(browser, :class, strg, value, desc, skip_value_check)
1175
+ failed_to_log("Textfield id='#{id}' could not be cleared: '#{$!}'. (#{__LINE__})")
1133
1176
  end
1134
1177
 
1135
- =begin rdoc
1136
- :category: A_rdoc_test
1137
- Enter a string into a text field element identified by an attribute type and a value.
1138
- After the entry the value in the text field is validated against the *valid_value*. Use when the application reformats
1139
- or performs edits on the input value.
1140
-
1141
- _Parameters_::
1142
-
1143
- *browser* - a reference to the browser window to be tested
1144
-
1145
- *how* - the element attribute used to identify the specific element. Valid values depend on the kind of element.
1146
- Common values: :text, :id, :title, :name, :class, :href (:link only)
1147
-
1148
- *what* - a string or a regular expression to be found in the *how* attribute that uniquely identifies the element.
1149
-
1150
- *value* - a string to be entered in the text field
1151
-
1152
- *desc* - a string containing a message or description intended to appear in the log and/or report output
1153
-
1154
- *valid_value* (Optional, default is nil). Set to the expected value
1155
-
1156
- _Example_
1157
-
1158
- set_text_field_and_validate(browser, :id, /AmountTendered/, '7500', 'Dollar formatting', '$7,500.00')
1159
-
1160
- =end
1161
-
1162
- def set_text_field_and_validate(browser, how, what, value, desc = '', valid_value = nil)
1178
+ #Enter a string into a text field element identified by an attribute type and a value.
1179
+ #After the entry the value in the text field is validated against the *valid_value*. Use when the application reformats
1180
+ #or performs edits on the input value.
1181
+
1182
+ # Set text field as identified by the attribute specified in *how* with value in *what* to the string specified in *value*.
1183
+ # and verify that the text field is set to the string in *valid_value*.
1184
+ #
1185
+ # @example
1186
+ # set_text_field_and_validate(browser, :id, 'text field id', '99999', 'Dollar format', '$99,999.00')
1187
+ #
1188
+ # @param [Watir::Browser] browser A reference to the browser window or container element to be tested.
1189
+ # @param [Symbol] how The element attribute used to identify the specific checkbox.
1190
+ # Valid values depend on the kind of element.
1191
+ # Common values: :text, :id, :title, :name, :class.
1192
+ # @param [String, Regexp] what A string or a regular expression to be found in the specified attribute that uniquely identifies the element.
1193
+ # @param [String] value A string to enter into the text field.
1194
+ # @param [String] desc Contains a message or description intended to appear in the log and/or report output. Required in this method.
1195
+ # @param [String] valid_value The expected value of the text field, e.g., following reformatting.
1196
+ # @return (see #click)
1197
+ def set_text_field_and_validate(browser, how, what, value, desc, valid_value = nil)
1163
1198
  #NOTE: use when value and valid_value differ as with dollar reformatting
1164
1199
  if set_text_field(browser, how, what, value, desc, true)
1165
1200
  expected = valid_value ? valid_value : value
@@ -1169,34 +1204,98 @@ _Example_
1169
1204
  failed_to_log("Unable to '#{msg}': '#{$!}'")
1170
1205
  end
1171
1206
 
1172
- =begin rdoc
1173
- :category: A_rdoc_test
1174
- Allows a generic way to fire browser or javascript events on page elements.
1175
- Raises UnknownObjectException if the object is not found or ObjectDisabledException if the object is currently disabled.
1176
- _Parameters_::
1177
-
1178
- *browser* - a reference to the browser window to be tested
1179
-
1180
- *element* - the kind of element to click. Must be one of the elements recognized by Watir.
1181
- Some common values are :link, :button, :image, :div, :span.
1182
-
1183
- *how* - the element attribute used to identify the specific element. Valid values depend on the kind of element.
1184
- Common values: :text, :id, :title, :name, :class, :href (:link only)
1185
-
1186
- *what* - a string or a regular expression to be found in the *how* attribute that uniquely identifies the element.
1187
-
1188
- *event* - a string indicating the event to be triggered, e.g., 'onMouseOver', 'onClick', and etc.
1189
-
1190
- *desc* - a string containing a message or description intended to appear in the log and/or report output
1191
-
1192
- _Example_
1193
-
1194
- # html for a link element:
1195
- # <a href="http://pragmaticprogrammer.com/titles/ruby/" id="one" name="book">Pickaxe</a>
1196
- fire_event(browser, :link, :text, 'Pickaxe', 'onMouseOver')
1197
-
1198
- =end
1199
-
1207
+ #def set_password_by_name(browser, name, value, desc = '', skip_value_check = false)
1208
+ # set_text_field(browser, how, what, value, desc, skip_value_check)
1209
+ # if browser.text_field(:name, name).exists?
1210
+ # tf = browser.text_field(:name, name)
1211
+ # # Workaround because browser.text_field doesn't work for password fields in Safari
1212
+ # elsif @browserAbbrev.eql?("S")
1213
+ # tf = browser.password(:name, name)
1214
+ # end
1215
+ # if tf.exists?
1216
+ # tf.set(value)
1217
+ # if tf.value == value
1218
+ # passed_to_log("Set textfield name='#{name}' to '#{value}' #{desc}")
1219
+ # true
1220
+ # elsif skip_value_check
1221
+ # passed_to_log("Set textfield name='#{name}' to '#{value}' #{desc} (skip value check)")
1222
+ # true
1223
+ # else
1224
+ # failed_to_log("Set textfield name='#{name}' to '#{value}': Found:'#{tf.value}'. #{desc} (#{__LINE__})")
1225
+ # end
1226
+ # else
1227
+ # failed_to_log("Textfield name='#{name}' not found to set to '#{value}'. #{desc} (#{__LINE__})")
1228
+ # end
1229
+ #rescue
1230
+ # failed_to_log("Textfield name='#{name}' could not be set to '#{value}': '#{$!}'. #{desc} (#{__LINE__})")
1231
+ #end
1232
+
1233
+ # @!endgroup Core
1234
+
1235
+ # @!group Set
1236
+
1237
+ # Set text field as identified by its *:name* attribute with value in *what* to the string specified in *value*.
1238
+ # This method validates that the text field has been set to the specified value.
1239
+ # The value verification can be turned off by setting *skip_value_check* to true.
1240
+ # @param [Watir::Browser] browser A reference to the browser window or container element to be tested.
1241
+ # @param [String, Regexp] what A string or a regular expression to be found in the specified attribute that uniquely identifies the element.
1242
+ # @param [String] value A string to enter into the text field.
1243
+ # @param [String] desc Contains a message or description intended to appear in the log and/or report output.
1244
+ # Required if *skip_value_check* is set to true.
1245
+ # @param [Boolean] skip_value_check Forces verification of value in text field to pass.
1246
+ # @return (see #click)
1247
+ def set_textfield_by_name(browser, what, value, desc = '', skip_value_check = false)
1248
+ set_text_field(browser, :name, what, value, desc, skip_value_check)
1249
+ end
1250
+
1251
+ # Set text field as identified by its *:id* attribute with value in *what* to the string specified in *value*.
1252
+ # This method validates that the text field has been set to the specified value.
1253
+ # The value verification can be turned off by setting *skip_value_check* to true.
1254
+ # @param (see #set_textfield_by_name)
1255
+ # @return (see #click)
1256
+ def set_textfield_by_id(browser, what, value, desc = '', skip_value_check = false)
1257
+ set_text_field(browser, :id, what, value, desc, skip_value_check)
1258
+ end
1259
+
1260
+ # Set text field as identified by its *:class* attribute with value in *what* to the string specified in *value*.
1261
+ # This method validates that the text field has been set to the specified value.
1262
+ # The value verification can be turned off by setting *skip_value_check* to true.
1263
+ # @param (see #set_textfield_by_name)
1264
+ # @return (see #click)
1265
+ def set_textfield_by_title(browser, what, value, desc = '', skip_value_check = false)
1266
+ set_text_field(browser, :title, what, value, desc, skip_value_check)
1267
+ end
1268
+
1269
+ # Set text field as identified by its *:class* attribute with value in *what* to the string specified in *value*.
1270
+ # This method validates that the text field has been set to the specified value.
1271
+ # The value verification can be turned off by setting *skip_value_check* to true.
1272
+ # @param (see #set_textfield_by_name)
1273
+ def set_textfield_by_class(browser, what, value, desc = '', skip_value_check = false)
1274
+ set_text_field(browser, :class, what, value, desc, skip_value_check)
1275
+ end
1276
+
1277
+ # @!endgroup Set
1278
+ # @!group Core
1279
+
1280
+ # Fire an event on a specific DOM element identified by one of its attributes and that attribute's value.
1281
+ #
1282
+ # @example
1283
+ # # html for a link element:
1284
+ # # <a href="http://pragmaticprogrammer.com/titles/ruby/" id="one" name="book">Pickaxe</a>
1285
+ #
1286
+ # fire_event(browser, :link, :text, 'Pickaxe', 'onMouseOver')
1287
+ #
1288
+ # @param [Watir::Browser] browser A reference to the browser window or container element to be tested.
1289
+ # @param [Symbol] element The kind of element to click. Must be one of the elements recognized by Watir.
1290
+ # Some common values are :link, :button, :image, :div, :span.
1291
+ # @param [Symbol] how The element attribute used to identify the specific element.
1292
+ # Valid values depend on the kind of element.
1293
+ # Common values: :text, :id, :title, :name, :class, :href (:link only)
1294
+ # @param [String, Regexp] what A string or a regular expression to be found in the *how* attribute that uniquely identifies the element.
1295
+ # @param [String] event A string identifying the event to be fired.
1296
+ # @param [String] desc Contains a message or description intended to appear in the log and/or report output
1297
+ # @return (see #click)
1298
+ #
1200
1299
  def fire_event(browser, element, how, what, event, desc = '')
1201
1300
  msg = "#{element.to_s.titlecase}: #{how}=>'#{what}' event:'#{event}'"
1202
1301
  msg1 = "#{element.to_s.titlecase}(#{how}, '#{what}')"
@@ -1220,35 +1319,68 @@ _Example_
1220
1319
  raise e
1221
1320
  end
1222
1321
  end
1223
- if validate(browser, @myName, __LINE__)
1224
1322
  passed_to_log("Fire event: #{msg}. #{desc}")
1225
1323
  true
1226
- end
1227
1324
  rescue
1228
1325
  failed_to_log("Unable to fire event: #{msg}. '#{$!}' #{desc}")
1229
1326
  end
1230
1327
 
1231
- def fire_event_on_link_by_text(browser, strg, event = 'onclick', desc = '')
1232
- fire_event(browser, :link, :text, strg, event, desc)
1328
+ # @!endgroup Core
1329
+
1330
+ # @!group Fire Event
1331
+
1332
+ # Fire an event on a link element identified by the value in its text (innerHTML)
1333
+ #
1334
+ # @example
1335
+ # # html for a link element:
1336
+ # # <a href="http://pragmaticprogrammer.com/titles/ruby/" id="one" name="book">Pickaxe</a>
1337
+ #
1338
+ # fire_event_on_link_by_text(browser, 'Pickaxe', 'onMouseOver')
1339
+ #
1340
+ # @param [Watir::Browser] browser A reference to the browser window or container element to be tested.
1341
+ # @param [String, Regexp] what A string or a regular expression to be found in the *how* attribute that uniquely identifies the element.
1342
+ # @param [String] event A string identifying the event to be fired.
1343
+ # @param [String] desc Contains a message or description intended to appear in the log and/or report output
1344
+ # @return (see #click)
1345
+ #
1346
+ def fire_event_on_link_by_text(browser, what, event, desc = '')
1347
+ fire_event(browser, :link, :text, what, event, desc)
1233
1348
  end
1234
1349
 
1235
1350
  alias fire_event_text fire_event_on_link_by_text
1236
1351
  alias fire_event_by_text fire_event_on_link_by_text
1237
1352
 
1238
- def fire_event_on_link_by_id(browser, strg, event = 'onclick', desc = '')
1239
- fire_event(browser, :link, :id, strg, event, desc)
1353
+ # Fire an event on a link element identified by the value in its *:id* attribute.
1354
+ #
1355
+ # @example
1356
+ # # html for a link element:
1357
+ # # <a href="http://pragmaticprogrammer.com/titles/ruby/" id="one" name="book">Pickaxe</a>
1358
+ #
1359
+ # fire_event_on_link_by_id(browser, 'one', 'onMouseOver')
1360
+ #
1361
+ # @param (see #fire_event_on_link_by_text)
1362
+ # @return (see #click)
1363
+ #
1364
+ def fire_event_on_link_by_id(browser, what, event, desc = '')
1365
+ fire_event(browser, :link, :id, what, event, desc)
1240
1366
  end
1241
1367
 
1242
1368
  alias fire_event_id fire_event_on_link_by_id
1243
1369
  alias fire_event_by_id fire_event_on_link_by_id
1244
1370
 
1245
- def fire_event_on_image_by_src(browser, strg, event = 'onclick', desc = '')
1246
- fire_event(browser, :img, :src, strg, event, desc)
1371
+ # Fire an event on a image element identified by the value in its *:src* attribute.
1372
+ # Take care to escape characters in the source url that are reserved by Regexp.
1373
+ # @param (see #fire_event_on_link_by_text)
1374
+ # @return (see #click)
1375
+ #
1376
+ def fire_event_on_image_by_src(browser, what, event, desc = '')
1377
+ fire_event(browser, :img, :src, what, event, desc)
1247
1378
  end
1248
1379
 
1249
1380
  alias fire_event_src fire_event_on_image_by_src
1250
1381
  alias fire_event_image_by_src fire_event_on_image_by_src
1251
1382
 
1383
+ # @!endgroup Fire Event
1252
1384
 
1253
1385
  end
1254
1386
  end