sakai-cle-test-api 0.0.7 → 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. data/lib/sakai-cle-test-api.rb +7 -2
  2. data/lib/sakai-cle-test-api/add_files.rb +198 -0
  3. data/lib/sakai-cle-test-api/admin_page_elements.rb +7 -3
  4. data/lib/sakai-cle-test-api/announcements.rb +274 -7
  5. data/lib/sakai-cle-test-api/assessments.rb +930 -27
  6. data/lib/sakai-cle-test-api/assignments.rb +769 -13
  7. data/lib/sakai-cle-test-api/basic_lti.rb +5 -1
  8. data/lib/sakai-cle-test-api/blogs.rb +54 -2
  9. data/lib/sakai-cle-test-api/calendar.rb +423 -8
  10. data/lib/sakai-cle-test-api/chat_room.rb +0 -0
  11. data/lib/sakai-cle-test-api/common_page_elements.rb +69 -172
  12. data/lib/sakai-cle-test-api/core-ext.rb +90 -0
  13. data/lib/sakai-cle-test-api/data_objects/announcement.rb +38 -0
  14. data/lib/sakai-cle-test-api/data_objects/assessment.rb +32 -0
  15. data/lib/sakai-cle-test-api/data_objects/assignment.rb +62 -0
  16. data/lib/sakai-cle-test-api/data_objects/event.rb +86 -0
  17. data/lib/sakai-cle-test-api/data_objects/lesson.rb +137 -0
  18. data/lib/sakai-cle-test-api/data_objects/resource.rb +174 -0
  19. data/lib/sakai-cle-test-api/data_objects/site.rb +213 -0
  20. data/lib/sakai-cle-test-api/data_objects/syllabus.rb +7 -0
  21. data/lib/sakai-cle-test-api/data_objects/topic.rb +0 -0
  22. data/lib/sakai-cle-test-api/data_objects/web_content_tool.rb +52 -0
  23. data/lib/sakai-cle-test-api/data_objects/wiki.rb +7 -0
  24. data/lib/sakai-cle-test-api/drop_box.rb +21 -0
  25. data/lib/sakai-cle-test-api/email_archive.rb +15 -1
  26. data/lib/sakai-cle-test-api/forums.rb +282 -8
  27. data/lib/sakai-cle-test-api/gem_ext.rb +45 -0
  28. data/lib/sakai-cle-test-api/gradebook.rb +19 -1
  29. data/lib/sakai-cle-test-api/gradebook2.rb +15 -1
  30. data/lib/sakai-cle-test-api/lessons.rb +440 -0
  31. data/lib/sakai-cle-test-api/messages.rb +551 -15
  32. data/lib/sakai-cle-test-api/news.rb +3 -1
  33. data/lib/sakai-cle-test-api/polls.rb +65 -3
  34. data/lib/sakai-cle-test-api/profile.rb +36 -2
  35. data/lib/sakai-cle-test-api/profile2.rb +315 -6
  36. data/lib/sakai-cle-test-api/resources.rb +138 -0
  37. data/lib/sakai-cle-test-api/rich_text.rb +13 -0
  38. data/lib/sakai-cle-test-api/sections.rb +198 -8
  39. data/lib/sakai-cle-test-api/site_page_elements.rb +4 -441
  40. data/lib/sakai-cle-test-api/syllabus.rb +149 -7
  41. data/lib/sakai-cle-test-api/tools_menu.rb +3 -20
  42. data/lib/sakai-cle-test-api/utilities.rb +260 -0
  43. data/sakai-cle-test-api.gemspec +2 -3
  44. metadata +21 -19
@@ -1,9 +1,15 @@
1
1
  require 'cgi'
2
- require 'kuali-sakai-common-lib'
2
+ require 'watir-webdriver'
3
+ require 'page-object'
4
+ require 'sakai-cle-test-api/gem_ext'
5
+ require 'sakai-cle-test-api/core-ext'
6
+ require 'sakai-cle-test-api/utilities'
7
+ require 'sakai-cle-test-api/rich_text'
3
8
  require 'sakai-cle-test-api/utilities'
4
9
  require 'sakai-cle-test-api/tools_menu'
5
10
  require 'sakai-cle-test-api/admin_page_elements'
6
11
  Dir["#{File.dirname(__FILE__)}/sakai-cle-test-api/*.rb"].each {|f| require f }
12
+ Dir["#{File.dirname(__FILE__)}/sakai-cle-test-api/data_objects/*.rb"].each {|f| require f }
7
13
 
8
14
  # Initialize this class at the start of your test cases to
9
15
  # open the specified test browser at the specified Sakai welcome page URL.
@@ -21,7 +27,6 @@ class SakaiCLE
21
27
  @browser = Watir::Browser.new web_browser
22
28
  @browser.window.resize_to(1400,900)
23
29
  @browser.goto url
24
- $frame_index = 0 # TODO - Need to remove this and all dependent code.
25
30
  end
26
31
 
27
32
  # Returns the class containing the welcome page's page elements.
@@ -0,0 +1,198 @@
1
+ # This class consolidates the code that can be shared among all the
2
+ # File Upload and Attachment pages.
3
+ #
4
+ # Not every method in this class will be appropriate for every attachment page.
5
+ class AddFiles
6
+
7
+ include PageObject
8
+
9
+ thing(:files_table) { |b| b.frm.table(:class=>/listHier lines/) }
10
+
11
+ # Returns an array of the displayed folder names.
12
+ def folder_names
13
+ names = []
14
+ files_table.rows.each do |row|
15
+ next if row.td(:class=>"specialLink").exist? == false
16
+ next if row.td(:class=>"specialLink").link(:title=>"Folder").exist? == false
17
+ names << row.td(:class=>"specialLink").link(:title=>"Folder").text
18
+ end
19
+ names
20
+ end
21
+
22
+ # Returns an array of the file names currently listed
23
+ # on the page.
24
+ #
25
+ # It excludes folder names.
26
+ def file_names
27
+ names = []
28
+ files_table.rows.each do |row|
29
+ next if row.td(:class=>"specialLink").exist? == false
30
+ next if row.td(:class=>"specialLink").link(:title=>"Folder").exist?
31
+ names << row.td(:class=>"specialLink").link(:href=>/access.content/, :index=>1).text
32
+ end
33
+ names
34
+ end
35
+
36
+ # Clicks the Select button next to the specified file.
37
+ def select_file(filename)
38
+ files_table.row(:text, /#{Regexp.escape(filename)}/).link(:text=>"Select").click
39
+ end
40
+
41
+ # Clicks the Remove button.
42
+ action(:remove) { |b| b.frm.button(:value=>"Remove").click }
43
+
44
+ # Clicks the remove link for the specified item in the attachment list.
45
+ def remove_item(file_name)
46
+ files_table.row(:text=>/#{Regexp.escape(file_name)}/).link(:href=>/doRemoveitem/).click
47
+ end
48
+
49
+ # Clicks the Move button.
50
+ action(:move) { |b| b.frm.button(:value=>"Move").click }
51
+
52
+ # Clicks the Show Other Sites link.
53
+ action(:show_other_sites) { |b| b.frm.link(:text=>"Show other sites").click }
54
+
55
+ def href(item)
56
+ frm.link(:text=>item).href
57
+ end
58
+
59
+ # Clicks on the specified folder image, which
60
+ # will open the folder tree and remain on the page.
61
+ def open_folder(foldername)
62
+ files_table.row(:text=>/#{Regexp.escape(foldername)}/).link(:title=>"Open this folder").click
63
+ end
64
+
65
+ # Clicks on the specified folder name, which should open
66
+ # the folder contents on a refreshed page.
67
+ def go_to_folder(foldername)
68
+ frm.link(:text=>foldername).click
69
+ end
70
+
71
+ # Sets the URL field to the specified value.
72
+ def url=(url_string)
73
+ frm.text_field(:id=>"url").set(url_string)
74
+ end
75
+
76
+ # Clicks the Add button next to the URL field.
77
+ def add
78
+ frm.button(:value=>"Add").click
79
+ end
80
+
81
+ # Gets the value of the access level cell for the specified
82
+ # file.
83
+ def access_level(filename)
84
+ files_table.row(:text=>/#{Regexp.escape(filename)}/)[6].text
85
+ end
86
+
87
+ def edit_details(name)
88
+ files_table.row(:text=>/#{Regexp.escape(name)}/).li(:text=>/Action/, :class=>"menuOpen").fire_event("onclick")
89
+ files_table.row(:text=>/#{Regexp.escape(name)}/).link(:text=>"Edit Details").click
90
+ end
91
+
92
+ # Clicks the Create Folders menu item in the
93
+ # Add menu of the specified folder.
94
+ def create_subfolders_in(folder_name)
95
+ open_add_menu(folder_name)
96
+ files_table.row(:text=>/#{Regexp.escape(folder_name)}/).link(:text=>"Create Folders").click
97
+ end
98
+
99
+ def create_html_page_in(folder_name)
100
+ open_add_menu(folder_name)
101
+ files_table.row(:text=>/#{Regexp.escape(folder_name)}/).link(:text=>"Create HTML Page").click
102
+ end
103
+
104
+ # Enters the specified file into the file field name (assuming it's in the
105
+ # data/sakai-cle-test-api folder or a subfolder therein)
106
+ #
107
+ def upload_file(filename, filepath="")
108
+ frm.file_field(:id=>"upload").set(filepath + filename)
109
+ if frm.div(:class=>"alertMessage").exist?
110
+ sleep 2
111
+ upload_file(filename)
112
+ end
113
+ end
114
+
115
+ # Enters the specified file into the file field name (assuming it's in the
116
+ # data/sakai-cle-test-api folder or a subfolder therein)
117
+ #
118
+ # Use this method ONLY for instances where there's a file field on the page
119
+ # with an "upload" id.
120
+ def upload_local_file(filename, filepath="")
121
+ frm.file_field(:id=>"upload").set(filepath + filename)
122
+ if frm.div(:class=>"alertMessage").exist?
123
+ sleep 2
124
+ upload_local_file(filename)
125
+ end
126
+ end
127
+
128
+ # Clicks the Add Menu for the specified
129
+ # folder, then selects the Upload Files
130
+ # command in the menu that appears.
131
+ def upload_file_to_folder(folder_name)
132
+ upload_files_to_folder(folder_name)
133
+ end
134
+
135
+ # Clicks the Add Menu for the specified
136
+ # folder, then selects the Upload Files
137
+ # command in the menu that appears.
138
+ def upload_files_to_folder(folder_name)
139
+ if frm.li(:text=>/A/, :class=>"menuOpen").exist?
140
+ files_table.row(:text=>/#{Regexp.escape(folder_name)}/).li(:text=>/A/, :class=>"menuOpen").fire_event("onclick")
141
+ else
142
+ files_table.row(:text=>/#{Regexp.escape(folder_name)}/).link(:text=>"Start Add Menu").fire_event("onfocus")
143
+ end
144
+ files_table.row(:text=>/#{Regexp.escape(folder_name)}/).link(:text=>"Upload Files").click
145
+ end
146
+
147
+ # Clicks the "Attach a copy" link for the specified
148
+ # file, then reinstantiates the Class.
149
+ # If an alert box appears, the method will call itself again.
150
+ # Note that this can lead to an infinite loop. Will need to fix later.
151
+ def attach_a_copy(file_name)
152
+ files_table.row(:text=>/#{Regexp.escape(file_name)}/).link(:href=>/doAttachitem/).click
153
+ if frm.div(:class=>"alertMessage").exist?
154
+ sleep 1
155
+ attach_a_copy(file_name) # TODO - This can loop infinitely
156
+ end
157
+ end
158
+
159
+ # Takes the specified array object containing pointers
160
+ # to local file resources, then uploads those files to
161
+ # the folder specified, checks if they all uploaded properly and
162
+ # if not, re-tries the ones that failed the first time.
163
+ #
164
+ # Finally, it re-instantiates the appropriate page class.
165
+ # Note that it expects all files to be located in the same folder (can be in subfolders of that folder).
166
+ def upload_multiple_files_to_folder(folder, file_array, file_path="")
167
+
168
+ upload = upload_files_to_folder folder
169
+
170
+ file_array.each do |file|
171
+ upload.file_to_upload(file, file_path)
172
+ upload.add_another_file
173
+ end
174
+
175
+ resources = upload.upload_files_now
176
+
177
+ file_array.each do |file|
178
+ file =~ /(?<=\/).+/
179
+ # puts $~.to_s # For debugging purposes
180
+ unless resources.file_names.include?($~.to_s)
181
+ upload_files = resources.upload_files_to_folder(folder)
182
+ upload_files.file_to_upload(file, file_path)
183
+ upload_files.upload_files_now
184
+ end
185
+ end
186
+ end
187
+
188
+ # Clicks the Continue button
189
+ def continue
190
+ frm.div(:class=>"highlightPanel").span(:id=>"submitnotifxxx").wait_while_present
191
+ frm.button(:value=>"Continue").click
192
+ end
193
+
194
+ def open_add_menu(folder_name)
195
+ files_table.row(:text=>/#{Regexp.escape(folder_name)}/).link(:text=>"Start Add Menu").fire_event("onfocus")
196
+ end
197
+
198
+ end
@@ -104,7 +104,7 @@ class Login
104
104
  frame.text_field(:id, "eid").set username
105
105
  frame.text_field(:id, "pw").set password
106
106
  frame.form(:method, "post").submit
107
- MyWorkspace.new(@browser)
107
+ return MyWorkspace.new(@browser)
108
108
  end
109
109
  alias log_in login
110
110
  alias sign_in login
@@ -744,7 +744,12 @@ class EditUser
744
744
 
745
745
  include PageObject
746
746
  include ToolsMenu
747
-
747
+
748
+ def update_details
749
+ frm.button(:name=>"eventSubmit_doSave").click
750
+ sleep 1
751
+ end
752
+
748
753
  in_frame(:class=>"portletMainIframe") do |frame|
749
754
  link(:remove_user, :text=>"Remove User", :frame=>frame)
750
755
  text_field(:first_name, :id=>"first-name", :frame=>frame)
@@ -752,7 +757,6 @@ class EditUser
752
757
  text_field(:email, :id=>"email", :frame=>frame)
753
758
  text_field(:create_new_password, :id=>"pw", :frame=>frame)
754
759
  text_field(:verify_new_password, :id=>"pw0", :frame=>frame)
755
- button(:update_details, :name=>"eventSubmit_doSave", :frame=>frame)
756
760
  button(:cancel_changes, :name=>"eventSubmit_doCancel", :frame=>frame)
757
761
  end
758
762
 
@@ -1,27 +1,294 @@
1
1
  # The Announcements list page for a Site.
2
2
  class Announcements
3
3
  include ToolsMenu
4
- include AnnouncementsMethods
4
+
5
+ # Clicks the add button, instantiates the AddEditAnnouncements class.
6
+ def add
7
+ frm.div(:class=>"portletBody").link(:title=>"Add").click
8
+ frm.frame(:id, "body___Frame").td(:id, "xEditingArea").frame(:index=>0).wait_until_present(60)
9
+ AddEditAnnouncements.new(@browser)
10
+ end
11
+
12
+ # Edits the specified announcement in the list.
13
+ # @param subject [String] the text of the announcement listing link.
14
+ def edit(subject)
15
+ frm.table(:class=>"listHier").row(:text=>/#{Regexp.escape(subject)}/).link(:text=>"Edit").click
16
+ AddEditAnnouncements.new(@browser)
17
+ end
18
+
19
+ # Returns an array of the subject strings of the announcements
20
+ # listed on the page.
21
+ def subjects
22
+ links = frm.table(:class=>"listHier").links.find_all { |link| link.title=~/View announcement/ }
23
+ subjects = []
24
+ links.each { |link| subjects << link.text }
25
+ return subjects
26
+ end
27
+
28
+ def href(subject)
29
+ frm.link(:text=>subject).href
30
+ end
31
+
32
+ # Returns true or false depending on whether the specified announcement has an attachment.
33
+ # @param subject [String] the text of the announcement listing link.
34
+ def has_attachment?(subject)
35
+ if frm.table(:class=>"listHier").row(:text=>/#{Regexp.escape(subject)}/).exist?
36
+ return frm.table(:class=>"listHier").row(:text=>/#{Regexp.escape(subject)}/).image(:alt=>"attachment").exist?
37
+ else
38
+ puts "Can't find your target row. Your test is faulty."
39
+ return false
40
+ end
41
+ end
42
+
43
+ # Returns the text of the "For" column for
44
+ # the specified announcement.
45
+ # @param subject [String] the text of the announcement listing link.
46
+ def for_column(subject)
47
+ frm.table(:class=>"listHier").row(:text=>/#{Regexp.escape(subject)}/)[4].text
48
+ end
49
+
50
+ # Clicks the specified announcement link and instantiates the PreviewAnnouncements class.
51
+ # @param subject [String] the text of the announcement listing link.
52
+ def preview_announcement(subject)
53
+ frm.link(:text=>subject).click
54
+ PreviewAnnouncements.new(@browser)
55
+ end
56
+
57
+ # Selects the specified list item from the View selection list.
58
+ # @param list_item [String] the text of the option in the selection list.
59
+ def view=(list_item)
60
+ frm.select(:id=>"view").set(list_item)
61
+ end
62
+
63
+ # Clicks the Merge link and instantiates the AnnouncementsMerge class.
64
+ def merge
65
+ frm.link(:text=>"Merge").click
66
+ AnnouncementsMerge.new(@browser)
67
+ end
68
+
5
69
  end
6
70
 
7
71
  # Show Announcements from Another Site. On this page you select what announcements
8
72
  # you want to merge into the current Site.
9
73
  class AnnouncementsMerge
10
74
  include ToolsMenu
11
- include AnnouncementsMergeMethods
75
+
76
+ # Checks the checkbox for the specified site name
77
+ # @param site_name [String] the name of the relevant site displayed in the table
78
+ def check(site_name)
79
+ frm.table(:class=>"listHier lines nolines").row(:text=>/#{Regexp.escape(site_name)}/).checkbox(:id=>/site/).set
80
+ end
81
+
82
+ # Clicks the Save button and returns the Announcements class.
83
+ def save
84
+ frm.button(:value=>"Save").click
85
+ Announcements.new(@browser)
86
+ end
87
+
12
88
  end
13
89
 
14
90
  # This Class does double-duty. It's for the Preview page when editing an
15
91
  # Announcement, plus for when you just click an Announcement to view it.
16
92
  class PreviewAnnouncements
17
93
  include ToolsMenu
18
- include PreviewAnnouncementsMethods
94
+
95
+ # Clicks the Return to list button and returns the Announcements class.
96
+ def return_to_list
97
+ frm.button(:value=>"Return to List").click
98
+ Announcements.new(@browser)
99
+ end
100
+
101
+ # Clicks the Save changes button and returns the Announcements class.
102
+ def save_changes
103
+ frm.button(:value=>"Save Changes").click
104
+ Announcements.new(@browser)
105
+ end
106
+
107
+ # Clicks the Edit button and returns the AddEditAnnouncements class.
108
+ def edit
109
+ frm.button(:value=>"Edit").click
110
+ AddEditAnnouncements.new(@browser)
111
+ end
112
+
19
113
  end
20
114
 
21
115
  # The page where an announcement is created or edited.
22
116
  class AddEditAnnouncements
23
117
  include ToolsMenu
24
- include AddEditAnnouncementsMethods
118
+
119
+ # Clicks the Add Announcement button and then determines whether to return
120
+ # AddEditAnnouncements or Announcements class.
121
+ def add_announcement
122
+ frm.button(:value=>"Add Announcement").click
123
+ if frm.div(:class=>"portletBody").h3.text=~/Add Announcement/
124
+ AddEditAnnouncements.new(@browser)
125
+ else
126
+ Announcements.new(@browser)
127
+ end
128
+ end
129
+
130
+ # Clicks the Save changes button and returns the Announcements class.
131
+ def save_changes
132
+ frm.button(:value=>"Save Changes").click
133
+ Announcements.new(@browser)
134
+ end
135
+
136
+ # Clicks the Preview button and returns the PreviewAnnouncements class.
137
+ def preview
138
+ frm.button(:value=>"Preview").click
139
+ PreviewAnnouncements.new(@browser)
140
+ end
141
+
142
+ # Sends the specified text block to the rich text editor
143
+ # @param text [String] the text that you want to add to the editor.
144
+ def body=(text)
145
+ frm.frame(:id, "body___Frame").td(:id, "xEditingArea").frame(:index=>0).send_keys(text)
146
+ end
147
+
148
+ # Clicks the Add attachments button and returns the Announcments Attach class.
149
+ def add_attachments
150
+ frm.button(:value=>"Add Attachments").click
151
+ AnnouncementsAttach.new(@browser)
152
+ end
153
+
154
+ # Clicks the checkbox for the specified group name
155
+ # when you've set the announcement access to display
156
+ # to groups.
157
+ # @param group_name [String] the name of the group in the table that you intend to select.
158
+ def check_group(group_name)
159
+ frm.table(:id=>"groupTable").row(:text=>/#{Regexp.escape(group_name)}/).checkbox(:name=>"selectedGroups").set
160
+ end
161
+
162
+ # Sets the Announcement Title field to the specified
163
+ # string value.
164
+ # @param string [String] the text you want to put in the title field.
165
+ def title=(string)
166
+ frm.text_field(:id=>"subject").set(string)
167
+ end
168
+
169
+ # Clicks the radio button for "Only members of this site can see this announcement"
170
+ def select_site_members
171
+ frm.radio(:id=>"site").set
172
+ end
173
+
174
+ # Clicks the radio button for "This announcement is publicly viewable"
175
+ def select_publicly_viewable
176
+ frm.radio(:id=>"pubview").set
177
+ end
178
+
179
+ # Clicks the radio button for "Displays this announcement to selected groups only."
180
+ def select_groups
181
+ frm.radio(:id=>"groups").set
182
+ end
183
+
184
+ # Clicks the radio button for "Show - (Post and display this announcement immediately)"
185
+ def select_show
186
+ frm.radio(:id=>"hidden_false").set
187
+ end
188
+
189
+ # Clicks the radio button for "Hide - (Draft mode - Do not display this announcement at this time)"
190
+ def select_hide
191
+ frm.radio(:id=>"hidden_true").set
192
+ end
193
+
194
+ # Clicks the radio button for "Specify Dates - (Choose when this announcement will be displayed)"
195
+ def select_specify_dates
196
+ frm.radio(:id=>"hidden_specify").set
197
+ end
198
+
199
+ # Checks the checkbox for "Beginning"
200
+ def check_beginning
201
+ frm.checkbox(:id=>"use_start_date").set
202
+ end
203
+
204
+ # Checks the checkbox for "Ending"
205
+ def check_ending
206
+ frm.checkbox(:id=>"use_end_date").set
207
+ end
208
+
209
+ # Checks the checkbox for selecting all Groups
210
+ def check_all
211
+ frm.checkbox(:id=>"selectall").set
212
+ end
213
+
214
+ # Sets the Beginning Month selection to the
215
+ # specified string.
216
+ def beginning_month=(string)
217
+ frm.select(:id=>"release_month").select(string)
218
+ end
219
+
220
+ # Sets the Beginning Day selection to the
221
+ # specified string.
222
+ def beginning_day=(string)
223
+ frm.select(:id=>"release_day").select(string)
224
+ end
225
+
226
+ # Sets the Beginning Year selection to the
227
+ # specified string.
228
+ def beginning_year=(string)
229
+ frm.select(:id=>"release_year").select(string)
230
+ end
231
+
232
+ # Sets the Beginning Hour selection to the
233
+ # specified string
234
+ def beginning_hour=(string)
235
+ frm.select(:id=>"release_hour").select(string)
236
+ end
237
+
238
+ # Sets the Beginning Minute selection to the
239
+ # specified string
240
+ def beginning_minute=(string)
241
+ frm.select(:id=>"release_minute").select(string)
242
+ end
243
+
244
+ # Sets the AM or PM value to the specified string.
245
+ # Obviously the string should be either "AM" or "PM".
246
+ def beginning_meridian=(string)
247
+ frm.select(:id=>"release_ampm").select(string)
248
+ end
249
+
250
+ # Sets the Ending Month selection to the specified
251
+ # string.
252
+ def ending_month=(string)
253
+ frm.select(:id=>"retract_month").select(string)
254
+ end
255
+
256
+ # Sets the Ending Day selection to the specified
257
+ # string.
258
+ def ending_day=(string)
259
+ frm.select(:id=>"retract_day").select(string)
260
+ end
261
+
262
+ # Sets the Ending Year selection to the specified
263
+ # string.
264
+ def ending_year=(string)
265
+ frm.select(:id=>"retract_year").select(string)
266
+ end
267
+
268
+ # Sets the Ending Hour selection to the specified
269
+ # string.
270
+ def ending_hour=(string)
271
+ frm.select(:id=>"retract_hour").select(string)
272
+ end
273
+
274
+ # Sets the Ending Minute selection to the specified
275
+ # string.
276
+ def ending_minute=(string)
277
+ frm.select(:id=>"retract_minute").select(string)
278
+ end
279
+
280
+ # Sets the Ending AM/PM selection to the specified
281
+ # value.
282
+ def ending_meridian=(string)
283
+ frm.select(:id=>"retract_ampm").select(string)
284
+ end
285
+
286
+ # Gets the text of the alert message when it appears on
287
+ # the page
288
+ def alert_message
289
+ frm.div(:class=>"alertMessage").text
290
+ end
291
+
25
292
  end
26
293
 
27
294
  # The page for attaching files and links to Announcements.
@@ -43,17 +310,17 @@ end
43
310
  # Page for merging announcements from other sites
44
311
  class AnnouncementsMerge
45
312
  include ToolsMenu
46
- include AnnouncementsMergeMethods
313
+
47
314
  end
48
315
 
49
316
  # Page for setting up options for announcements
50
317
  class AnnouncementsOptions
51
318
  include ToolsMenu
52
- include AnnouncementsOptionsMethods
319
+
53
320
  end
54
321
 
55
322
  # Page containing permissions options for announcements
56
323
  class AnnouncementsPermissions
57
324
  include ToolsMenu
58
- include AnnouncementsPermissionsMethods
325
+
59
326
  end