awetestlib 0.1.29pre3 → 0.1.29pre4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. data/README.md +16 -8
  2. data/awetestlib.windows.gemspec +42 -41
  3. data/awetestlib_osx.gemspec +41 -47
  4. data/bin/awetestlib-android-setup.rb +2 -1
  5. data/bin/awetestlib-cucumber-setup.rb +2 -1
  6. data/bin/awetestlib-driver-setup.rb +1 -0
  7. data/bin/awetestlib-helpers.rb +2 -2
  8. data/bin/awetestlib-mobile-app-setup.rb +1 -0
  9. data/bin/awetestlib-netbeans-setup.rb +2 -1
  10. data/bin/awetestlib-regression-setup.rb +26 -12
  11. data/bin/awetestlib-rubymine-setup.rb +9 -4
  12. data/images/netbeans1.jpg +0 -0
  13. data/images/netbeans2.jpg +0 -0
  14. data/images/netbeans3.jpg +0 -0
  15. data/images/netbeans4.jpg +0 -0
  16. data/images/netbeans5.jpg +0 -0
  17. data/images/rubymine1.jpg +0 -0
  18. data/images/rubymine2.jpg +0 -0
  19. data/images/rubymine3.jpg +0 -0
  20. data/images/rubymine4.jpg +0 -0
  21. data/images/scripting1.png +0 -0
  22. data/images/scripting2.png +0 -0
  23. data/images/scripting3.png +0 -0
  24. data/images/scripting4.png +0 -0
  25. data/lib/awetestlib/logging.rb +6 -6
  26. data/lib/awetestlib/regression/browser.rb +15 -12
  27. data/lib/awetestlib/regression/drag_and_drop.rb +421 -421
  28. data/lib/awetestlib/regression/runner.rb +311 -307
  29. data/lib/awetestlib/regression/tables.rb +627 -627
  30. data/lib/awetestlib/regression/user_input.rb +576 -576
  31. data/lib/awetestlib/regression/utilities.rb +1056 -1046
  32. data/lib/awetestlib/regression/validations.rb +2 -1
  33. data/lib/version.rb +2 -2
  34. data/netbeans_setup.md +30 -30
  35. data/rubymine_setup.md +24 -24
  36. data/setup_samples/sample_cucumber/features/step_definitions/predefined_steps.rb +303 -25
  37. metadata +160 -34
  38. checksums.yaml +0 -7
@@ -1,627 +1,627 @@
1
- module Awetestlib
2
- module Regression
3
- # Methods for handling Tables, Rows, and Cells
4
- # Rdoc work in progress
5
- module Tables
6
-
7
-
8
- def get_index_for_column_head(panel, table_index, strg, desc = '')
9
- table = panel.tables[table_index]
10
- get_column_index(table, strg, desc, true)
11
- end
12
-
13
- def get_column_index(table, strg, desc = '', header = false)
14
- msg1 = " header" if header
15
- msg = build_message("Get index of ", msg1, " column containing #{strg}. ", desc)
16
- rgx = Regexp.new(strg)
17
- row_idx = 0
18
- index = -1
19
- found = false
20
- table.each do |row|
21
- row_idx += 1
22
- if row.text =~ rgx
23
- col_idx = 1
24
- row.each do |cell|
25
- if cell.text =~ rgx
26
- index = col_idx
27
- found = true
28
- break
29
- end
30
- col_idx += 1
31
- end
32
- end
33
- break if found or header
34
- end
35
- if found
36
- passed_to_log("#{msg} at index #{index}.")
37
- index
38
- else
39
- failed_to_log("#{msg}")
40
- nil
41
- end
42
- rescue
43
- failed_to_log("Unable to #{msg} '#{$!}'")
44
- end
45
-
46
- # Return the index of the last row of the specified table.
47
- # @param [Watir::Table] table A reference to the table in question.
48
- # @param [Fixnum] pad The number of zeroes to prefix the index to allow correct sorting.
49
- # @param [Fixnum] every A number indicating which rows in the table actually carry data if
50
- # the table is padded with empty rows. 1 = every row, 2 = every other row, 3 = every third
51
- # row, and etc.
52
- # @return [Fixnum]
53
- def get_index_of_last_row(table, pad = 2, every = 1)
54
- index = calc_index(table.row_count, every)
55
- index = index.to_s.rjust(pad, '0')
56
- #debug_to_log("#{__method__}: index='#{index}' row_count=#{table.row_count} pad=#{pad} every=#{every}")
57
- index
58
- end
59
-
60
- alias get_index_for_last_row get_index_of_last_row
61
-
62
- # Return the index of the last row of the specified table containing *strg*
63
- # @param [Watir::Table] table A reference to the table in question.
64
- # @param [String, Regexp] strg A string or regular expression to search for in the table..
65
- # @param [Fixnum] column_index A number indicating which rows the column to focus the search in.
66
- # When not supplied, the entire row is searched for *strg*.
67
- # @return [Fixnum]
68
- def get_index_of_last_row_with_text(table, strg, column_index = nil)
69
- debug_to_log("#{__method__}: #{get_callers(5)}")
70
- msg1 = " in column #{column_index}" if column_index
71
- msg = build_message("Find last row in table :id=#{table.id} with text '#{strg}'", msg1)
72
- dbg = build_message("#{__method__}: #{table.id} text by row", msg1)
73
- index = 0
74
- found = false
75
- at_index = 0
76
- #row_count = table.row_count
77
- table.rows.each do |row|
78
- cell_count = get_cell_count(row)
79
- index += 1
80
- text = ''
81
- if column_index
82
- col_idx = column_index.to_i
83
- if cell_count >= col_idx
84
- text = row[col_idx].text
85
- end
86
- else
87
- text = row.text
88
- end
89
- dbg << "\n#{index}. [#{text}]"
90
- if text =~ /#{strg}/
91
- found = true
92
- at_index = index
93
- end
94
- end
95
- debug_to_log(dbg)
96
- if found
97
- passed_to_log("#{msg} at index #{index}.")
98
- at_index
99
- else
100
- failed_to_log("#{msg}")
101
- nil
102
- end
103
- rescue
104
- failed_to_log("Unable to #{msg}. '#{$!}'")
105
- end
106
-
107
- alias get_index_for_last_row_with_text get_index_of_last_row_with_text
108
-
109
- # Return the index of the _first_ row of the specified table containing *strg*
110
- # @param [Watir::Table] table A reference to the table in question.
111
- # @param [String, Regexp] strg A string or regular expression to search for in the table..
112
- # @param [Fixnum] column_index A number indicating which rows the column to focus the search in.
113
- # When not supplied, the entire row is searched for *strg*.
114
- # @param [Boolean] fail_if_found If true log a failure if *strg* _is_ found.
115
- # @param [Fixnum] after_index Forces method to accept hit on *strg* only if it occurs
116
- # after the row indicated by this argument. When omitted, the first hit is accepted.
117
- # @return [Fixnum] the index of the row containing *strg*
118
- def get_index_of_row_with_text(table, strg, column_index = nil, fail_if_found = false, after_index = nil)
119
- debug_to_log("#{__method__}: #{get_callers(5)}")
120
- if fail_if_found
121
- msg = 'No '
122
- else
123
- msg = 'Find '
124
- end
125
- msg << "row in table :id=#{table.id} with text '#{strg}'"
126
- msg << " in column #{column_index}" if column_index
127
- dbg = "#{__method__}: #{table.id} text by row "
128
- dbg << "in column #{column_index}" if column_index
129
- index = 0
130
- found = false
131
- table.rows.each do |row|
132
- cell_count = row.cells.length
133
- index += 1
134
- text = ''
135
- if column_index
136
- col_idx = column_index.to_i
137
- if cell_count >= col_idx
138
- text = row[col_idx].text
139
- end
140
- else
141
- text = row.text
142
- end
143
- dbg << "\n#{index}. [#{text}]"
144
- if text =~ /#{strg}/
145
- if after_index and index > after_index
146
- found = true
147
- break
148
- else
149
- found = true
150
- break
151
- end
152
- end
153
- end
154
- debug_to_log(dbg)
155
- if found
156
- if fail_if_found
157
- failed_to_log("#{msg} at index #{index}.")
158
- else
159
- passed_to_log("#{msg} at index #{index}.")
160
- end
161
- index
162
- else
163
- if fail_if_found
164
- passed_to_log("#{msg}")
165
- else
166
- failed_to_log("#{msg}")
167
- end
168
- nil
169
- end
170
- rescue
171
- failed_to_log("Unable to #{msg}. '#{$!}'")
172
- end
173
-
174
- # Return the index of the _first_ row of the specified table containing *strg* in a text field
175
- # identified by *how* and *what*.
176
- # @param [Watir::Table] table A reference to the table in question.
177
- # @param [String, Regexp] strg A string or regular expression to search for in the table..
178
- # @param [Symbol] how The element attribute used to identify the specific element.
179
- # Valid values depend on the kind of element.
180
- # Common values: :text, :id, :title, :name, :class, :href (:link only)
181
- # @param [String, Regexp] what A string or a regular expression to be found in the *how* attribute that uniquely identifies the element.
182
- # @param [Fixnum] column_index A number indicating which rows the column to focus the search in.
183
- # When not supplied, the entire row is searched for *strg*.
184
- # @return [Fixnum] the index of the row containing *strg*
185
- def get_index_of_row_with_textfield_value(table, strg, how, what, column_index = nil)
186
- msg = "Find row in table :id=#{table.id} with value '#{strg}' in text_field #{how}=>'#{what} "
187
- msg << " in column #{column_index}" if column_index
188
- index = 0
189
- found = false
190
- table.rows.each do |row|
191
- cell_count = get_cell_count(row)
192
- index += 1
193
- text = ''
194
- if column_index
195
- col_idx = column_index.to_i
196
- if cell_count >= col_idx
197
- if row[col_idx].text_field(how, what).exists?
198
- value = row[col_idx].text_field(how, what).value
199
- end
200
- end
201
- else
202
- if row.text_field(how, what).exists?
203
- value = row.text_field(how, what).value
204
- sleep(0.25)
205
- end
206
- end
207
- if value and value =~ /#{strg}/
208
- found = true
209
- break
210
- end
211
- end
212
- if found
213
- passed_to_log("#{msg} at index #{index}.")
214
- else
215
- failed_to_log("#{msg}")
216
- end
217
- index
218
- rescue
219
- failed_to_log("Unable to #{msg}. '#{$!}'")
220
- end
221
-
222
- # Return the index of a table in *browser* containing *strg*. *ordinal* indicates
223
- # whether it is the first, second, third, etc. table found with the matching text in *strg*
224
- # @param [Watir::Browser] browser A reference to the browser window or container element to be tested.
225
- # @param [String, Regexp] strg A string or regular expression to search for in the table..
226
- # @param [Fixnum] ordinal A number indicating which matching table will have its index returned.
227
- # @return [Fixnum] the index of the table containing *strg*
228
- def get_index_for_table_containing_text(browser, strg, ordinal = 1)
229
- msg = "Get index for table containing text '#{strg}'"
230
- index = 0
231
- found = 0
232
- browser.tables.each do |t|
233
- index += 1
234
- if t.text =~ /#{strg}/
235
- found += 1
236
- if ordinal > 0 and found == ordinal
237
- break
238
- end
239
- end
240
- end
241
- if found
242
- passed_to_log("#{msg}: #{index}")
243
- index
244
- else
245
- passed_to_log("#{msg}.")
246
- nil
247
- end
248
- rescue
249
- failed_to_log("Unable to find index of table containing text '#{strg}' '#{$!}' ")
250
- end
251
-
252
- # Return a reference to a table in *browser* containing *strg*. *ordinal* indicates
253
- # whether it is the first, second, third, etc. table found with the matching text in *strg*
254
- # @param [Watir::Browser] browser A reference to the browser window or container element to be tested.
255
- # @param [String, Regexp] strg A string or regular expression to search for in the table..
256
- # @param [Fixnum] ordinal A number indicating which matching table will have its index returned.
257
- # @return [Watir::Table] the table containing *strg*
258
- def get_table_containing_text(browser, strg, ordinal = 1)
259
- msg = "Get table #{ordinal} containing text '#{strg}'"
260
- index = get_index_for_table_containing_text(browser, strg, ordinal)
261
- if index
262
- passed_to_log(msg)
263
- browser.tables[index]
264
- else
265
- failed_to_log(msg)
266
- nil
267
- end
268
- rescue
269
- failed_to_log("Unable to find index of table containing text '#{strg}' '#{$!}' ")
270
- end
271
-
272
- def get_cell_text_from_row_with_string(nc_element, table_index, column_index, strg)
273
- rgx = Regexp.new(strg)
274
- text = ''
275
- debug_to_log("strg:'#{strg}', rgx:'#{rgx}', table_index:'#{table_index}', column_index:'#{column_index}'")
276
- nc_element.tables[table_index].each do |row|
277
- cell_count = get_cell_count(row)
278
- if cell_count >= column_index
279
- #TODO this assumes column 1 is a number column
280
- # debug_to_log("row:'#{row.cells}'")
281
- cell_1 = row[1].text
282
- if cell_1 =~ /\d+/
283
- row_text = row.text
284
- if row_text =~ rgx
285
- text = row[column_index].text
286
- break
287
- end
288
- end
289
- end
290
- end
291
- text
292
- end
293
-
294
- # Return a hash containing a cross reference of the header names and indexes (columns) for the specified table.
295
- # @example
296
- # (need example and usage)
297
- # @param [Watir::Table] table A reference to the table.
298
- # @param [Fixnum] header_index The index of the row containing the header names.
299
- # @return [Hash] Two level hash of hashes. Internal hashes are 'name' which allows look-up of a column index
300
- # by the header name, and 'index' which allows look-up of the name by the column index.
301
- def get_table_headers(table, header_index = 1)
302
- headers = Hash.new
303
- headers['index'] = Hash.new
304
- headers['name'] = Hash.new
305
- count = 1
306
- table[header_index].each do |cell|
307
- if cell.text.length > 0
308
- name = cell.text.gsub(/\s+/, ' ')
309
- headers['index'][count] = name
310
- headers['name'][name] = count
311
- end
312
- count += 1
313
- end
314
- #debug_to_log("#{__method__}: headers:\n#{headers.to_yaml}")
315
- headers
316
- rescue
317
- failed_to_log("Unable to get content headers. '#{$!}'")
318
- end
319
-
320
- # @param [Watir::Browser] browser A reference to the browser window or container element to be tested.
321
- def count_rows_with_string(browser, table_index, strg)
322
- hit = 0
323
- browser.tables[table_index].each do |row|
324
- if get_cell_count(row) >= 1
325
- # debug_to_log("#{__method__}: #{row.text}")
326
- #TODO this assumes column 1 is a number column
327
- if row[1].text =~ /\d+/
328
- if row.text =~ /#{strg}/i
329
- hit += 1
330
- debug_to_log("#{__method__}: #{row.text}")
331
- end
332
- end
333
- end
334
- end
335
- debug_to_log("#{__method__}: hit row count: #{hit}")
336
- hit
337
- end
338
-
339
- def fetch_array_for_table_column(table, column_index, start_row = 2)
340
- ary = []
341
- row_count = 0
342
- table.each do |row|
343
- row_count += 1
344
- if get_cell_count(row) >= column_index
345
- if row_count >= start_row
346
- ary << row[column_index].text
347
- end
348
- end
349
- end
350
- ary
351
- end
352
-
353
- def fetch_hash_for_table_column(table, column_index, start_row = 2)
354
- hash = Hash.new
355
- row_count = 0
356
- table.each do |row|
357
- row_count += 1
358
- if get_cell_count(row) >= column_index
359
- if row_count >= start_row
360
- hash[row_count] = row[column_index].text
361
- end
362
- end
363
- end
364
- hash
365
- end
366
-
367
- def get_row_cells_text_as_array(row)
368
- ary = []
369
- row.each do |cell|
370
- ary << cell.text
371
- end
372
- ary
373
- end
374
-
375
- def count_data_rows(container, data_index, column_index)
376
- cnt = 0
377
- # get_objects(container, :tables, true)
378
- table = container.tables[data_index]
379
- dump_table_and_rows(table)
380
- if table
381
- table.rows.each do |row|
382
- if get_cell_count(row) >= column_index
383
- #TODO this assumes column 1 is a number column
384
- if row[column_index].text =~ /\d+/
385
- cnt += 1
386
- end
387
- end
388
- end
389
- end
390
- sleep_for(2)
391
- cnt
392
- end
393
-
394
- def get_cell_count(row)
395
- if $watir_script
396
- row.column_count
397
- else
398
- row.cells.length
399
- end
400
- end
401
-
402
- def exercise_sorting(browser, columnList, desc = '')
403
- #TODO put rescue inside the do loop
404
- #parameters: browser and a list of column link text values
405
- #example: exercise_sorting(browser,['Division', 'Payee', 'Date'], 'Sortable columns on this page')
406
- columnList.each do |column|
407
- click(browser, :link, :text, column, desc)
408
- end
409
- end
410
-
411
- alias validate_sorting exercise_sorting
412
-
413
- def verify_column_sort(browser, nc_element, strg, table_index, column_index=nil)
414
- mark_testlevel("Verify Column Sort '#{strg}'", 3)
415
- if not column_index
416
- column_index = get_index_for_column_head(nc_element, table_index, strg)
417
- end
418
-
419
- if column_index
420
- bfr_ary = fetch_array_for_table_column(nc_element, table_index, column_index)
421
- if strg =~ /date/i
422
- exp_ary = bfr_ary.sort { |x, y| Date.parse(x) <=> Date.parse(y) }
423
- else
424
- exp_ary = bfr_ary.sort { |x, y| x.gsub(',', '') <=> y.gsub(',', '') }
425
- end
426
-
427
- if click_text(browser, strg)
428
- if column_index
429
- sleep_for(2.5)
430
- else
431
- sleep_for(1)
432
- end
433
- act_ary = fetch_array_for_table_column(nc_element, table_index, column_index)
434
-
435
- if exp_ary == act_ary
436
- passed_to_log("Click on column '#{strg}' produces expected sorted list.")
437
- true
438
- else
439
- failed_to_log("Click on column '#{strg}' fails to produce expected sorted list.")
440
- debug_to_log("Original order ['#{bfr_ary.join("', '")}']")
441
- debug_to_log("Expected order ['#{exp_ary.join("', '")}']")
442
- debug_to_log(" Actual order ['#{act_ary.join("', '")}']")
443
- end
444
- end
445
- else
446
- failed_to_log("Unable to locate column index for '#{strg}' to verify sort.")
447
- end
448
- rescue
449
- failed_to_log("Unable to verify sort on column '#{strg}'. #{$!}")
450
- end
451
-
452
- def verify_column_sort_temp_ff(browser, strg, table_index, column_index=nil)
453
- mark_testlevel("Verify Column Sort '#{strg}'", 3)
454
-
455
- if not column_index
456
- column_index = get_index_for_column_head(browser, table_index, strg)
457
- end
458
-
459
- if column_index
460
- bfr_ary = fetch_array_for_table_column(browser, table_index, column_index)
461
- if strg =~ /date/i
462
- exp_ary = bfr_ary.sort { |x, y| Date.parse(x) <=> Date.parse(y) }
463
- else
464
- exp_ary = bfr_ary.sort { |x, y| x.gsub(',', '') <=> y.gsub(',', '') }
465
- end
466
-
467
- if click_text(browser, strg)
468
- sleep_for(3)
469
- act_ary = fetch_array_for_table_column(browser, table_index, column_index)
470
-
471
- if exp_ary == act_ary
472
- passed_to_log("Click on column '#{strg}' produces expected sorted list.")
473
- true
474
- else
475
- failed_to_log("Click on column '#{strg}' fails to produce expected sorted list.")
476
- debug_to_log("Original order ['#{bfr_ary.join("', '")}']")
477
- debug_to_log("Expected order ['#{exp_ary.join("', '")}']")
478
- debug_to_log(" Actual order ['#{act_ary.join("', '")}']")
479
- end
480
- end
481
- else
482
- failed_to_log("Unable to locate column index for '#{strg}' to verify sort.")
483
- end
484
- rescue
485
- failed_to_log("Unable to verify sort on column '#{strg}'. #{$!}")
486
- end
487
-
488
- # @todo unstub
489
- # @private
490
- def verify_column_hidden(browser, panel, table_index, column_name)
491
- passed_to_log("TEST STUBBED: Column '#{column_name}' is hidden.")
492
- return true
493
- # id = @column_data_display_ids[column_name]
494
- # ok = false
495
-
496
- # row = panel.tables[2][3]
497
-
498
- # row.each do |cell|
499
- ## strg = cell.to_s
500
- ## insp = cell.inspect
501
- ## ole = cell.ole_object
502
- ## anId = cell.attribute_value(:id)
503
- # text = cell.text
504
- # if text =~ /#{id}/
505
- # if cell.to_s =~ /hidden/
506
- # passed_to_log( "Column '#{column_name}' is hidden.")
507
- # else
508
- # failed_to_log( "Column '#{column_name}' is not hidden.")
509
- # end
510
- # ok = true
511
- # end
512
- # end
513
- # if not ok
514
- # failed_to_log( "Column '#{column_name}' not found.")
515
- # end
516
- # rescue
517
- # failed_to_log("Unable to verify column '#{column_name}' is hidden: '#{$!}' (#{__LINE__})")
518
- end
519
-
520
- # @todo unstub
521
- # @private
522
- def verify_column_hidden_temp_ff(browser, data_index, row_index, column_name)
523
- passed_to_log("TEST STUBBED: Column '#{column_name}' is hidden.")
524
- return true
525
-
526
- row = browser.tables[data_index][row_index]
527
- # debug_to_log( "#{row.to_a}")
528
- #TODO cells are all still there in the row. Need to check for clue to hidden/visible in other tag attributes
529
- act_ary = get_row_cells_text_as_array(row)
530
-
531
- if not act_ary.include?(column_name)
532
- passed_to_log("Column '#{column_name}' is hidden.")
533
- else
534
- failed_to_log("Column '#{column_name}' is not hidden.")
535
- end
536
- end
537
-
538
- # @todo unstub
539
- # @private
540
- def verify_column_visible_temp_ff(browser, data_index, row_index, column_name)
541
- passed_to_log("TEST STUBBED: Column '#{column_name}' is visible.")
542
- return true
543
-
544
- row = browser.tables[data_index][row_index]
545
- #TODO cells are all still there in the row. Need to check for clue to hidden/visible in other tag attributes
546
- act_ary = get_row_cells_text_as_array(row)
547
-
548
- if act_ary.include?(column_name)
549
- passed_to_log("Column '#{column_name}' is visible.")
550
- else
551
- failed_to_log("Column '#{column_name}' is not visible.")
552
- end
553
- end
554
-
555
- # @todo unstub
556
- # @private
557
- def verify_column_visible(browser, panel, table_index, column_name)
558
-
559
- passed_to_log("TEST STUBBED: Column '#{column_name}' is visible.")
560
- return true
561
-
562
- # id = @column_data_display_ids[column_name]
563
- # ok = false
564
- # row = panel.tables[table_index][1]
565
- # row.each do |cell|
566
- # if cell.id == id
567
- # if not cell.to_s =~ /hidden/
568
- # passed_to_log("Column '#{column_name}' is visible.")
569
- # else
570
- # failed_to_log("Column '#{column_name}' is not visible.")
571
- # end
572
- # ok = true
573
- # end
574
- # end
575
- # if not ok
576
- # failed_to_log("Column '#{column_name}' not found.")
577
- # end
578
- rescue
579
- failed_to_log("Unable to verify column '#{column_name} is visible': '#{$!}' (#{__LINE__})")
580
- end
581
-
582
- # Verify that a table's columns are in the expected order by header names. The table is identified by its *index*
583
- # within the container *browser*.
584
- # @param [Watir::Browser] browser A reference to the browser window or container element to be tested.
585
- def verify_column_order(browser, table_index, header_index, exp_ary)
586
- mark_testlevel("Begin #{__method__.to_s.titleize}", 0)
587
- row = browser.tables[table_index][header_index]
588
- act_ary = get_row_cells_text_as_array(row)
589
-
590
- if exp_ary == act_ary
591
- passed_to_log("Column order [#{act_ary.join(', ')}] appeared as expected.")
592
- else
593
- failed_to_log("Column order [#{act_ary.join(', ')}] not as expected [#{exp_ary.join(', ')}].")
594
- end
595
- mark_testlevel("End #{__method__.to_s.titleize}", 0)
596
- end
597
-
598
- def text_in_table?(browser, how, what, expected, desc = '')
599
- msg = build_message("Table :#{how}=>#{what} contains '#{expected}.", desc)
600
- if browser.table(how, what).text =~ expected
601
- passed_to_log(msg)
602
- true
603
- else
604
- failed_to_log(msg)
605
- end
606
- rescue
607
- failed_to_log("Unable to verify that #{msg}': '#{$!}'")
608
- end
609
-
610
- def text_in_table_row_with_text?(table, text, target, desc = '')
611
- #TODO This needs clarification, renaming
612
- msg = build_message("Table :id=>#{table.id} row with text '#{text} also contains '#{target}.", desc)
613
- index = get_index_of_row_with_text(table, text)
614
- if table[index].text =~ target
615
- passed_to_log(msg)
616
- true
617
- else
618
- failed_to_log(msg)
619
- end
620
- end
621
-
622
- alias verify_text_in_table_with_text text_in_table_row_with_text?
623
-
624
- end
625
- end
626
- end
627
-
1
+ module Awetestlib
2
+ module Regression
3
+ # Methods for handling Tables, Rows, and Cells
4
+ # Rdoc work in progress
5
+ module Tables
6
+
7
+
8
+ def get_index_for_column_head(panel, table_index, strg, desc = '')
9
+ table = panel.tables[table_index]
10
+ get_column_index(table, strg, desc, true)
11
+ end
12
+
13
+ def get_column_index(table, strg, desc = '', header = false)
14
+ msg1 = " header" if header
15
+ msg = build_message("Get index of ", msg1, " column containing #{strg}. ", desc)
16
+ rgx = Regexp.new(strg)
17
+ row_idx = 0
18
+ index = -1
19
+ found = false
20
+ table.each do |row|
21
+ row_idx += 1
22
+ if row.text =~ rgx
23
+ col_idx = 1
24
+ row.each do |cell|
25
+ if cell.text =~ rgx
26
+ index = col_idx
27
+ found = true
28
+ break
29
+ end
30
+ col_idx += 1
31
+ end
32
+ end
33
+ break if found or header
34
+ end
35
+ if found
36
+ passed_to_log("#{msg} at index #{index}.")
37
+ index
38
+ else
39
+ failed_to_log("#{msg}")
40
+ nil
41
+ end
42
+ rescue
43
+ failed_to_log("Unable to #{msg} '#{$!}'")
44
+ end
45
+
46
+ # Return the index of the last row of the specified table.
47
+ # @param [Watir::Table] table A reference to the table in question.
48
+ # @param [Fixnum] pad The number of zeroes to prefix the index to allow correct sorting.
49
+ # @param [Fixnum] every A number indicating which rows in the table actually carry data if
50
+ # the table is padded with empty rows. 1 = every row, 2 = every other row, 3 = every third
51
+ # row, and etc.
52
+ # @return [Fixnum]
53
+ def get_index_of_last_row(table, pad = 2, every = 1)
54
+ index = calc_index(table.row_count, every)
55
+ index = index.to_s.rjust(pad, '0')
56
+ #debug_to_log("#{__method__}: index='#{index}' row_count=#{table.row_count} pad=#{pad} every=#{every}")
57
+ index
58
+ end
59
+
60
+ alias get_index_for_last_row get_index_of_last_row
61
+
62
+ # Return the index of the last row of the specified table containing *strg*
63
+ # @param [Watir::Table] table A reference to the table in question.
64
+ # @param [String, Regexp] strg A string or regular expression to search for in the table..
65
+ # @param [Fixnum] column_index A number indicating which rows the column to focus the search in.
66
+ # When not supplied, the entire row is searched for *strg*.
67
+ # @return [Fixnum]
68
+ def get_index_of_last_row_with_text(table, strg, column_index = nil)
69
+ debug_to_log("#{__method__}: #{get_callers(5)}")
70
+ msg1 = " in column #{column_index}" if column_index
71
+ msg = build_message("Find last row in table :id=#{table.id} with text '#{strg}'", msg1)
72
+ dbg = build_message("#{__method__}: #{table.id} text by row", msg1)
73
+ index = 0
74
+ found = false
75
+ at_index = 0
76
+ #row_count = table.row_count
77
+ table.rows.each do |row|
78
+ cell_count = get_cell_count(row)
79
+ index += 1
80
+ text = ''
81
+ if column_index
82
+ col_idx = column_index.to_i
83
+ if cell_count >= col_idx
84
+ text = row[col_idx].text
85
+ end
86
+ else
87
+ text = row.text
88
+ end
89
+ dbg << "\n#{index}. [#{text}]"
90
+ if text =~ /#{strg}/
91
+ found = true
92
+ at_index = index
93
+ end
94
+ end
95
+ debug_to_log(dbg)
96
+ if found
97
+ passed_to_log("#{msg} at index #{index}.")
98
+ at_index
99
+ else
100
+ failed_to_log("#{msg}")
101
+ nil
102
+ end
103
+ rescue
104
+ failed_to_log("Unable to #{msg}. '#{$!}'")
105
+ end
106
+
107
+ alias get_index_for_last_row_with_text get_index_of_last_row_with_text
108
+
109
+ # Return the index of the _first_ row of the specified table containing *strg*
110
+ # @param [Watir::Table] table A reference to the table in question.
111
+ # @param [String, Regexp] strg A string or regular expression to search for in the table..
112
+ # @param [Fixnum] column_index A number indicating which rows the column to focus the search in.
113
+ # When not supplied, the entire row is searched for *strg*.
114
+ # @param [Boolean] fail_if_found If true log a failure if *strg* _is_ found.
115
+ # @param [Fixnum] after_index Forces method to accept hit on *strg* only if it occurs
116
+ # after the row indicated by this argument. When omitted, the first hit is accepted.
117
+ # @return [Fixnum] the index of the row containing *strg*
118
+ def get_index_of_row_with_text(table, strg, column_index = nil, fail_if_found = false, after_index = nil)
119
+ debug_to_log("#{__method__}: #{get_callers(5)}")
120
+ if fail_if_found
121
+ msg = 'No '
122
+ else
123
+ msg = 'Find '
124
+ end
125
+ msg << "row in table :id=#{table.id} with text '#{strg}'"
126
+ msg << " in column #{column_index}" if column_index
127
+ dbg = "#{__method__}: #{table.id} text by row "
128
+ dbg << "in column #{column_index}" if column_index
129
+ index = 0
130
+ found = false
131
+ table.rows.each do |row|
132
+ cell_count = row.cells.length
133
+ index += 1
134
+ text = ''
135
+ if column_index
136
+ col_idx = column_index.to_i
137
+ if cell_count >= col_idx
138
+ text = row[col_idx].text
139
+ end
140
+ else
141
+ text = row.text
142
+ end
143
+ dbg << "\n#{index}. [#{text}]"
144
+ if text =~ /#{strg}/
145
+ if after_index and index > after_index
146
+ found = true
147
+ break
148
+ else
149
+ found = true
150
+ break
151
+ end
152
+ end
153
+ end
154
+ debug_to_log(dbg)
155
+ if found
156
+ if fail_if_found
157
+ failed_to_log("#{msg} at index #{index}.")
158
+ else
159
+ passed_to_log("#{msg} at index #{index}.")
160
+ end
161
+ index
162
+ else
163
+ if fail_if_found
164
+ passed_to_log("#{msg}")
165
+ else
166
+ failed_to_log("#{msg}")
167
+ end
168
+ nil
169
+ end
170
+ rescue
171
+ failed_to_log("Unable to #{msg}. '#{$!}'")
172
+ end
173
+
174
+ # Return the index of the _first_ row of the specified table containing *strg* in a text field
175
+ # identified by *how* and *what*.
176
+ # @param [Watir::Table] table A reference to the table in question.
177
+ # @param [String, Regexp] strg A string or regular expression to search for in the table..
178
+ # @param [Symbol] how The element attribute used to identify the specific element.
179
+ # Valid values depend on the kind of element.
180
+ # Common values: :text, :id, :title, :name, :class, :href (:link only)
181
+ # @param [String, Regexp] what A string or a regular expression to be found in the *how* attribute that uniquely identifies the element.
182
+ # @param [Fixnum] column_index A number indicating which rows the column to focus the search in.
183
+ # When not supplied, the entire row is searched for *strg*.
184
+ # @return [Fixnum] the index of the row containing *strg*
185
+ def get_index_of_row_with_textfield_value(table, strg, how, what, column_index = nil)
186
+ msg = "Find row in table :id=#{table.id} with value '#{strg}' in text_field #{how}=>'#{what} "
187
+ msg << " in column #{column_index}" if column_index
188
+ index = 0
189
+ found = false
190
+ table.rows.each do |row|
191
+ cell_count = get_cell_count(row)
192
+ index += 1
193
+ text = ''
194
+ if column_index
195
+ col_idx = column_index.to_i
196
+ if cell_count >= col_idx
197
+ if row[col_idx].text_field(how, what).exists?
198
+ value = row[col_idx].text_field(how, what).value
199
+ end
200
+ end
201
+ else
202
+ if row.text_field(how, what).exists?
203
+ value = row.text_field(how, what).value
204
+ sleep(0.25)
205
+ end
206
+ end
207
+ if value and value =~ /#{strg}/
208
+ found = true
209
+ break
210
+ end
211
+ end
212
+ if found
213
+ passed_to_log("#{msg} at index #{index}.")
214
+ else
215
+ failed_to_log("#{msg}")
216
+ end
217
+ index
218
+ rescue
219
+ failed_to_log("Unable to #{msg}. '#{$!}'")
220
+ end
221
+
222
+ # Return the index of a table in *browser* containing *strg*. *ordinal* indicates
223
+ # whether it is the first, second, third, etc. table found with the matching text in *strg*
224
+ # @param [Watir::Browser] browser A reference to the browser window or container element to be tested.
225
+ # @param [String, Regexp] strg A string or regular expression to search for in the table..
226
+ # @param [Fixnum] ordinal A number indicating which matching table will have its index returned.
227
+ # @return [Fixnum] the index of the table containing *strg*
228
+ def get_index_for_table_containing_text(browser, strg, ordinal = 1)
229
+ msg = "Get index for table containing text '#{strg}'"
230
+ index = 0
231
+ found = 0
232
+ browser.tables.each do |t|
233
+ index += 1
234
+ if t.text =~ /#{strg}/
235
+ found += 1
236
+ if ordinal > 0 and found == ordinal
237
+ break
238
+ end
239
+ end
240
+ end
241
+ if found
242
+ passed_to_log("#{msg}: #{index}")
243
+ index
244
+ else
245
+ passed_to_log("#{msg}.")
246
+ nil
247
+ end
248
+ rescue
249
+ failed_to_log("Unable to find index of table containing text '#{strg}' '#{$!}' ")
250
+ end
251
+
252
+ # Return a reference to a table in *browser* containing *strg*. *ordinal* indicates
253
+ # whether it is the first, second, third, etc. table found with the matching text in *strg*
254
+ # @param [Watir::Browser] browser A reference to the browser window or container element to be tested.
255
+ # @param [String, Regexp] strg A string or regular expression to search for in the table..
256
+ # @param [Fixnum] ordinal A number indicating which matching table will have its index returned.
257
+ # @return [Watir::Table] the table containing *strg*
258
+ def get_table_containing_text(browser, strg, ordinal = 1)
259
+ msg = "Get table #{ordinal} containing text '#{strg}'"
260
+ index = get_index_for_table_containing_text(browser, strg, ordinal)
261
+ if index
262
+ passed_to_log(msg)
263
+ browser.tables[index]
264
+ else
265
+ failed_to_log(msg)
266
+ nil
267
+ end
268
+ rescue
269
+ failed_to_log("Unable to find index of table containing text '#{strg}' '#{$!}' ")
270
+ end
271
+
272
+ def get_cell_text_from_row_with_string(nc_element, table_index, column_index, strg)
273
+ rgx = Regexp.new(strg)
274
+ text = ''
275
+ debug_to_log("strg:'#{strg}', rgx:'#{rgx}', table_index:'#{table_index}', column_index:'#{column_index}'")
276
+ nc_element.tables[table_index].each do |row|
277
+ cell_count = get_cell_count(row)
278
+ if cell_count >= column_index
279
+ #TODO this assumes column 1 is a number column
280
+ # debug_to_log("row:'#{row.cells}'")
281
+ cell_1 = row[1].text
282
+ if cell_1 =~ /\d+/
283
+ row_text = row.text
284
+ if row_text =~ rgx
285
+ text = row[column_index].text
286
+ break
287
+ end
288
+ end
289
+ end
290
+ end
291
+ text
292
+ end
293
+
294
+ # Return a hash containing a cross reference of the header names and indexes (columns) for the specified table.
295
+ # @example
296
+ # (need example and usage)
297
+ # @param [Watir::Table] table A reference to the table.
298
+ # @param [Fixnum] header_index The index of the row containing the header names.
299
+ # @return [Hash] Two level hash of hashes. Internal hashes are 'name' which allows look-up of a column index
300
+ # by the header name, and 'index' which allows look-up of the name by the column index.
301
+ def get_table_headers(table, header_index = 1)
302
+ headers = Hash.new
303
+ headers['index'] = Hash.new
304
+ headers['name'] = Hash.new
305
+ count = 1
306
+ table[header_index].each do |cell|
307
+ if cell.text.length > 0
308
+ name = cell.text.gsub(/\s+/, ' ')
309
+ headers['index'][count] = name
310
+ headers['name'][name] = count
311
+ end
312
+ count += 1
313
+ end
314
+ #debug_to_log("#{__method__}: headers:\n#{headers.to_yaml}")
315
+ headers
316
+ rescue
317
+ failed_to_log("Unable to get content headers. '#{$!}'")
318
+ end
319
+
320
+ # @param [Watir::Browser] browser A reference to the browser window or container element to be tested.
321
+ def count_rows_with_string(browser, table_index, strg)
322
+ hit = 0
323
+ browser.tables[table_index].each do |row|
324
+ if get_cell_count(row) >= 1
325
+ # debug_to_log("#{__method__}: #{row.text}")
326
+ #TODO this assumes column 1 is a number column
327
+ if row[1].text =~ /\d+/
328
+ if row.text =~ /#{strg}/i
329
+ hit += 1
330
+ debug_to_log("#{__method__}: #{row.text}")
331
+ end
332
+ end
333
+ end
334
+ end
335
+ debug_to_log("#{__method__}: hit row count: #{hit}")
336
+ hit
337
+ end
338
+
339
+ def fetch_array_for_table_column(table, column_index, start_row = 2)
340
+ ary = []
341
+ row_count = 0
342
+ table.each do |row|
343
+ row_count += 1
344
+ if get_cell_count(row) >= column_index
345
+ if row_count >= start_row
346
+ ary << row[column_index].text
347
+ end
348
+ end
349
+ end
350
+ ary
351
+ end
352
+
353
+ def fetch_hash_for_table_column(table, column_index, start_row = 2)
354
+ hash = Hash.new
355
+ row_count = 0
356
+ table.each do |row|
357
+ row_count += 1
358
+ if get_cell_count(row) >= column_index
359
+ if row_count >= start_row
360
+ hash[row_count] = row[column_index].text
361
+ end
362
+ end
363
+ end
364
+ hash
365
+ end
366
+
367
+ def get_row_cells_text_as_array(row)
368
+ ary = []
369
+ row.each do |cell|
370
+ ary << cell.text
371
+ end
372
+ ary
373
+ end
374
+
375
+ def count_data_rows(container, data_index, column_index)
376
+ cnt = 0
377
+ # get_objects(container, :tables, true)
378
+ table = container.tables[data_index]
379
+ dump_table_and_rows(table)
380
+ if table
381
+ table.rows.each do |row|
382
+ if get_cell_count(row) >= column_index
383
+ #TODO this assumes column 1 is a number column
384
+ if row[column_index].text =~ /\d+/
385
+ cnt += 1
386
+ end
387
+ end
388
+ end
389
+ end
390
+ sleep_for(2)
391
+ cnt
392
+ end
393
+
394
+ def get_cell_count(row)
395
+ if $watir_script
396
+ row.column_count
397
+ else
398
+ row.cells.length
399
+ end
400
+ end
401
+
402
+ def exercise_sorting(browser, columnList, desc = '')
403
+ #TODO put rescue inside the do loop
404
+ #parameters: browser and a list of column link text values
405
+ #example: exercise_sorting(browser,['Division', 'Payee', 'Date'], 'Sortable columns on this page')
406
+ columnList.each do |column|
407
+ click(browser, :link, :text, column, desc)
408
+ end
409
+ end
410
+
411
+ alias validate_sorting exercise_sorting
412
+
413
+ def verify_column_sort(browser, nc_element, strg, table_index, column_index=nil)
414
+ mark_testlevel("Verify Column Sort '#{strg}'", 3)
415
+ if not column_index
416
+ column_index = get_index_for_column_head(nc_element, table_index, strg)
417
+ end
418
+
419
+ if column_index
420
+ bfr_ary = fetch_array_for_table_column(nc_element, table_index, column_index)
421
+ if strg =~ /date/i
422
+ exp_ary = bfr_ary.sort { |x, y| Date.parse(x) <=> Date.parse(y) }
423
+ else
424
+ exp_ary = bfr_ary.sort { |x, y| x.gsub(',', '') <=> y.gsub(',', '') }
425
+ end
426
+
427
+ if click_text(browser, strg)
428
+ if column_index
429
+ sleep_for(2.5)
430
+ else
431
+ sleep_for(1)
432
+ end
433
+ act_ary = fetch_array_for_table_column(nc_element, table_index, column_index)
434
+
435
+ if exp_ary == act_ary
436
+ passed_to_log("Click on column '#{strg}' produces expected sorted list.")
437
+ true
438
+ else
439
+ failed_to_log("Click on column '#{strg}' fails to produce expected sorted list.")
440
+ debug_to_log("Original order ['#{bfr_ary.join("', '")}']")
441
+ debug_to_log("Expected order ['#{exp_ary.join("', '")}']")
442
+ debug_to_log(" Actual order ['#{act_ary.join("', '")}']")
443
+ end
444
+ end
445
+ else
446
+ failed_to_log("Unable to locate column index for '#{strg}' to verify sort.")
447
+ end
448
+ rescue
449
+ failed_to_log("Unable to verify sort on column '#{strg}'. #{$!}")
450
+ end
451
+
452
+ def verify_column_sort_temp_ff(browser, strg, table_index, column_index=nil)
453
+ mark_testlevel("Verify Column Sort '#{strg}'", 3)
454
+
455
+ if not column_index
456
+ column_index = get_index_for_column_head(browser, table_index, strg)
457
+ end
458
+
459
+ if column_index
460
+ bfr_ary = fetch_array_for_table_column(browser, table_index, column_index)
461
+ if strg =~ /date/i
462
+ exp_ary = bfr_ary.sort { |x, y| Date.parse(x) <=> Date.parse(y) }
463
+ else
464
+ exp_ary = bfr_ary.sort { |x, y| x.gsub(',', '') <=> y.gsub(',', '') }
465
+ end
466
+
467
+ if click_text(browser, strg)
468
+ sleep_for(3)
469
+ act_ary = fetch_array_for_table_column(browser, table_index, column_index)
470
+
471
+ if exp_ary == act_ary
472
+ passed_to_log("Click on column '#{strg}' produces expected sorted list.")
473
+ true
474
+ else
475
+ failed_to_log("Click on column '#{strg}' fails to produce expected sorted list.")
476
+ debug_to_log("Original order ['#{bfr_ary.join("', '")}']")
477
+ debug_to_log("Expected order ['#{exp_ary.join("', '")}']")
478
+ debug_to_log(" Actual order ['#{act_ary.join("', '")}']")
479
+ end
480
+ end
481
+ else
482
+ failed_to_log("Unable to locate column index for '#{strg}' to verify sort.")
483
+ end
484
+ rescue
485
+ failed_to_log("Unable to verify sort on column '#{strg}'. #{$!}")
486
+ end
487
+
488
+ # @todo unstub
489
+ # @private
490
+ def verify_column_hidden(browser, panel, table_index, column_name)
491
+ passed_to_log("TEST STUBBED: Column '#{column_name}' is hidden.")
492
+ return true
493
+ # id = @column_data_display_ids[column_name]
494
+ # ok = false
495
+
496
+ # row = panel.tables[2][3]
497
+
498
+ # row.each do |cell|
499
+ ## strg = cell.to_s
500
+ ## insp = cell.inspect
501
+ ## ole = cell.ole_object
502
+ ## anId = cell.attribute_value(:id)
503
+ # text = cell.text
504
+ # if text =~ /#{id}/
505
+ # if cell.to_s =~ /hidden/
506
+ # passed_to_log( "Column '#{column_name}' is hidden.")
507
+ # else
508
+ # failed_to_log( "Column '#{column_name}' is not hidden.")
509
+ # end
510
+ # ok = true
511
+ # end
512
+ # end
513
+ # if not ok
514
+ # failed_to_log( "Column '#{column_name}' not found.")
515
+ # end
516
+ # rescue
517
+ # failed_to_log("Unable to verify column '#{column_name}' is hidden: '#{$!}' (#{__LINE__})")
518
+ end
519
+
520
+ # @todo unstub
521
+ # @private
522
+ def verify_column_hidden_temp_ff(browser, data_index, row_index, column_name)
523
+ passed_to_log("TEST STUBBED: Column '#{column_name}' is hidden.")
524
+ return true
525
+
526
+ row = browser.tables[data_index][row_index]
527
+ # debug_to_log( "#{row.to_a}")
528
+ #TODO cells are all still there in the row. Need to check for clue to hidden/visible in other tag attributes
529
+ act_ary = get_row_cells_text_as_array(row)
530
+
531
+ if not act_ary.include?(column_name)
532
+ passed_to_log("Column '#{column_name}' is hidden.")
533
+ else
534
+ failed_to_log("Column '#{column_name}' is not hidden.")
535
+ end
536
+ end
537
+
538
+ # @todo unstub
539
+ # @private
540
+ def verify_column_visible_temp_ff(browser, data_index, row_index, column_name)
541
+ passed_to_log("TEST STUBBED: Column '#{column_name}' is visible.")
542
+ return true
543
+
544
+ row = browser.tables[data_index][row_index]
545
+ #TODO cells are all still there in the row. Need to check for clue to hidden/visible in other tag attributes
546
+ act_ary = get_row_cells_text_as_array(row)
547
+
548
+ if act_ary.include?(column_name)
549
+ passed_to_log("Column '#{column_name}' is visible.")
550
+ else
551
+ failed_to_log("Column '#{column_name}' is not visible.")
552
+ end
553
+ end
554
+
555
+ # @todo unstub
556
+ # @private
557
+ def verify_column_visible(browser, panel, table_index, column_name)
558
+
559
+ passed_to_log("TEST STUBBED: Column '#{column_name}' is visible.")
560
+ return true
561
+
562
+ # id = @column_data_display_ids[column_name]
563
+ # ok = false
564
+ # row = panel.tables[table_index][1]
565
+ # row.each do |cell|
566
+ # if cell.id == id
567
+ # if not cell.to_s =~ /hidden/
568
+ # passed_to_log("Column '#{column_name}' is visible.")
569
+ # else
570
+ # failed_to_log("Column '#{column_name}' is not visible.")
571
+ # end
572
+ # ok = true
573
+ # end
574
+ # end
575
+ # if not ok
576
+ # failed_to_log("Column '#{column_name}' not found.")
577
+ # end
578
+ rescue
579
+ failed_to_log("Unable to verify column '#{column_name} is visible': '#{$!}' (#{__LINE__})")
580
+ end
581
+
582
+ # Verify that a table's columns are in the expected order by header names. The table is identified by its *index*
583
+ # within the container *browser*.
584
+ # @param [Watir::Browser] browser A reference to the browser window or container element to be tested.
585
+ def verify_column_order(browser, table_index, header_index, exp_ary)
586
+ mark_testlevel("Begin #{__method__.to_s.titleize}", 0)
587
+ row = browser.tables[table_index][header_index]
588
+ act_ary = get_row_cells_text_as_array(row)
589
+
590
+ if exp_ary == act_ary
591
+ passed_to_log("Column order [#{act_ary.join(', ')}] appeared as expected.")
592
+ else
593
+ failed_to_log("Column order [#{act_ary.join(', ')}] not as expected [#{exp_ary.join(', ')}].")
594
+ end
595
+ mark_testlevel("End #{__method__.to_s.titleize}", 0)
596
+ end
597
+
598
+ def text_in_table?(browser, how, what, expected, desc = '')
599
+ msg = build_message("Table :#{how}=>#{what} contains '#{expected}.", desc)
600
+ if browser.table(how, what).text =~ expected
601
+ passed_to_log(msg)
602
+ true
603
+ else
604
+ failed_to_log(msg)
605
+ end
606
+ rescue
607
+ failed_to_log("Unable to verify that #{msg}': '#{$!}'")
608
+ end
609
+
610
+ def text_in_table_row_with_text?(table, text, target, desc = '')
611
+ #TODO This needs clarification, renaming
612
+ msg = build_message("Table :id=>#{table.id} row with text '#{text} also contains '#{target}.", desc)
613
+ index = get_index_of_row_with_text(table, text)
614
+ if table[index].text =~ target
615
+ passed_to_log(msg)
616
+ true
617
+ else
618
+ failed_to_log(msg)
619
+ end
620
+ end
621
+
622
+ alias verify_text_in_table_with_text text_in_table_row_with_text?
623
+
624
+ end
625
+ end
626
+ end
627
+