awetestlib 0.1.28 → 0.1.29pre1

Sign up to get free protection for your applications and to get access to all the features.
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