awetestlib 0.1.28 → 0.1.29pre1

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 (82) hide show
  1. data/.gitattributes +22 -22
  2. data/.gitignore +69 -69
  3. data/.yardopts +7 -7
  4. data/README.md +108 -108
  5. data/awetestlib.gemspec +57 -57
  6. data/awetestlib.windows.gemspec +41 -41
  7. data/awetestlib_notes.txt +4 -4
  8. data/awetestlib_osx.gemspec +47 -48
  9. data/bin/awetestlib +99 -99
  10. data/bin/awetestlib-android-setup.rb +26 -26
  11. data/bin/awetestlib-cucumber-setup.rb +28 -28
  12. data/bin/awetestlib-driver-setup.rb +21 -21
  13. data/bin/awetestlib-helpers.rb +41 -41
  14. data/bin/awetestlib-mobile-app-setup.rb +31 -31
  15. data/bin/awetestlib-netbeans-setup.rb +58 -58
  16. data/bin/awetestlib-regression-setup.rb +15 -15
  17. data/bin/awetestlib-rubymine-setup.rb +39 -39
  18. data/drivers/chromedriver.exe +0 -0
  19. data/ext/Rakefile +1 -1
  20. data/ext/mkrf_conf.rb +27 -27
  21. data/lib/awetestlib/html_report.rb +142 -142
  22. data/lib/awetestlib/logging.rb +366 -366
  23. data/lib/awetestlib/regression/browser.rb +1380 -1375
  24. data/lib/awetestlib/regression/drag_and_drop.rb +421 -420
  25. data/lib/awetestlib/regression/find.rb +345 -345
  26. data/lib/awetestlib/regression/legacy.rb +1187 -1187
  27. data/lib/awetestlib/regression/page_data.rb +191 -191
  28. data/lib/awetestlib/regression/runner.rb +307 -307
  29. data/lib/awetestlib/regression/tables.rb +627 -619
  30. data/lib/awetestlib/regression/user_input.rb +576 -576
  31. data/lib/awetestlib/regression/utilities.rb +1046 -988
  32. data/lib/awetestlib/regression/validations.rb +1093 -1074
  33. data/lib/awetestlib/regression/waits.rb +470 -470
  34. data/lib/awetestlib/runner.rb +18 -18
  35. data/lib/awetestlib.rb +41 -41
  36. data/lib/patches/README +2 -2
  37. data/lib/patches/firewatir.rb +106 -106
  38. data/lib/patches/watir.rb +175 -175
  39. data/lib/version.rb +2 -2
  40. data/license.txt +13 -13
  41. data/netbeans_setup.md +29 -29
  42. data/rdoc_test.bat +1 -1
  43. data/rubymine_setup.md +23 -23
  44. data/setup_samples/sample_android/features/dk.mejer.hansen.control.FlyingColorsPlayerAidActivity.apk +0 -0
  45. data/setup_samples/sample_android/features/sample_android.feature +5 -5
  46. data/setup_samples/sample_android/features/step_definitions/calabash_steps.rb +1 -1
  47. data/setup_samples/sample_android/features/support/app_installation_hooks.rb +36 -36
  48. data/setup_samples/sample_android/features/support/app_life_cycle_hooks.rb +14 -14
  49. data/setup_samples/sample_android/features/test_servers/8ba795a0288381ae346b67867b586881_0.3.2.apk +0 -0
  50. data/setup_samples/sample_cucumber/features/step_definitions/predefined_steps.rb +76 -76
  51. data/setup_samples/sample_cucumber/features/yahoo_mail.feature +11 -11
  52. data/setup_samples/sample_mobile_app/features/my_first.feature +14 -14
  53. data/setup_samples/sample_mobile_app/features/step_definitions/predefined_webview_steps.rb +80 -80
  54. data/setup_samples/sample_mobile_app/features/support/env.rb +2 -2
  55. data/setup_samples/sample_netbeans/demo.rb +86 -86
  56. data/setup_samples/sample_netbeans/nbproject/configs/Demo.properties +2 -2
  57. data/setup_samples/sample_netbeans/nbproject/private/config.properties +1 -1
  58. data/setup_samples/sample_netbeans/nbproject/private/configs/Demo.properties +2 -2
  59. data/setup_samples/sample_netbeans/nbproject/private/private.properties +2 -2
  60. data/setup_samples/sample_netbeans/nbproject/project.properties +5 -5
  61. data/setup_samples/sample_netbeans/nbproject/project.xml +13 -13
  62. data/setup_samples/sample_rubymine/.idea/encodings.xml +5 -5
  63. data/setup_samples/sample_rubymine/.idea/misc.xml +5 -5
  64. data/setup_samples/sample_rubymine/.idea/modules.xml +9 -9
  65. data/setup_samples/sample_rubymine/.idea/sample_rubymine.iml +9 -9
  66. data/setup_samples/sample_rubymine/.idea/scopes/scope_settings.xml +4 -4
  67. data/setup_samples/sample_rubymine/.idea/vcs.xml +7 -7
  68. data/setup_samples/sample_rubymine/.idea/workspace.xml +213 -213
  69. data/setup_samples/sample_rubymine/demo.rb +86 -86
  70. data/test/create_zoho.rb +66 -66
  71. data/test/create_zoho_account1.rb +68 -68
  72. data/test/create_zoho_account2.rb +72 -72
  73. data/test/demo.rb +87 -87
  74. data/test/google_search1.rb +16 -16
  75. data/test/google_search2.rb +19 -19
  76. data/test/login_1.rb +37 -37
  77. data/test/login_1a.rb +37 -37
  78. data/test/login_2.rb +32 -32
  79. data/test/zoho_exercise.rb +21 -21
  80. data/test/zoho_util.rb +487 -487
  81. data/tmp/placeholder.html +71 -71
  82. metadata +18 -49
data/test/zoho_util.rb CHANGED
@@ -1,487 +1,487 @@
1
- module ZohoUtil
2
-
3
- def run
4
- if @xls_path
5
- get_variables(@xls_path, :role)
6
- @login.each_key do |key|
7
- if @login[key]['enabled'] == 'Y'
8
- @user = @login[key]['userid']
9
- @pass = @login[key]['password']
10
- @role = @login[key]['role']
11
- @url1 = @login[key]['url']
12
- debug_to_report("@user: #{@user}, @pass: #{@pass}, @role: #{@role} (#{__LINE__})")
13
- break
14
- end
15
- end
16
- else
17
- @user = "joeklienwatir@gmail.com"
18
- @pass = 'watir001'
19
- @url1 = "https://accounts.zoho.com/login?serviceurl=https://www.zoho.com/&hide_signup=true&css=https://www.zoho.com/css/login.css"
20
- end
21
-
22
- home_url = 'https://crm.zoho.com/crm/ShowHomePage.do'
23
- validation = 'Welcome joeklienwatir at Software'
24
-
25
- browser = open_browser
26
- go_to_url(browser, @url1)
27
- zoho_login(browser, @user, @pass, home_url, validation)
28
- run_test(browser)
29
- logout(browser)
30
-
31
- rescue
32
- fatal_to_log("#{@myName} '#{$!}'")
33
- browser.close
34
- raise
35
- end
36
-
37
- def zoho_login(browser, userid, password, url, validation = 'Welcome joeklienwatir at Software')
38
- msg = build_message("#{__method__.to_s.titleize}", "userid:'#{userid}",
39
- "password:'#{password}", "URL:#{url}")
40
- mark_testlevel(msg, 8)
41
- set_textfield_by_name(browser, 'lid', userid)
42
- set_textfield_by_name(browser, 'pwd', password)
43
- click_button_by_value(browser, 'Sign In')
44
- go_to_url(browser, url)
45
- validate_text(browser, validation)
46
- end
47
-
48
- def navigate_to_crm(browser)
49
- mark_testlevel("#{__method__.to_s.titleize}", 3)
50
- click_text(browser, 'CRM')
51
- end
52
-
53
- def navigate_to_project(browser)
54
- mark_testlevel("#{__method__.to_s.titleize}", 3)
55
- click_text(browser, 'Projects')
56
- end
57
-
58
- def signout(browser)
59
- mark_testlevel("#{__method__.to_s.titleize}", 8)
60
- click_text(browser, /Sign Out/)
61
- end
62
-
63
- def create_blank_new_account(browser)
64
- mark_testlevel("#{__method__.to_s.titleize}", 3)
65
- click_text(browser, 'New Account')
66
- validate_text(browser, 'Create Account')
67
- click_button_by_value(browser, 'Save')
68
- sleep(1)
69
- close_popup(browser, 'Message from webpage')
70
- end
71
-
72
- def export_accounts(browser)
73
- mark_testlevel("#{__method__.to_s.titleize}", 5)
74
- click_text(browser, 'Setup')
75
- sleep_for(2)
76
- click_text(browser, 'Export Data')
77
- sleep_for(2)
78
- select_option_by_name_and_option_value(browser, 'module', 'Accounts')
79
- if @use_sikuli
80
- run_sikuli_script("exportaccounts")
81
- close_popup(browser, 'File Download')
82
- else
83
- #click_button_no_wait_by_value(browser, 'Export')
84
- # Make sure popups are allowed by browser
85
-
86
- mark_testlevel("#{__method__.to_s.titleize} Download", 4)
87
- filename = 'Account_Export.cvs'
88
- filepath = "#{@myRoot}/#{filename}"
89
- filepath.gsub!('/', '\\')
90
- message_to_log("#{filepath.to_s}")
91
- if File.exist?(filepath)
92
- File.delete(filepath)
93
- end
94
- sleep(3)
95
-
96
- click_button_no_wait_by_value(browser, 'Export')
97
- sleep_for(5)
98
- close_popup(browser, 'Message from webpage', 'Are you sure?')
99
- sleep_for(1)
100
-
101
- click_button_no_wait_by_value(browser, 'Export')
102
- sleep_for(3)
103
- close_popup(browser, 'Message from webpage', 'Are you sure?')
104
- sleep_for(3)
105
-
106
- save_file1(filepath)
107
- sleep_for(4)
108
-
109
- #if popup_exists?(popup, 'File Download')
110
- # save_file(filepath)
111
- # click_popup_button('File Download', 'Save')
112
- # file_download(browser)
113
- # save_file_orig(filepath)
114
- # close_popup_by_button_title(popup, 'Close', 'Download Complete')
115
- #end
116
- end
117
- end
118
-
119
- def import_accounts(browser)
120
- mark_testlevel("#{__method__.to_s.titleize}", 5)
121
- #click_class(browser, 'menuOn', 'Accounts')
122
- click_text(browser, 'Accounts')
123
- click_text(browser, 'Import Accounts')
124
- click(browser, :button, :value, 'Import Accounts')
125
- validate_text(browser, 'Import Accounts')
126
- #click_button_by_name(browser, 'theFile')
127
- #file_upload(filepath)
128
- #click_button_by_class(browser, 'button')
129
- #select_option_by_name_and_option_value(browser, 'CrmAccount:ACCOUNTNAME', 'Account Name')
130
- #click_button_by_class(browser, 'button')
131
- #click_button_by_value(browser, 'Import')
132
- #validate_no_text(browser, '0', 'No of Records added:')
133
- end
134
-
135
- def verify_accounts(browser)
136
- mark_testlevel("#{__method__.to_s.titleize}", 5)
137
- click_text(browser, 'Accounts')
138
- validate_text(browser, '<No Accounts found >')
139
- #select_option_by_class_and_option_value(browser, 'select', 'My Accounts')
140
- #sleep(1)
141
- #select_option_by_class_and_option_value(browser, 'select', 'New This Week')
142
- #sleep(1)
143
- #select_option_by_class_and_option_value(browser, 'select', 'New Last Week')
144
- #sleep(1)
145
- #select_option_by_class_and_option_value(browser, 'select', 'Unread Accounts')
146
- #sleep(1)
147
- end
148
-
149
- def reports(browser)
150
- mark_testlevel("#{__method__.to_s.titleize}", 6)
151
- click_text(browser, 'Reports')
152
- validate_text(browser, 'Recently Accessed Reports')
153
- validate_text(browser, '<No Recent Reports Found >')
154
- end
155
-
156
- def search_accounts(browser)
157
- mark_testlevel("#{__method__.to_s.titleize}", 6)
158
- select_option_by_name_and_option_value(browser, 'searchCategory', 'Accounts')
159
- set_textfield_by_id(browser, 'searchword', 'Test Account #1')
160
- click_button_by_value(browser, 'Go')
161
- sleep(3)
162
- validate_text(browser, 'Search Results')
163
- end
164
-
165
- def clone_account(browser)
166
- mark_testlevel("#{__method__.to_s.titleize}", 5)
167
- click_text(browser, 'Home')
168
- sleep(1)
169
- validate_text(browser, 'Welcome tester at Software')
170
- click_text(browser, 'Tester')
171
- sleep(2)
172
- validate_text(browser, 'Lead Details')
173
- validate_text(browser, 'Lead Information')
174
- click_button_by_name(browser, 'Clone')
175
- sleep(2)
176
- validate_text(browser, 'Clone Account')
177
- click_button_by_value(browser, 'Save')
178
- end
179
-
180
- def pagination(browser)
181
- mark_testlevel("#{__method__.to_s.titleize}", 6)
182
- click_text(browser, 'Accounts')
183
- sleep(1)
184
- click_text(browser, 'A')
185
- sleep(1)
186
- click_text(browser, 'B')
187
- sleep(1)
188
- click_text(browser, 'C')
189
- sleep(1)
190
- click_text(browser, 'D')
191
- sleep(1)
192
- click_text(browser, 'E')
193
- sleep(1)
194
- click_text(browser, 'F')
195
- sleep(1)
196
- end
197
-
198
- def click_headers(browser)
199
- mark_testlevel("#{__method__.to_s.titleize}", 6)
200
- click_text(browser, 'Leads')
201
- sleep(1)
202
- click_text(browser, 'Accounts')
203
- sleep(1)
204
- click_text(browser, 'Contacts')
205
- sleep(1)
206
- click_text(browser, 'Potentials')
207
- sleep(1)
208
- click_text(browser, 'Campaigns')
209
- sleep(1)
210
- click_text(browser, 'Reports')
211
- sleep(1)
212
- click_text(browser, 'Dashboards')
213
- sleep(1)
214
- click_text(browser, 'Activities')
215
- sleep(1)
216
- click_text(browser, 'Cases')
217
- sleep(1)
218
- end
219
-
220
- def new_lead(browser)
221
- mark_testlevel("#{__method__.to_s.titleize}", 3)
222
- click_text(browser, 'Leads')
223
- sleep(2)
224
- validate_text(browser, 'Leads: All Open Leads')
225
- click_button_by_value(browser, 'New Lead ')
226
- sleep(2)
227
- validate_text(browser, 'Create Lead')
228
- select_option_by_name_and_option_value(browser, 'property(saltName)', 'Mr.')
229
- #browser.select_list(:name, 'property(saltName)').select_value(Mr.)
230
-
231
- set_textfield_by_name(browser, 'property(Company)', 'Test Zoho Company')
232
- set_textfield_by_name(browser, 'property(Last Name)', 'Tester')
233
- set_textfield_by_name(browser, 'property(Phone)', '415-999-9999')
234
-
235
- select_option_by_name_and_option_value(browser, 'property(Lead Source)', 'Advertisement')
236
- select_option_by_name_and_option_value(browser, 'property(Industry)', 'ASP')
237
- select_option_by_name_and_option_value(browser, 'property(Lead Status)', 'Contacted')
238
- select_option_by_name_and_option_value(browser, 'property(Rating)', 'Active')
239
-
240
-
241
- browser.image(:title, 'Calculator').click
242
- sleep(4)
243
- attach_popup_by_url(browser, "https://crmold.zoho.com/crm/Calc.do?currFld=property(Annual%20Revenue)")
244
- sleep(3)
245
- close_modal_ie(browser, 'Calculator')
246
- set_checkbox_by_name(browser, 'property(Email Opt Out)')
247
- sleep(2)
248
- clear_checkbox_by_name(browser, 'property(Email Opt Out)')
249
-
250
-
251
- set_textfield_by_name(browser, 'property(Street)', '1600 Holloway Avenue') ## Address
252
- set_textfield_by_name(browser, 'property(State)', 'California')
253
- set_textfield_by_name(browser, 'property(City)', 'San Francisco')
254
- set_textfield_by_name(browser, 'property(Zip Code)', '94541')
255
- set_textfield_by_name(browser, 'property(Country)', 'USA')
256
-
257
- set_textfield_by_name(browser, 'property(Description)', 'This is a description')
258
- click_button_by_value(browser, 'Save')
259
- sleep(2)
260
- end
261
-
262
- def find_leads(browser)
263
- mark_testlevel("#{__method__.to_s.titleize}", 5)
264
- click_text(browser, 'Leads')
265
- sleep(1)
266
- set_textfield_by_name(browser, 'newsearchString', 'Test Zoho Company')
267
- click_button_by_name(browser, 'Go')
268
- sleep(2)
269
- validate_text(browser, 'Test Zoho Company')
270
- end
271
-
272
- def leads_delete_message(browser)
273
- mark_testlevel("#{__method__.to_s.titleize}", 4)
274
- click_text(browser, 'Leads')
275
- sleep(1)
276
- set_checkbox_by_name(browser, 'allcheck')
277
- sleep(1)
278
- clear_checkbox_by_name(browser, 'allcheck')
279
- sleep(1)
280
- click_button_by_value(browser, 'Delete')
281
- sleep(1)
282
- close_popup(browser, 'Message from webpage')
283
- end
284
-
285
- def find_lead_reports(browser) ## Find Lead Reports by Source
286
- mark_testlevel("#{__method__.to_s.titleize}", 6)
287
- click_text(browser, 'Reports')
288
- sleep(2)
289
- click_text(browser, 'Lead Reports')
290
- sleep(2)
291
- click_text(browser, 'Leads By Source')
292
- sleep(2)
293
- validate_text(browser, 'Leads By Source')
294
-
295
- select_option_by_name_and_option_value(browser, 'stdDateFilter', 'today')
296
- click_button_by_value(browser, 'Apply Filter')
297
- sleep(2)
298
- validate_text(browser, 'tester')
299
- end
300
-
301
- def create_chart(browser)
302
- mark_testlevel("#{__method__.to_s.titleize}", 7)
303
- click_button_by_value(browser, 'Delete Chart')
304
- sleep(2)
305
- click_button_by_value(browser, 'Create Chart')
306
- sleep(2)
307
- validate_text(browser, 'Create Chart: Leads By Source')
308
-
309
- browser.frame(:name, 'chartLayer').cell(:text, 'Vertical Bar').click
310
-
311
- #click_id(browser, 'chart1') ## Vertical Bar chart
312
- sleep(2)
313
- click_button_by_value(browser, 'Save')
314
- sleep(3)
315
- end
316
-
317
- def create_campaign(browser)
318
- mark_testlevel("#{__method__.to_s.titleize}", 7)
319
- click_text(browser, 'Home')
320
- sleep(1)
321
- click_text(browser, 'Create Campaign')
322
- set_textfield_by_name(browser, 'property(Campaign Name)', 'Zoho Campaign')
323
- select_option_by_name_and_option_value(browser, 'property(Type)', 'Conference')
324
- select_option_by_name_and_option_value(browser, 'property(Status)', 'Planning')
325
- sleep(1)
326
- set_textfield_by_name(browser, 'property(Start Date)', '03/11/2012')
327
- set_textfield_by_name(browser, 'property(End Date)', '05/20/2012')
328
- #browser.button(:onclick, 'showCalc('property(Actual Cost)')'
329
-
330
- end
331
-
332
- def create_task(browser)
333
- mark_testlevel("#{__method__.to_s.titleize}", 8)
334
- click_text(browser, 'Home')
335
- sleep(1)
336
- click_text(browser, 'New Task')
337
- sleep(2)
338
- validate_text(browser, 'Create Task')
339
-
340
- browser.image(:title, 'Subject Name Lookup').click
341
- sleep(2)
342
- popup = attach_browser_by_url(browser, /Subject/)
343
-
344
- sleep(2)
345
- popup.link(:text, 'Product Demo').click
346
- validate_textfield_value_by_name(browser, /Subject/, 'Product Demo')
347
-
348
- set_textfield_by_name(browser, 'property(Due Date)', '03/11/2012')
349
- select_option_by_name_and_option_value(browser, 'property(leContModSel)', 'Leads')
350
- sleep(1)
351
- select_option_by_name_and_option_value(browser, 'property(leContModSel)', 'Contacts')
352
-
353
- browser.image(:id, 'modNameImg').click
354
- sleep(2)
355
- #attach_popup(browser, :title, /Zoho CRM - Account Name Lookup/)
356
- popup = attach_browser_by_url(browser, "https://crmold.zoho.com/crm/Search.do?searchmodule=Accounts&fldName=modname&fldId=modid&fldLabel=Accounts&fldValue=&user=undefined&condition=undefined")
357
- sleep(1)
358
- set_textfield_by_name(popup, 'fldValue', 'Test Account #1')
359
- click_button_by_value(popup, 'Go')
360
- popup.link(:text, 'Test Account #1').click
361
- close_modal_ie(browser, 'Account Name Lookup')
362
- sleep(2)
363
-
364
- select_option_by_name_and_option_value(browser, 'property(Status)', 'In Progress')
365
- select_option_by_name_and_option_value(browser, 'property(Priority)', 'Normal')
366
- set_textfield_by_name(browser, 'property(Description)', 'This is the task information')
367
- click_button_by_value(browser, 'Save')
368
- sleep(3)
369
- end
370
-
371
- ########################################################################
372
- # EVERYTHING BELOW: TEMPORARY OVERRIDES/ADDITIONS NOT YET IN SHAMISEN pmn 12jul1012
373
- ########################################################################
374
-
375
- def get_variables(file, login = :role, dbg = true)
376
- debug_to_log("#{__method__}: file = #{file}")
377
- debug_to_log("#{__method__}: role = #{login}")
378
-
379
- @var = Hash.new
380
- workbook = Excel.new(file)
381
- data_index = find_sheet_with_name(workbook, 'Data')
382
- workbook.default_sheet = workbook.sheets[data_index]
383
- var_col = 0
384
-
385
- 2.upto(workbook.last_column) do |col|
386
- scriptName = workbook.cell(1, col)
387
- if scriptName == @myName
388
- var_col = col
389
- break
390
- end
391
- end
392
-
393
- 2.upto(workbook.last_row) do |line|
394
- name = workbook.cell(line, 'A')
395
- value = workbook.cell(line, var_col).to_s.strip
396
- @var[name] = value
397
- end
398
-
399
- @var.keys.sort.each do |name|
400
- message_tolog("@var #{name}: '#{@var[name]}'")
401
- end if dbg
402
-
403
- @login = Hash.new
404
- login_col = 0
405
- role_col = 0
406
- userid_col = 0
407
- password_col = 0
408
- url_col = 0
409
- name_col = 0
410
- role_index = find_sheet_with_name(workbook, 'Login')
411
- if role_index >= 0
412
- workbook.default_sheet = workbook.sheets[role_index]
413
-
414
- 1.upto(workbook.last_column) do |col|
415
- a_cell = workbook.cell(1, col)
416
- case a_cell
417
- when @myName
418
- login_col = col
419
- break
420
- when 'role'
421
- role_col = col
422
- when 'userid'
423
- userid_col = col
424
- when 'password'
425
- password_col = col
426
- when 'url'
427
- url_col = col
428
- when 'name'
429
- name_col = col
430
- end
431
- end
432
-
433
- 2.upto(workbook.last_row) do |line|
434
- role = workbook.cell(line, role_col)
435
- userid = workbook.cell(line, userid_col)
436
- password = workbook.cell(line, password_col)
437
- url = workbook.cell(line, url_col)
438
- username = workbook.cell(line, name_col)
439
- enabled = workbook.cell(line, login_col).to_s
440
-
441
- case login
442
- when :id
443
- key = userid
444
- when :role
445
- key = role
446
- else
447
- key = role
448
- end
449
-
450
- @login[key] = Hash.new
451
- @login[key]['role'] = role
452
- @login[key]['userid'] = userid
453
- @login[key]['password'] = password
454
- @login[key]['url'] = url
455
- @login[key]['name'] = username
456
- @login[key]['enabled'] = enabled
457
-
458
- end
459
-
460
- @login.keys.sort.each do |key|
461
- message_tolog("@login (by #{login}): #{key}=>'#{@login[key].to_yaml}'")
462
- end if dbg
463
- end
464
-
465
- rescue
466
- fatal_to_log("#{__method__}: '#{$!}'")
467
- end
468
-
469
- def find_sheet_with_name(workbook, sheet_name)
470
- sheets = workbook.sheets
471
- idx = 0
472
- found = false
473
- sheets.each do |s|
474
- if s == sheet_name
475
- found = true
476
- break
477
- end
478
- idx += 1
479
- end
480
- if found
481
- idx
482
- else
483
- -1
484
- end
485
- end
486
-
487
- end
1
+ module ZohoUtil
2
+
3
+ def run
4
+ if @xls_path
5
+ get_variables(@xls_path, :role)
6
+ @login.each_key do |key|
7
+ if @login[key]['enabled'] == 'Y'
8
+ @user = @login[key]['userid']
9
+ @pass = @login[key]['password']
10
+ @role = @login[key]['role']
11
+ @url1 = @login[key]['url']
12
+ debug_to_report("@user: #{@user}, @pass: #{@pass}, @role: #{@role} (#{__LINE__})")
13
+ break
14
+ end
15
+ end
16
+ else
17
+ @user = "joeklienwatir@gmail.com"
18
+ @pass = 'watir001'
19
+ @url1 = "https://accounts.zoho.com/login?serviceurl=https://www.zoho.com/&hide_signup=true&css=https://www.zoho.com/css/login.css"
20
+ end
21
+
22
+ home_url = 'https://crm.zoho.com/crm/ShowHomePage.do'
23
+ validation = 'Welcome joeklienwatir at Software'
24
+
25
+ browser = open_browser
26
+ go_to_url(browser, @url1)
27
+ zoho_login(browser, @user, @pass, home_url, validation)
28
+ run_test(browser)
29
+ logout(browser)
30
+
31
+ rescue
32
+ fatal_to_log("#{@myName} '#{$!}'")
33
+ browser.close
34
+ raise
35
+ end
36
+
37
+ def zoho_login(browser, userid, password, url, validation = 'Welcome joeklienwatir at Software')
38
+ msg = build_message("#{__method__.to_s.titleize}", "userid:'#{userid}",
39
+ "password:'#{password}", "URL:#{url}")
40
+ mark_testlevel(msg, 8)
41
+ set_textfield_by_name(browser, 'lid', userid)
42
+ set_textfield_by_name(browser, 'pwd', password)
43
+ click_button_by_value(browser, 'Sign In')
44
+ go_to_url(browser, url)
45
+ validate_text(browser, validation)
46
+ end
47
+
48
+ def navigate_to_crm(browser)
49
+ mark_testlevel("#{__method__.to_s.titleize}", 3)
50
+ click_text(browser, 'CRM')
51
+ end
52
+
53
+ def navigate_to_project(browser)
54
+ mark_testlevel("#{__method__.to_s.titleize}", 3)
55
+ click_text(browser, 'Projects')
56
+ end
57
+
58
+ def signout(browser)
59
+ mark_testlevel("#{__method__.to_s.titleize}", 8)
60
+ click_text(browser, /Sign Out/)
61
+ end
62
+
63
+ def create_blank_new_account(browser)
64
+ mark_testlevel("#{__method__.to_s.titleize}", 3)
65
+ click_text(browser, 'New Account')
66
+ validate_text(browser, 'Create Account')
67
+ click_button_by_value(browser, 'Save')
68
+ sleep(1)
69
+ close_popup(browser, 'Message from webpage')
70
+ end
71
+
72
+ def export_accounts(browser)
73
+ mark_testlevel("#{__method__.to_s.titleize}", 5)
74
+ click_text(browser, 'Setup')
75
+ sleep_for(2)
76
+ click_text(browser, 'Export Data')
77
+ sleep_for(2)
78
+ select_option_by_name_and_option_value(browser, 'module', 'Accounts')
79
+ if @use_sikuli
80
+ run_sikuli_script("exportaccounts")
81
+ close_popup(browser, 'File Download')
82
+ else
83
+ #click_button_no_wait_by_value(browser, 'Export')
84
+ # Make sure popups are allowed by browser
85
+
86
+ mark_testlevel("#{__method__.to_s.titleize} Download", 4)
87
+ filename = 'Account_Export.cvs'
88
+ filepath = "#{@myRoot}/#{filename}"
89
+ filepath.gsub!('/', '\\')
90
+ message_to_log("#{filepath.to_s}")
91
+ if File.exist?(filepath)
92
+ File.delete(filepath)
93
+ end
94
+ sleep(3)
95
+
96
+ click_button_no_wait_by_value(browser, 'Export')
97
+ sleep_for(5)
98
+ close_popup(browser, 'Message from webpage', 'Are you sure?')
99
+ sleep_for(1)
100
+
101
+ click_button_no_wait_by_value(browser, 'Export')
102
+ sleep_for(3)
103
+ close_popup(browser, 'Message from webpage', 'Are you sure?')
104
+ sleep_for(3)
105
+
106
+ save_file1(filepath)
107
+ sleep_for(4)
108
+
109
+ #if popup_exists?(popup, 'File Download')
110
+ # save_file(filepath)
111
+ # click_popup_button('File Download', 'Save')
112
+ # file_download(browser)
113
+ # save_file_orig(filepath)
114
+ # close_popup_by_button_title(popup, 'Close', 'Download Complete')
115
+ #end
116
+ end
117
+ end
118
+
119
+ def import_accounts(browser)
120
+ mark_testlevel("#{__method__.to_s.titleize}", 5)
121
+ #click_class(browser, 'menuOn', 'Accounts')
122
+ click_text(browser, 'Accounts')
123
+ click_text(browser, 'Import Accounts')
124
+ click(browser, :button, :value, 'Import Accounts')
125
+ validate_text(browser, 'Import Accounts')
126
+ #click_button_by_name(browser, 'theFile')
127
+ #file_upload(filepath)
128
+ #click_button_by_class(browser, 'button')
129
+ #select_option_by_name_and_option_value(browser, 'CrmAccount:ACCOUNTNAME', 'Account Name')
130
+ #click_button_by_class(browser, 'button')
131
+ #click_button_by_value(browser, 'Import')
132
+ #validate_no_text(browser, '0', 'No of Records added:')
133
+ end
134
+
135
+ def verify_accounts(browser)
136
+ mark_testlevel("#{__method__.to_s.titleize}", 5)
137
+ click_text(browser, 'Accounts')
138
+ validate_text(browser, '<No Accounts found >')
139
+ #select_option_by_class_and_option_value(browser, 'select', 'My Accounts')
140
+ #sleep(1)
141
+ #select_option_by_class_and_option_value(browser, 'select', 'New This Week')
142
+ #sleep(1)
143
+ #select_option_by_class_and_option_value(browser, 'select', 'New Last Week')
144
+ #sleep(1)
145
+ #select_option_by_class_and_option_value(browser, 'select', 'Unread Accounts')
146
+ #sleep(1)
147
+ end
148
+
149
+ def reports(browser)
150
+ mark_testlevel("#{__method__.to_s.titleize}", 6)
151
+ click_text(browser, 'Reports')
152
+ validate_text(browser, 'Recently Accessed Reports')
153
+ validate_text(browser, '<No Recent Reports Found >')
154
+ end
155
+
156
+ def search_accounts(browser)
157
+ mark_testlevel("#{__method__.to_s.titleize}", 6)
158
+ select_option_by_name_and_option_value(browser, 'searchCategory', 'Accounts')
159
+ set_textfield_by_id(browser, 'searchword', 'Test Account #1')
160
+ click_button_by_value(browser, 'Go')
161
+ sleep(3)
162
+ validate_text(browser, 'Search Results')
163
+ end
164
+
165
+ def clone_account(browser)
166
+ mark_testlevel("#{__method__.to_s.titleize}", 5)
167
+ click_text(browser, 'Home')
168
+ sleep(1)
169
+ validate_text(browser, 'Welcome tester at Software')
170
+ click_text(browser, 'Tester')
171
+ sleep(2)
172
+ validate_text(browser, 'Lead Details')
173
+ validate_text(browser, 'Lead Information')
174
+ click_button_by_name(browser, 'Clone')
175
+ sleep(2)
176
+ validate_text(browser, 'Clone Account')
177
+ click_button_by_value(browser, 'Save')
178
+ end
179
+
180
+ def pagination(browser)
181
+ mark_testlevel("#{__method__.to_s.titleize}", 6)
182
+ click_text(browser, 'Accounts')
183
+ sleep(1)
184
+ click_text(browser, 'A')
185
+ sleep(1)
186
+ click_text(browser, 'B')
187
+ sleep(1)
188
+ click_text(browser, 'C')
189
+ sleep(1)
190
+ click_text(browser, 'D')
191
+ sleep(1)
192
+ click_text(browser, 'E')
193
+ sleep(1)
194
+ click_text(browser, 'F')
195
+ sleep(1)
196
+ end
197
+
198
+ def click_headers(browser)
199
+ mark_testlevel("#{__method__.to_s.titleize}", 6)
200
+ click_text(browser, 'Leads')
201
+ sleep(1)
202
+ click_text(browser, 'Accounts')
203
+ sleep(1)
204
+ click_text(browser, 'Contacts')
205
+ sleep(1)
206
+ click_text(browser, 'Potentials')
207
+ sleep(1)
208
+ click_text(browser, 'Campaigns')
209
+ sleep(1)
210
+ click_text(browser, 'Reports')
211
+ sleep(1)
212
+ click_text(browser, 'Dashboards')
213
+ sleep(1)
214
+ click_text(browser, 'Activities')
215
+ sleep(1)
216
+ click_text(browser, 'Cases')
217
+ sleep(1)
218
+ end
219
+
220
+ def new_lead(browser)
221
+ mark_testlevel("#{__method__.to_s.titleize}", 3)
222
+ click_text(browser, 'Leads')
223
+ sleep(2)
224
+ validate_text(browser, 'Leads: All Open Leads')
225
+ click_button_by_value(browser, 'New Lead ')
226
+ sleep(2)
227
+ validate_text(browser, 'Create Lead')
228
+ select_option_by_name_and_option_value(browser, 'property(saltName)', 'Mr.')
229
+ #browser.select_list(:name, 'property(saltName)').select_value(Mr.)
230
+
231
+ set_textfield_by_name(browser, 'property(Company)', 'Test Zoho Company')
232
+ set_textfield_by_name(browser, 'property(Last Name)', 'Tester')
233
+ set_textfield_by_name(browser, 'property(Phone)', '415-999-9999')
234
+
235
+ select_option_by_name_and_option_value(browser, 'property(Lead Source)', 'Advertisement')
236
+ select_option_by_name_and_option_value(browser, 'property(Industry)', 'ASP')
237
+ select_option_by_name_and_option_value(browser, 'property(Lead Status)', 'Contacted')
238
+ select_option_by_name_and_option_value(browser, 'property(Rating)', 'Active')
239
+
240
+
241
+ browser.image(:title, 'Calculator').click
242
+ sleep(4)
243
+ attach_popup_by_url(browser, "https://crmold.zoho.com/crm/Calc.do?currFld=property(Annual%20Revenue)")
244
+ sleep(3)
245
+ close_modal_ie(browser, 'Calculator')
246
+ set_checkbox_by_name(browser, 'property(Email Opt Out)')
247
+ sleep(2)
248
+ clear_checkbox_by_name(browser, 'property(Email Opt Out)')
249
+
250
+
251
+ set_textfield_by_name(browser, 'property(Street)', '1600 Holloway Avenue') ## Address
252
+ set_textfield_by_name(browser, 'property(State)', 'California')
253
+ set_textfield_by_name(browser, 'property(City)', 'San Francisco')
254
+ set_textfield_by_name(browser, 'property(Zip Code)', '94541')
255
+ set_textfield_by_name(browser, 'property(Country)', 'USA')
256
+
257
+ set_textfield_by_name(browser, 'property(Description)', 'This is a description')
258
+ click_button_by_value(browser, 'Save')
259
+ sleep(2)
260
+ end
261
+
262
+ def find_leads(browser)
263
+ mark_testlevel("#{__method__.to_s.titleize}", 5)
264
+ click_text(browser, 'Leads')
265
+ sleep(1)
266
+ set_textfield_by_name(browser, 'newsearchString', 'Test Zoho Company')
267
+ click_button_by_name(browser, 'Go')
268
+ sleep(2)
269
+ validate_text(browser, 'Test Zoho Company')
270
+ end
271
+
272
+ def leads_delete_message(browser)
273
+ mark_testlevel("#{__method__.to_s.titleize}", 4)
274
+ click_text(browser, 'Leads')
275
+ sleep(1)
276
+ set_checkbox_by_name(browser, 'allcheck')
277
+ sleep(1)
278
+ clear_checkbox_by_name(browser, 'allcheck')
279
+ sleep(1)
280
+ click_button_by_value(browser, 'Delete')
281
+ sleep(1)
282
+ close_popup(browser, 'Message from webpage')
283
+ end
284
+
285
+ def find_lead_reports(browser) ## Find Lead Reports by Source
286
+ mark_testlevel("#{__method__.to_s.titleize}", 6)
287
+ click_text(browser, 'Reports')
288
+ sleep(2)
289
+ click_text(browser, 'Lead Reports')
290
+ sleep(2)
291
+ click_text(browser, 'Leads By Source')
292
+ sleep(2)
293
+ validate_text(browser, 'Leads By Source')
294
+
295
+ select_option_by_name_and_option_value(browser, 'stdDateFilter', 'today')
296
+ click_button_by_value(browser, 'Apply Filter')
297
+ sleep(2)
298
+ validate_text(browser, 'tester')
299
+ end
300
+
301
+ def create_chart(browser)
302
+ mark_testlevel("#{__method__.to_s.titleize}", 7)
303
+ click_button_by_value(browser, 'Delete Chart')
304
+ sleep(2)
305
+ click_button_by_value(browser, 'Create Chart')
306
+ sleep(2)
307
+ validate_text(browser, 'Create Chart: Leads By Source')
308
+
309
+ browser.frame(:name, 'chartLayer').cell(:text, 'Vertical Bar').click
310
+
311
+ #click_id(browser, 'chart1') ## Vertical Bar chart
312
+ sleep(2)
313
+ click_button_by_value(browser, 'Save')
314
+ sleep(3)
315
+ end
316
+
317
+ def create_campaign(browser)
318
+ mark_testlevel("#{__method__.to_s.titleize}", 7)
319
+ click_text(browser, 'Home')
320
+ sleep(1)
321
+ click_text(browser, 'Create Campaign')
322
+ set_textfield_by_name(browser, 'property(Campaign Name)', 'Zoho Campaign')
323
+ select_option_by_name_and_option_value(browser, 'property(Type)', 'Conference')
324
+ select_option_by_name_and_option_value(browser, 'property(Status)', 'Planning')
325
+ sleep(1)
326
+ set_textfield_by_name(browser, 'property(Start Date)', '03/11/2012')
327
+ set_textfield_by_name(browser, 'property(End Date)', '05/20/2012')
328
+ #browser.button(:onclick, 'showCalc('property(Actual Cost)')'
329
+
330
+ end
331
+
332
+ def create_task(browser)
333
+ mark_testlevel("#{__method__.to_s.titleize}", 8)
334
+ click_text(browser, 'Home')
335
+ sleep(1)
336
+ click_text(browser, 'New Task')
337
+ sleep(2)
338
+ validate_text(browser, 'Create Task')
339
+
340
+ browser.image(:title, 'Subject Name Lookup').click
341
+ sleep(2)
342
+ popup = attach_browser_by_url(browser, /Subject/)
343
+
344
+ sleep(2)
345
+ popup.link(:text, 'Product Demo').click
346
+ validate_textfield_value_by_name(browser, /Subject/, 'Product Demo')
347
+
348
+ set_textfield_by_name(browser, 'property(Due Date)', '03/11/2012')
349
+ select_option_by_name_and_option_value(browser, 'property(leContModSel)', 'Leads')
350
+ sleep(1)
351
+ select_option_by_name_and_option_value(browser, 'property(leContModSel)', 'Contacts')
352
+
353
+ browser.image(:id, 'modNameImg').click
354
+ sleep(2)
355
+ #attach_popup(browser, :title, /Zoho CRM - Account Name Lookup/)
356
+ popup = attach_browser_by_url(browser, "https://crmold.zoho.com/crm/Search.do?searchmodule=Accounts&fldName=modname&fldId=modid&fldLabel=Accounts&fldValue=&user=undefined&condition=undefined")
357
+ sleep(1)
358
+ set_textfield_by_name(popup, 'fldValue', 'Test Account #1')
359
+ click_button_by_value(popup, 'Go')
360
+ popup.link(:text, 'Test Account #1').click
361
+ close_modal_ie(browser, 'Account Name Lookup')
362
+ sleep(2)
363
+
364
+ select_option_by_name_and_option_value(browser, 'property(Status)', 'In Progress')
365
+ select_option_by_name_and_option_value(browser, 'property(Priority)', 'Normal')
366
+ set_textfield_by_name(browser, 'property(Description)', 'This is the task information')
367
+ click_button_by_value(browser, 'Save')
368
+ sleep(3)
369
+ end
370
+
371
+ ########################################################################
372
+ # EVERYTHING BELOW: TEMPORARY OVERRIDES/ADDITIONS NOT YET IN SHAMISEN pmn 12jul1012
373
+ ########################################################################
374
+
375
+ def get_variables(file, login = :role, dbg = true)
376
+ debug_to_log("#{__method__}: file = #{file}")
377
+ debug_to_log("#{__method__}: role = #{login}")
378
+
379
+ @var = Hash.new
380
+ workbook = Excel.new(file)
381
+ data_index = find_sheet_with_name(workbook, 'Data')
382
+ workbook.default_sheet = workbook.sheets[data_index]
383
+ var_col = 0
384
+
385
+ 2.upto(workbook.last_column) do |col|
386
+ scriptName = workbook.cell(1, col)
387
+ if scriptName == @myName
388
+ var_col = col
389
+ break
390
+ end
391
+ end
392
+
393
+ 2.upto(workbook.last_row) do |line|
394
+ name = workbook.cell(line, 'A')
395
+ value = workbook.cell(line, var_col).to_s.strip
396
+ @var[name] = value
397
+ end
398
+
399
+ @var.keys.sort.each do |name|
400
+ message_tolog("@var #{name}: '#{@var[name]}'")
401
+ end if dbg
402
+
403
+ @login = Hash.new
404
+ login_col = 0
405
+ role_col = 0
406
+ userid_col = 0
407
+ password_col = 0
408
+ url_col = 0
409
+ name_col = 0
410
+ role_index = find_sheet_with_name(workbook, 'Login')
411
+ if role_index >= 0
412
+ workbook.default_sheet = workbook.sheets[role_index]
413
+
414
+ 1.upto(workbook.last_column) do |col|
415
+ a_cell = workbook.cell(1, col)
416
+ case a_cell
417
+ when @myName
418
+ login_col = col
419
+ break
420
+ when 'role'
421
+ role_col = col
422
+ when 'userid'
423
+ userid_col = col
424
+ when 'password'
425
+ password_col = col
426
+ when 'url'
427
+ url_col = col
428
+ when 'name'
429
+ name_col = col
430
+ end
431
+ end
432
+
433
+ 2.upto(workbook.last_row) do |line|
434
+ role = workbook.cell(line, role_col)
435
+ userid = workbook.cell(line, userid_col)
436
+ password = workbook.cell(line, password_col)
437
+ url = workbook.cell(line, url_col)
438
+ username = workbook.cell(line, name_col)
439
+ enabled = workbook.cell(line, login_col).to_s
440
+
441
+ case login
442
+ when :id
443
+ key = userid
444
+ when :role
445
+ key = role
446
+ else
447
+ key = role
448
+ end
449
+
450
+ @login[key] = Hash.new
451
+ @login[key]['role'] = role
452
+ @login[key]['userid'] = userid
453
+ @login[key]['password'] = password
454
+ @login[key]['url'] = url
455
+ @login[key]['name'] = username
456
+ @login[key]['enabled'] = enabled
457
+
458
+ end
459
+
460
+ @login.keys.sort.each do |key|
461
+ message_tolog("@login (by #{login}): #{key}=>'#{@login[key].to_yaml}'")
462
+ end if dbg
463
+ end
464
+
465
+ rescue
466
+ fatal_to_log("#{__method__}: '#{$!}'")
467
+ end
468
+
469
+ def find_sheet_with_name(workbook, sheet_name)
470
+ sheets = workbook.sheets
471
+ idx = 0
472
+ found = false
473
+ sheets.each do |s|
474
+ if s == sheet_name
475
+ found = true
476
+ break
477
+ end
478
+ idx += 1
479
+ end
480
+ if found
481
+ idx
482
+ else
483
+ -1
484
+ end
485
+ end
486
+
487
+ end