sakai-cle-test-api 0.0.2

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.
@@ -0,0 +1,752 @@
1
+ #================
2
+ # Page Navigation Objects
3
+ #================
4
+
5
+ # ToolsMenu contains all possible links that could
6
+ # be found in the menu along the left side of the Sakai pages.
7
+ #
8
+ # This includes both the Administration Workspace and the
9
+ # Menus that appear when in the context of a particular Site.
10
+ module ToolsMenu
11
+
12
+ include PageObject
13
+
14
+ # Opens the "My Sites" menu box and then clicks on the link
15
+ # that matches the specified id.
16
+ #
17
+ # Errors out if nothing matches.
18
+ def open_my_site_by_id(id)
19
+ @browser.link(:text, "My Sites").click
20
+ @browser.link(:href, /#{id}/).click
21
+ $frame_index=1
22
+ Home.new(@browser)
23
+ end
24
+
25
+ # Opens "My Sites" and then clicks on the matching
26
+ # Site name. Shortens the name used for search so
27
+ # that truncated names are not a problem.
28
+ #
29
+ # Will error out if there are not matching links.
30
+ def open_my_site_by_name(name)
31
+ short_name = name[0..19]
32
+ @browser.link(:text, "My Sites").click
33
+ @browser.link(:text, /#{Regexp.escape(short_name)}/).click
34
+ $frame_index=1
35
+ Home.new(@browser)
36
+ end
37
+
38
+ # Clicks the "Account" link in the Adminstration Workspace
39
+ # then instantiates the UserAccount class.
40
+ #
41
+ # Throws an error if the link is not present.
42
+ def account
43
+ @browser.link(:text=>"Account").click
44
+ UserAccount.new(@browser)
45
+ end
46
+
47
+ # Clicks the "Aliases" link in the Administration Workspace
48
+ # menu, then instantiates the Aliases class.
49
+ def aliases
50
+ @browser.link(:text=>"Aliases").click
51
+ Aliases.new(@browser)
52
+ end
53
+
54
+ # Clicks the link for the Administration Workspace, then
55
+ # instantiates the MyWorkspace class.
56
+ def administration_workspace
57
+ @browser.link(:text, "Administration Workspace").click
58
+ $frame_index=1
59
+ MyWorkspace.new(@browser)
60
+ end
61
+
62
+ # Clicks the Announcements link then instantiates
63
+ # the Announcements class.
64
+ def announcements
65
+ @browser.link(:class=>'icon-sakai-announcements').click
66
+ Announcements.new(@browser)
67
+ end
68
+
69
+ # Clicks the Assignments link, then instantiates
70
+ # the Assignments class.
71
+ def assignments
72
+ @browser.link(:class=>"icon-sakai-assignment-grades").click
73
+ AssignmentsList.new(@browser)
74
+ end
75
+
76
+ def basic_lti
77
+ @browser.link(:class=>"icon-sakai-basiclti").click
78
+ BasicLTI.new(@browser)
79
+ end
80
+
81
+ def blogs
82
+ @browser.link(:class=>"icon-sakai-blogwow").click
83
+ Blogs.new(@browser)
84
+ end
85
+
86
+ # Clicks the Blogger link in the Site menu and
87
+ # instantiates the Blogger Class.
88
+ def blogger
89
+ @browser.link(:class=>"icon-blogger").click
90
+ Blogger.new(@browser)
91
+ end
92
+
93
+ # Clicks the Calendar link, then instantiates
94
+ # the Calendar class.
95
+ def calendar
96
+ @browser.link(:text=>"Calendar").click
97
+ Calendar.new(@browser)
98
+ end
99
+
100
+ link(:certification, :text=>"Certification")
101
+
102
+ def chat_room
103
+ @browser.link(:class=>"icon-sakai-chat").click
104
+ ChatRoom.new(@browser)
105
+ end
106
+
107
+ link(:configuration_viewer, :text=>"Configuration Viewer")
108
+ link(:customizer, :text=>"Customizer")
109
+
110
+ # Clicks the "Discussion Forums" link in the menu,
111
+ # then instantiates the JForum page class.
112
+ def discussion_forums
113
+ @browser.link(:class=>"icon-sakai-jforum-tool").click
114
+ JForums.new(@browser)
115
+ end
116
+
117
+ def drop_box
118
+ @browser.link(:class=>"icon-sakai-dropbox").click
119
+ DropBox.new(@browser)
120
+ end
121
+
122
+ link(:email, :text=>"Email")
123
+
124
+ def email_archive
125
+ @browser.link(:class=>"icon-sakai-mailbox").click
126
+ EmailArchive.new(@browser)
127
+ end
128
+
129
+ link(:email_template_administration, :text=>"Email Template Administration")
130
+
131
+ def evaluation_system
132
+ @browser.link(:class=>"icon-sakai-rsf-evaluation").click
133
+ EvaluationSystem.new(@browser)
134
+ end
135
+
136
+ def feedback
137
+ @browser.link(:class=>"icon-sakai-postem").click
138
+ Feedback.new(@browser)
139
+ end
140
+
141
+ # Clicks the Forms link that is found in menus for
142
+ # Portfolio sites.
143
+ def forms
144
+ @browser.link(:text=>"Forms", :class=>"icon-sakai-metaobj").click
145
+ Forms.new(@browser)
146
+ end
147
+
148
+ # Clicks the Forums link, then instantiates
149
+ # the forums class.
150
+ def forums
151
+ @browser.link(:text=>"Forums").click
152
+ Forums.new(@browser)
153
+ end
154
+
155
+ # Clicks the Glossary link, then instantiates the Glossary Class.
156
+ def glossary
157
+ @browser.link(:text=>"Glossary").click
158
+ Glossary.new(@browser)
159
+ end
160
+
161
+ # Clicks the "Gradebook" link, then
162
+ # instantiates the Gradebook Class.
163
+ def gradebook
164
+ @browser.link(:text=>"Gradebook").click
165
+ Gradebook.new(@browser)
166
+ end
167
+
168
+ def gradebook2
169
+ @browser.link(:text=>"Gradebook2").click
170
+ frm.div(:id=>"borderLayoutContainer").wait_until_present
171
+ Gradebook2.new(@browser)
172
+ end
173
+
174
+ link(:help, :text=>"Help")
175
+
176
+ # Clicks the Home link, then instantiates the
177
+ # Home class--unless the target page happens to be
178
+ # My Workspace, in which case the MyWorkspace
179
+ # page is instantiated.
180
+ def home
181
+ @browser.link(:text, "Home").click
182
+ if @browser.div(:id=>"siteTitle").text == "My Workspace"
183
+ MyWorkspace.new(@browser)
184
+ else
185
+ Home.new(@browser)
186
+ end
187
+ end
188
+
189
+ # Clicks the Job Scheduler link, then
190
+ # instantiates the Job Scheduler class.
191
+ def job_scheduler
192
+ @browser.link(:text=>"Job Scheduler").click
193
+ JobScheduler.new(@browser)
194
+ end
195
+
196
+ # Clicks the Lessons link, then instantiates
197
+ # the Lessons class.
198
+ def lessons
199
+ @browser.link(:text=>"Lessons").click
200
+ Lessons.new(@browser)
201
+ end
202
+
203
+ link(:lesson_builder, :text=>"Lesson Builder")
204
+ link(:link_tool, :text=>"Link Tool")
205
+ link(:live_virtual_classroom, :text=>"Live Virtual Classroom")
206
+
207
+ # Clicks the "Matrices" link, then
208
+ # instantiates the Matrices Class.
209
+ def matrices
210
+ @browser.link(:text=>"Matrices").click
211
+ Matrices.new(@browser)
212
+ end
213
+
214
+ def media_gallery
215
+ @browser.link(:class=>"icon-sakai-kaltura").click
216
+ MediaGallery.new(@browser)
217
+ end
218
+
219
+ link(:membership, :text=>"Membership")
220
+ link(:memory, :text=>"Memory")
221
+
222
+ # Clicks the Messages link, then instantiates the Messages class.
223
+ def messages
224
+ @browser.link(:text=>"Messages").click
225
+ Messages.new(@browser)
226
+ end
227
+
228
+ link(:my_sites, :text=>"My Sites")
229
+
230
+ # Clicks the "My Workspace" link, sets the
231
+ # $frame_index global variable to 0, then instantiates
232
+ # the MyWorkspace Class.
233
+ def my_workspace
234
+ @browser.link(:text=>"My Workspace").click
235
+ $frame_index=0
236
+ MyWorkspace.new(@browser)
237
+ end
238
+
239
+ def news
240
+ @browser.link(:class=>"icon-sakai-news").click
241
+ News.new(@browser)
242
+ end
243
+
244
+ link(:online, :text=>"On-Line")
245
+ link(:oauth_providers, :text=>"Oauth Providers")
246
+ link(:oauth_tokens, :text=>"Oauth Tokens")
247
+ link(:openSyllabus, :text=>"OpenSyllabus")
248
+
249
+ def podcasts
250
+ @browser.link(:class=>"icon-sakai-podcasts").click
251
+ Podcasts.new(@browser)
252
+ end
253
+
254
+ def polls
255
+ @browser.link(:class=>"icon-sakai-poll").click
256
+ Polls.new(@browser)
257
+ end
258
+
259
+ def portfolios
260
+ @browser.link(:class=>"icon-osp-presentation").click
261
+ Portfolios.new @browser
262
+ end
263
+
264
+ # Clicks the Portfolio Templates link, then
265
+ # instantiates the Portfolio
266
+ def portfolio_templates
267
+ @browser.link(:text=>"Portfolio Templates").click
268
+ PortfolioTemplates.new(@browser)
269
+ end
270
+
271
+ link(:preferences, :text=>"Preferences")
272
+
273
+ def profile
274
+ @browser.link(:text=>"Profile").click
275
+ Profile.new @browser
276
+ end
277
+
278
+ def profile2
279
+ @browser.link(:class=>"icon-sakai-profile2").click
280
+ Profile2.new @browser
281
+ end
282
+
283
+ link(:realms, :text=>"Realms")
284
+
285
+ # Clicks the Resources link, then instantiates
286
+ # the Resources class.
287
+ def resources
288
+ @browser.link(:text, "Resources").click
289
+ Resources.new(@browser)
290
+ end
291
+
292
+ def roster
293
+ @browser.link(:class=>"icon-sakai-site-roster").click
294
+ Roster.new @browser
295
+ end
296
+
297
+ link(:rsmart_support, :text=>"rSmart Support")
298
+
299
+ # Because "Search" is used in many pages,
300
+ # The Search button found in the Site Management
301
+ # Menu must be given the more explicit name
302
+ #
303
+ def site_management_search
304
+ @browser.link(:class=>"icon-sakai-search").click
305
+ end
306
+
307
+ def sections
308
+ @browser.link(:class=>"icon-sakai-sections").click
309
+ Sections.new(@browser)
310
+ end
311
+
312
+ link(:site_archive, :text=>"Site Archive")
313
+
314
+ # Clicks the Site Editor link, then instantiates
315
+ # the Site Editor class.
316
+ def site_editor
317
+ @browser.link(:text=>"Site Editor").click
318
+ SiteEditor.new(@browser)
319
+ end
320
+
321
+ # Clicks the Site Setup link, then instantiates
322
+ # The SiteEditor class.
323
+ def site_setup
324
+ @browser.link(:text=>"Site Setup").click
325
+ SiteSetup.new(@browser)
326
+ end
327
+
328
+ link(:site_statistics, :text=>"Site Statistics")
329
+
330
+ # Clicks the Sites link, then instantiates
331
+ # the Sites class.
332
+ def sites
333
+ @browser.link(:class=>"icon-sakai-sites").click
334
+ frm.text_field(:id=>"search_site").wait_until_present
335
+ Sites.new(@browser)
336
+ end
337
+
338
+ link(:skin_manager, :text=>"Skin Manager")
339
+ link(:super_user, :text=>"Super User")
340
+
341
+ def styles
342
+ @browser.link(:text=>"Styles").click
343
+ Styles.new(@browser)
344
+ end
345
+
346
+ # Clicks the Syllabus link, then instantiates
347
+ # the Syllabus class.
348
+ def syllabus
349
+ @browser.link(:text=>"Syllabus").click
350
+ Syllabus.new(@browser)
351
+ end
352
+
353
+ # Clicks the Tests & Quizzes link, then
354
+ # instantiates the AssessmentsList class.
355
+ def tests_and_quizzes
356
+ # Need this logic to determine whether user
357
+ # is a student or instructor/admin
358
+ @browser.link(:class, "icon-sakai-siteinfo").exist? ? x=0 : x=1
359
+ @browser.link(:text=>"Tests & Quizzes").click
360
+ x==0 ? AssessmentsList.new(@browser) : TakeAssessmentList.new(@browser)
361
+ end
362
+
363
+ # Synonym for tests_and_quizzes method.
364
+ def assessments
365
+ tests_and_quizzes
366
+ end
367
+
368
+ def user_membership
369
+ @browser.link(:class=>"icon-sakai-usermembership").click
370
+ UserMembership.new(@browser)
371
+ end
372
+
373
+ def users
374
+ @browser.link(:class=>"icon-sakai-users").click
375
+ Users.new(@browser)
376
+ end
377
+
378
+ def web_content
379
+ @browser.link(:class=>"icon-sakai-iframe").click
380
+ WebContent.new(@browser)
381
+ end
382
+
383
+ def wiki
384
+ @browser.link(:class=>"icon-sakai-rwiki").click
385
+ Wikis.new(@browser)
386
+ end
387
+
388
+ # The Page Reset button, found on all Site pages
389
+ def reset
390
+ @browser.link(:href=>/tool-reset/).click
391
+ page_title = @browser.div(:class=>"title").text
392
+ case(page_title)
393
+ when "Lessons"
394
+ Lessons.new(@browser)
395
+ when "Syllabus"
396
+ Syllabus.new(@browser)
397
+ when "Portfolios"
398
+ Portfolios.new @browser
399
+ # Add more cases here, as necessary...
400
+ end
401
+ end
402
+
403
+ # Clicks the "(Logout)" link in the upper right of the page.
404
+ # Instantiates the Login class.
405
+ def logout
406
+ @browser.link(:text, "Logout").click
407
+ Login.new(@browser)
408
+ end
409
+ alias log_out logout
410
+ alias sign_out logout
411
+
412
+ # Shortcut method so you don't have to type out
413
+ # the whole string: @browser.frame(:index=>index)
414
+ def frm
415
+ @browser.frame(:class=>"portletMainIframe")
416
+ end
417
+
418
+ end
419
+
420
+ # This is a module containing methods that are
421
+ # common to all the question pages inside the
422
+ # Assessment section of a Site.
423
+ module QuestionHelpers
424
+
425
+ include PageObject
426
+
427
+ # Saves the question by clicking the Save button, then makes the determination
428
+ # whether to instantiate the EditAssessment class, or the EditQuestionPool class.
429
+ def save
430
+
431
+ quiz = frm.div(:class=>"portletBody").div(:index=>0).text
432
+ pool = frm.div(:class=>"portletBody").div(:index=>1).text
433
+
434
+ frm.button(:value=>"Save").click
435
+
436
+ if quiz =~ /^Assessments/
437
+ EditAssessment.new(@browser)
438
+ elsif pool =~ /^Question Pools/
439
+ EditQuestionPool.new(@browser)
440
+ else
441
+ puts "Unexpected text: "
442
+ p pool
443
+ p quiz
444
+ end
445
+
446
+ end
447
+
448
+ in_frame(:index=>1) do |frame|
449
+ link(:assessments, :text=>"Assessments", :frame=>frame)
450
+ link(:assessment_types, :text=>"Assessment Types", :frame=>frame)
451
+ link(:question_pools, :text=>"Question Pools", :frame=>frame)
452
+ link(:questions, :text=>/Questions:/, :frame=>frame)
453
+ end
454
+
455
+ end
456
+
457
+ # This class consolidates the code that can be shared among all the
458
+ # File Upload and Attachment pages.
459
+ #
460
+ # Not every method in this class will be appropriate for every attachment page.
461
+ class AttachPageTools
462
+
463
+ @@classes = { :this=>"Superclassdummy", :parent=>"Superclassdummy" }
464
+
465
+ # Use this for debugging purposes only...
466
+ def what_is_parent?
467
+ puts @@classes[:parent]
468
+ end
469
+
470
+ # Returns an array of the displayed folder names.
471
+ def folder_names
472
+ names = []
473
+ frm.table(:class=>/listHier lines/).rows.each do |row|
474
+ next if row.td(:class=>"specialLink").exist? == false
475
+ next if row.td(:class=>"specialLink").link(:title=>"Folder").exist? == false
476
+ names << row.td(:class=>"specialLink").link(:title=>"Folder").text
477
+ end
478
+ return names
479
+ end
480
+
481
+ # Returns an array of the file names currently listed
482
+ # on the page.
483
+ #
484
+ # It excludes folder names.
485
+ def file_names
486
+ names = []
487
+ frm.table(:class=>/listHier lines/).rows.each do |row|
488
+ next if row.td(:class=>"specialLink").exist? == false
489
+ next if row.td(:class=>"specialLink").link(:title=>"Folder").exist?
490
+ names << row.td(:class=>"specialLink").link(:href=>/access.content/, :index=>1).text
491
+ end
492
+ return names
493
+ end
494
+
495
+ # Clicks the Select button next to the specified file.
496
+ def select_file(filename)
497
+ frm.table(:class=>/listHier lines/).row(:text, /#{Regexp.escape(filename)}/).link(:text=>"Select").click
498
+ end
499
+
500
+ # Clicks the Remove button.
501
+ def remove
502
+ frm.button(:value=>"Remove").click
503
+ end
504
+
505
+ # Clicks the remove link for the specified item in the attachment list.
506
+ def remove_item(file_name)
507
+ frm.table(:class=>/listHier/).row(:text=>/#{Regexp.escape(file_name)}/).link(:href=>/doRemoveitem/).click
508
+ end
509
+
510
+ # Clicks the Move button.
511
+ def move
512
+ frm.button(:value=>"Move").click
513
+ end
514
+
515
+ # Clicks the Show Other Sites link.
516
+ def show_other_sites
517
+ frm.link(:text=>"Show other sites").click
518
+ end
519
+
520
+ # Clicks on the specified folder image, which
521
+ # will open the folder tree and remain on the page.
522
+ def open_folder(foldername)
523
+ frm.table(:class=>/listHier lines/).row(:text=>/#{Regexp.escape(foldername)}/).link(:title=>"Open this folder").click
524
+ end
525
+
526
+ # Clicks on the specified folder name, which should open
527
+ # the folder contents on a refreshed page.
528
+ def go_to_folder(foldername)
529
+ frm.link(:text=>foldername).click
530
+ end
531
+
532
+ # Sets the URL field to the specified value.
533
+ def url=(url_string)
534
+ frm.text_field(:id=>"url").set(url_string)
535
+ end
536
+
537
+ # Clicks the Add button next to the URL field.
538
+ def add
539
+ frm.button(:value=>"Add").click
540
+ end
541
+
542
+ # Gets the value of the access level cell for the specified
543
+ # file.
544
+ def access_level(filename)
545
+ frm.table(:class=>/listHier lines/).row(:text=>/#{Regexp.escape(filename)}/)[6].text
546
+ end
547
+
548
+ def edit_details(name)
549
+ frm.table(:class=>/listHier lines/).row(:text=>/#{Regexp.escape(name)}/).li(:text=>/Action/, :class=>"menuOpen").fire_event("onclick")
550
+ frm.table(:class=>/listHier lines/).row(:text=>/#{Regexp.escape(name)}/).link(:text=>"Edit Details").click
551
+ instantiate_class(:file_details)
552
+ end
553
+
554
+ # Clicks the Create Folders menu item in the
555
+ # Add menu of the specified folder.
556
+ def create_subfolders_in(folder_name)
557
+ frm.table(:class=>/listHier lines/).row(:text=>/#{Regexp.escape(folder_name)}/).link(:text=>"Start Add Menu").fire_event("onfocus")
558
+ frm.table(:class=>/listHier lines/).row(:text=>/#{Regexp.escape(folder_name)}/).link(:text=>"Create Folders").click
559
+ instantiate_class(:create_folders)
560
+ end
561
+
562
+ # Enters the specified file into the file field name (assuming it's in the
563
+ # data/sakai-cle-test-api folder or a subfolder therein)
564
+ #
565
+ # Does NOT instantiate any class, so use only when no page refresh occurs.
566
+ def upload_file(filename)
567
+ frm.file_field(:id=>"upload").set(File.expand_path(File.dirname(__FILE__)) + "/../../data/sakai-cle-test-api/" + filename)
568
+ if frm.div(:class=>"alertMessage").exist?
569
+ sleep 2
570
+ upload_file(filename)
571
+ end
572
+ end
573
+
574
+ # Enters the specified file into the file field name (assuming it's in the
575
+ # data/sakai-cle-test-api folder or a subfolder therein)
576
+ #
577
+ # Use this method ONLY for instances where there's a file field on the page
578
+ # with an "upload" id.
579
+ def upload_local_file(filename)
580
+ frm.file_field(:id=>"upload").set(File.expand_path(File.dirname(__FILE__)) + "/../../data/sakai-cle-test-api/" + filename)
581
+ if frm.div(:class=>"alertMessage").exist?
582
+ sleep 2
583
+ upload_local_file(filename)
584
+ end
585
+ instantiate_class(:this)
586
+ end
587
+
588
+ # Clicks the Add Menu for the specified
589
+ # folder, then selects the Upload Files
590
+ # command in the menu that appears.
591
+ def upload_file_to_folder(folder_name)
592
+ upload_files_to_folder(folder_name)
593
+ end
594
+
595
+ # Clicks the Add Menu for the specified
596
+ # folder, then selects the Upload Files
597
+ # command in the menu that appears.
598
+ def upload_files_to_folder(folder_name)
599
+ if frm.li(:text=>/A/, :class=>"menuOpen").exist?
600
+ frm.table(:class=>/listHier lines/).row(:text=>/#{Regexp.escape(folder_name)}/).li(:text=>/A/, :class=>"menuOpen").fire_event("onclick")
601
+ else
602
+ frm.table(:class=>/listHier lines/).row(:text=>/#{Regexp.escape(folder_name)}/).link(:text=>"Start Add Menu").fire_event("onfocus")
603
+ end
604
+ frm.table(:class=>/listHier lines/).row(:text=>/#{Regexp.escape(folder_name)}/).link(:text=>"Upload Files").click
605
+ instantiate_class(:upload_files)
606
+ end
607
+
608
+ # Clicks the "Attach a copy" link for the specified
609
+ # file, then reinstantiates the Class.
610
+ # If an alert box appears, the method will call itself again.
611
+ # Note that this can lead to an infinite loop. Will need to fix later.
612
+ def attach_a_copy(file_name)
613
+ frm.table(:class=>/listHier lines/).row(:text=>/#{Regexp.escape(file_name)}/).link(:href=>/doAttachitem/).click
614
+ if frm.div(:class=>"alertMessage").exist?
615
+ sleep 1
616
+ attach_a_copy(file_name) # TODO - This can loop infinitely
617
+ end
618
+ instantiate_class(:this)
619
+ end
620
+
621
+ # Clicks the Create Folders menu item in the
622
+ # Add menu of the specified folder.
623
+ def create_subfolders_in(folder_name)
624
+ frm.table(:class=>/listHier lines/).row(:text=>/#{Regexp.escape(folder_name)}/).link(:text=>"Start Add Menu").fire_event("onfocus")
625
+ frm.table(:class=>/listHier lines/).row(:text=>/#{Regexp.escape(folder_name)}/).link(:text=>"Create Folders").click
626
+ instantiate_class(:create_folders)
627
+ end
628
+
629
+ # Takes the specified array object containing pointers
630
+ # to local file resources, then uploads those files to
631
+ # the folder specified, checks if they all uploaded properly and
632
+ # if not, re-tries the ones that failed the first time.
633
+ #
634
+ # Finally, it re-instantiates the AnnouncementsAttach page class.
635
+ def upload_multiple_files_to_folder(folder, file_array)
636
+
637
+ upload = upload_files_to_folder folder
638
+
639
+ file_array.each do |file|
640
+ upload.file_to_upload=file
641
+ upload.add_another_file
642
+ end
643
+
644
+ resources = upload.upload_files_now
645
+
646
+ file_array.each do |file|
647
+ file =~ /(?<=\/).+/
648
+ # puts $~.to_s # For debugging purposes
649
+ unless resources.file_names.include?($~.to_s)
650
+ upload_files = resources.upload_files_to_folder(folder)
651
+ upload_files.file_to_upload=file
652
+ resources = upload_files.upload_files_now
653
+ end
654
+ end
655
+ instantiate_class(:this)
656
+ end
657
+
658
+ # Clicks the Continue button then
659
+ # decides which page class to instantiate
660
+ # based on the page that appears. This is going to need to be fixed.
661
+ def continue
662
+ frm.div(:class=>"highlightPanel").span(:id=>"submitnotifxxx").wait_while_present
663
+ frm.button(:value=>"Continue").click
664
+ page_title = @browser.div(:class=>"title").text
665
+ case(page_title)
666
+ when "Lessons"
667
+ instantiate_class(:parent)
668
+ when "Assignments"
669
+ if frm.div(:class=>"portletBody").h3.text=~/In progress/ || frm.div(:class=>"portletBody").h3.text == "Select supporting files"
670
+ instantiate_class(:second)
671
+ elsif frm.div(:class=>"portletBody").h3.text=~/edit/i || frm.div(:class=>"portletBody").h3.text=~/add/i
672
+ instantiate_class(:parent)
673
+ elsif frm.form(:id=>"gradeForm").exist?
674
+ instantiate_class(:third)
675
+ end
676
+ when "Forums"
677
+ if frm.div(:class=>"portletBody").h3.text == "Forum Settings"
678
+ instantiate_class(:second)
679
+ else
680
+ instantiate_class(:parent)
681
+ end
682
+ when "Messages"
683
+ if frm.div(:class=>/breadCrumb/).text =~ /Reply to Message/
684
+ instantiate_class(:second)
685
+ else
686
+ instantiate_class(:parent)
687
+ end
688
+ when "Calendar"
689
+ frm.frame(:id, "description___Frame").td(:id, "xEditingArea").frame(:index=>0).wait_until_present
690
+ instantiate_class(:parent)
691
+ when "Portfolio Templates"
692
+ if frm.div(:class=>"portletBody").h3.text=="Select supporting files"
693
+ instantiate_class(:second)
694
+ else
695
+ instantiate_class(:parent)
696
+ end
697
+ else
698
+ instantiate_class(:parent)
699
+ end
700
+ end
701
+
702
+ private
703
+
704
+ # This is a private method that is only used inside this superclass.
705
+ def instantiate_class(key)
706
+ eval(@@classes[key]).new(@browser)
707
+ end
708
+
709
+ # This is another private method--a better way to
710
+ # instantiate the @@classes hash variable.
711
+ def set_classes_hash(hash_object)
712
+ @@classes = hash_object
713
+ end
714
+
715
+ end
716
+
717
+ # Methods to extend the page-object gem...
718
+ module PageObject
719
+ module Elements
720
+ class Element
721
+
722
+ def disabled?
723
+ @element.disabled?
724
+ end
725
+
726
+ end
727
+ end
728
+ end
729
+
730
+ # Need this to extend Watir to be able to attach to Sakai's non-standard tags...
731
+ module Watir
732
+ class Element
733
+ # attaches to the "headers" tags inside of the assignments table.
734
+ def headers
735
+ @how = :ole_object
736
+ return @o.headers
737
+ end
738
+
739
+ # attaches to the "for" tags in "label" tags.
740
+ def for
741
+ @how = :ole_object
742
+ return @o.for
743
+ end
744
+
745
+ # attaches to the "summary" tag
746
+ def summary
747
+ @how = :ole_object
748
+ return @o.summary
749
+ end
750
+
751
+ end
752
+ end