sambal-cle 0.1.3 → 0.1.4
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.
- data/README.md +3 -1
- data/lib/sambal-cle/base_page.rb +3 -1
- data/lib/sambal-cle/data_objects/announcement.rb +7 -10
- data/lib/sambal-cle/data_objects/assessment.rb +265 -9
- data/lib/sambal-cle/data_objects/assignment.rb +38 -32
- data/lib/sambal-cle/data_objects/assignment_permissions.rb +61 -0
- data/lib/sambal-cle/data_objects/assignment_submission.rb +126 -0
- data/lib/sambal-cle/data_objects/blog.rb +4 -7
- data/lib/sambal-cle/data_objects/blogger.rb +4 -10
- data/lib/sambal-cle/data_objects/chat_room.rb +5 -8
- data/lib/sambal-cle/data_objects/event.rb +6 -17
- data/lib/sambal-cle/data_objects/forum.rb +9 -19
- data/lib/sambal-cle/data_objects/lesson.rb +8 -29
- data/lib/sambal-cle/data_objects/message.rb +7 -10
- data/lib/sambal-cle/data_objects/poll.rb +6 -11
- data/lib/sambal-cle/data_objects/resource.rb +28 -37
- data/lib/sambal-cle/data_objects/site.rb +6 -17
- data/lib/sambal-cle/data_objects/syllabus.rb +6 -8
- data/lib/sambal-cle/data_objects/user.rb +88 -0
- data/lib/sambal-cle/data_objects/web_content_tool.rb +5 -6
- data/lib/sambal-cle/data_objects/wiki.rb +6 -6
- data/lib/sambal-cle/page_objects/account.rb +0 -2
- data/lib/sambal-cle/page_objects/announcements.rb +0 -1
- data/lib/sambal-cle/page_objects/assessments.rb +57 -87
- data/lib/sambal-cle/page_objects/assignments.rb +117 -337
- data/lib/sambal-cle/page_objects/calendar.rb +0 -2
- data/lib/sambal-cle/page_objects/login.rb +3 -9
- data/lib/sambal-cle/page_objects/sections.rb +2 -3
- data/lib/sambal-cle/page_objects/site_setup.rb +9 -19
- data/lib/sambal-cle/rich_text.rb +6 -0
- data/lib/sambal-cle/utilities.rb +4 -10
- data/lib/sambal-cle/workflows.rb +1 -5
- data/lib/sambal-cle.rb +2 -10
- data/sambal-cle.gemspec +7 -8
- data/test/add_assignment_to_calendar_spec.rb +14 -15
- data/test/assessment_create_spec.rb +355 -0
- data/test/assignment_announcements_spec.rb +14 -15
- data/test/assignment_duplicate_spec.rb +56 -0
- data/test/assignment_gradebook_spec.rb +16 -15
- data/test/assignment_permissions_spec.rb +77 -0
- data/test/assignments_grading_spec.rb +123 -0
- data/test/assignments_submission_spec.rb +143 -0
- data/test/config.yml +3 -0
- data/test/directory.yml +120 -0
- data/test/duplicate_site_spec.rb +5 -3
- data/test/import_site_content_spec.rb +248 -0
- metadata +22 -31
- data/lib/sambal-cle/core-ext.rb +0 -90
- data/lib/sambal-cle/date_makers.rb +0 -118
- data/lib/sambal-cle/gem_ext.rb +0 -23
- data/lib/sambal-cle/page_helper.rb +0 -22
- data/lib/sambal-cle/page_maker.rb +0 -48
- data/lib/sambal-cle/randomizers.rb +0 -117
@@ -1,4 +1,3 @@
|
|
1
|
-
|
2
1
|
#================
|
3
2
|
# Assignments Pages
|
4
3
|
#================
|
@@ -175,6 +174,8 @@ class AssignmentsList < AssignmentsBase
|
|
175
174
|
listview_elements
|
176
175
|
alias :add :add_assignment
|
177
176
|
|
177
|
+
expected_element :page_title
|
178
|
+
|
178
179
|
# Returns an array of the displayed assignment titles.
|
179
180
|
# Use for verification of test steps.
|
180
181
|
def assignments_titles
|
@@ -183,7 +184,7 @@ class AssignmentsList < AssignmentsBase
|
|
183
184
|
1.upto(a_table.rows.size-1) do |x|
|
184
185
|
titles << a_table[x][1].h4(:index=>0).text
|
185
186
|
end
|
186
|
-
|
187
|
+
titles
|
187
188
|
end
|
188
189
|
alias assignment_titles assignments_titles
|
189
190
|
alias assignment_list assignments_titles
|
@@ -191,79 +192,52 @@ class AssignmentsList < AssignmentsBase
|
|
191
192
|
|
192
193
|
# Clicks the Edit link for the assignment with the specified
|
193
194
|
# id, then instantiates the AssignmentAdd page class.
|
194
|
-
|
195
|
-
frm.link(:href=>/#{Regexp.escape(id)}/).click
|
196
|
-
AssignmentAdd.new(@browser)
|
197
|
-
end
|
195
|
+
page_method(:edit_assignment_id) { |id, b| b.frm.link(:href=>/#{Regexp.escape(id)}/).click }
|
198
196
|
|
199
197
|
# Clicks the Edit link for the Assignment specified.
|
200
198
|
# next is the AssignmentAdd page class.
|
201
|
-
|
202
|
-
index = assignments_titles.index(assignment_name)
|
203
|
-
frm.link(:text=>"Edit", :index=>index).click
|
204
|
-
|
199
|
+
page_method(:edit_assignment) { |assignment_name, b|
|
200
|
+
index = b.assignments_titles.index(assignment_name)
|
201
|
+
b.frm.link(:text=>"Edit", :index=>index).click
|
202
|
+
}
|
205
203
|
|
206
204
|
# Checks the appropriate checkbox, based on the specified assignment_name
|
207
205
|
# Then clicks the Update button and confirms the deletion request.
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
frm.
|
212
|
-
|
213
|
-
frm.button(:value=>"Delete").click
|
214
|
-
AssignmentsList.new(@browser)
|
215
|
-
end
|
206
|
+
page_method(:delete) { |assignment_name, b|
|
207
|
+
b.assignments_table.row(:text=>/#{Regexp.escape(assignment_name)}/).checkbox(:name=>"selectedAssignments").set
|
208
|
+
b.frm.button(:value=>"Update").click
|
209
|
+
b.frm.button(:value=>"Delete").click
|
210
|
+
}
|
216
211
|
|
217
212
|
# Clicks on the Duplicate link for the Assignment specified.
|
218
213
|
# Then instantiates the AssignmentsList page class.
|
219
|
-
|
220
|
-
index = assignments_titles.index(assignment_name)
|
221
|
-
frm.link(:text=>"Duplicate", :index=>index).click
|
222
|
-
|
223
|
-
end
|
214
|
+
page_method(:duplicate) { |assignment_name, b|
|
215
|
+
index = b.assignments_titles.index(assignment_name)
|
216
|
+
b.frm.link(:text=>"Duplicate", :index=>index).click
|
217
|
+
}
|
224
218
|
|
225
219
|
# Gets the assignment id from the href of the specified
|
226
220
|
# Assignment link.
|
227
|
-
|
228
|
-
|
229
|
-
return $~.to_s
|
230
|
-
end
|
231
|
-
|
232
|
-
def assignment_href(name)
|
233
|
-
frm.link(:text=>/#{Regexp.escape(name)}/).href
|
234
|
-
end
|
221
|
+
page_method(:get_assignment_id) { |assignment_name, b| b.assignment_href(assignment_name) =~ /(?<=\/a\/\S{36}\/).+(?=&pan)/; $~.to_s }
|
222
|
+
page_method(:assignment_href) { |name, b| b.frm.link(:text=>/#{Regexp.escape(name)}/).href }
|
235
223
|
|
236
224
|
# Checks the checkbox for the specified Assignment,
|
237
225
|
# using the assignment id as the identifier.
|
238
|
-
|
239
|
-
|
240
|
-
end
|
241
|
-
|
242
|
-
# Opens the specified assignment for viewing
|
243
|
-
def open_assignment(assignment_name)
|
244
|
-
frm.link(:text=>assignment_name).click
|
245
|
-
end
|
226
|
+
page_method(:check_assignment) { |id,b| b.frm.checkbox(:value, /#{id}/).set } #FIXME to use name instead of id.
|
227
|
+
page_method(:open_assignment) { |assignment_name, b| b.frm.link(:text=>assignment_name).click }
|
246
228
|
|
247
229
|
# Gets the contents of the status column
|
248
230
|
# for the specified assignment
|
249
|
-
|
250
|
-
frm.table(:class=>/listHier lines/).row(:text=>/#{Regexp.escape(assignment_name)}/).td(:headers=>"status").text
|
251
|
-
end
|
231
|
+
page_method(:status_of) { |assignment_name, b| b.assignments_table.row(:text=>/#{Regexp.escape(assignment_name)}/).td(:headers=>"status").text }
|
252
232
|
|
253
233
|
# Clicks the View Submissions link for the specified
|
254
234
|
# Assignment, then instantiates the AssignmentSubmissionList
|
255
235
|
# page class.
|
256
|
-
|
257
|
-
frm.table(:class=>"listHier lines nolines").row(:text=>/#{Regexp.escape(assignment_name)}/).link(:text=>"View Submissions").click
|
258
|
-
AssignmentSubmissionList.new(@browser)
|
259
|
-
end
|
236
|
+
page_method(:view_submissions_for) { |assignment_name, b| b.assignments_table.row(:text=>/#{Regexp.escape(assignment_name)}/).link(:text=>"View Submissions").click }
|
260
237
|
|
261
238
|
# Clicks the Grade link for the specified Assignment,
|
262
239
|
# then instantiates the AssignmentSubmissionList page class.
|
263
|
-
|
264
|
-
frm.table(:class=>"listHier lines nolines").row(:text=>/#{Regexp.escape(assignment_name)}/).link(:text=>"Grade").click
|
265
|
-
AssignmentSubmissionList.new(@browser)
|
266
|
-
end
|
240
|
+
page_method(:grade) { |assignment_name, b| b.assignments_table.row(:text=>/#{Regexp.escape(assignment_name)}/).link(:text=>"Grade").click }
|
267
241
|
|
268
242
|
action(:sort_assignment_title) { |b| b.frm.link(:text=>"Assignment title").click }
|
269
243
|
action(:sort_status) { |b| b.frm.link(:text=>"Status").click }
|
@@ -275,6 +249,9 @@ class AssignmentsList < AssignmentsBase
|
|
275
249
|
element(:view) { |b| b.frm.select(:id=>"view") }
|
276
250
|
action(:update) { |b| b.frm.button(:name=>"eventSubmit_doDelete_confirm_assignment").click }
|
277
251
|
|
252
|
+
element(:assignments_table) { |b| b.frm.table(:class=>"listHier lines nolines") }
|
253
|
+
element(:page_title) { |b| b.frm.div(:class=>"portletBody").h3(:text=>"Assignment List") }
|
254
|
+
|
278
255
|
end
|
279
256
|
|
280
257
|
# The Permissions Page in Assignments
|
@@ -284,47 +261,18 @@ class AssignmentsPermissions < AssignmentsBase
|
|
284
261
|
# the AssignmentsList page class.
|
285
262
|
action(:save) {|b| b.frm.button(:value=>"Save").click }
|
286
263
|
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
element(:guests_receive_notifications) { |b| b.frm.checkbox(:id=>"Guestasn.receive.notifications") }
|
298
|
-
element(:guests_share_drafts) { |b| b.frm.checkbox(:id=>"Guestasn.share.drafts") }
|
299
|
-
element(:instructors_all_groups) { |b| b.frm.checkbox(:id=>"Instructorasn.all.groups") }
|
300
|
-
element(:instructors_create_assignments) { |b| b.frm.checkbox(:id=>"Instructorasn.new") }
|
301
|
-
element(:instructors_submit_to_assigments) { |b| b.frm.checkbox(:id=>"Instructorasn.submit") }
|
302
|
-
element(:instructors_delete_assignments) { |b| b.frm.checkbox(:id=>"Instructorasn.delete") }
|
303
|
-
element(:instructors_read_assignments) { |b| b.frm.checkbox(:id=>"Instructorasn.read") }
|
304
|
-
element(:instructors_revise_assignments) { |b| b.frm.checkbox(:id=>"Instructorasn.revise") }
|
305
|
-
element(:instructors_grade_assignments) { |b| b.frm.checkbox(:id=>"Instructorasn.grade") }
|
306
|
-
element(:instructors_receive_notifications) { |b| b.frm.checkbox(:id=>"Instructorasn.receive.notifications") }
|
307
|
-
element(:instructors_share_drafts) { |b| b.frm.checkbox(:id=>"Instructorasn.share.drafts") }
|
308
|
-
element(:students_all_groups) { |b| b.frm.checkbox(:id=>"Studentasn.all.groups") }
|
309
|
-
element(:students_create_assignments) { |b| b.frm.checkbox(:id=>"Studentasn.new") }
|
310
|
-
element(:students_submit_to_assigments) { |b| b.frm.checkbox(:id=>"Studentasn.submit") }
|
311
|
-
element(:students_delete_assignments) { |b| b.frm.checkbox(:id=>"Studentasn.delete") }
|
312
|
-
element(:students_read_assignments) { |b| b.frm.checkbox(:id=>"Studentasn.read") }
|
313
|
-
element(:students_revise_assignments) { |b| b.frm.checkbox(:id=>"Studentasn.revise") }
|
314
|
-
element(:students_grade_assignments) { |b| b.frm.checkbox(:id=>"Studentasn.grade") }
|
315
|
-
element(:students_receive_notifications) { |b| b.frm.checkbox(:id=>"Studentasn.receive.notifications") }
|
316
|
-
element(:students_share_drafts) { |b| b.frm.checkbox(:id=>"Studentasn.share.drafts") }
|
317
|
-
element(:tas_all_groups) { |b| b.frm.checkbox(:id=>"Teaching Assistantasn.all.groups") }
|
318
|
-
element(:tas_create_assignments) { |b| b.frm.checkbox(:id=>"Teaching Assistantasn.new") }
|
319
|
-
element(:tas_submit_to_assigments) { |b| b.frm.checkbox(:id=>"Teaching Assistantasn.submit") }
|
320
|
-
element(:tas_delete_assignments) { |b| b.frm.checkbox(:id=>"Teaching Assistantasn.delete") }
|
321
|
-
element(:tas_read_assignments) { |b| b.frm.checkbox(:id=>"Teaching Assistantasn.read") }
|
322
|
-
element(:tas_revise_assignments) { |b| b.frm.checkbox(:id=>"Teaching Assistantasn.revise") }
|
323
|
-
element(:tas_grade_assignments) { |b| b.frm.checkbox(:id=>"Teaching Assistantasn.grade") }
|
324
|
-
element(:tas_receive_notifications) { |b| b.frm.checkbox(:id=>"Teaching Assistantasn.receive.notifications") }
|
325
|
-
element(:tas_share_drafts) { |b| b.frm.checkbox(:id=>"Teaching Assistantasn.share.drafts") }
|
264
|
+
def self.chekbocks(*method_names)
|
265
|
+
method_names.each do |method_name|
|
266
|
+
define_method method_name do |role|
|
267
|
+
self.frm.checkbox(:id=>"#{role}asn.#{method_name.to_s.gsub("_", ".")}")
|
268
|
+
end
|
269
|
+
end
|
270
|
+
end
|
271
|
+
|
272
|
+
chekbocks :all_groups, :new, :submit, :delete, :read, :revise, :grade, :receive_notifications, :share_drafts
|
273
|
+
|
326
274
|
action(:undo_changes) { |b| b.frm.link(:text=>"Undo changes").click }
|
327
|
-
action(:cancel) { |b| b.frm.button(:
|
275
|
+
action(:cancel) { |b| b.frm.button(:name=>"eventSubmit_doCancel").click }
|
328
276
|
action(:permission) { |b| b.frm.link(:text=>"Permission").click }
|
329
277
|
action(:guest) { |b| b.frm.link(:text=>"Guest").click }
|
330
278
|
action(:instructor) { |b| b.frm.link(:text=>"Instructor").click }
|
@@ -343,54 +291,36 @@ class AssignmentsPermissions < AssignmentsBase
|
|
343
291
|
end
|
344
292
|
|
345
293
|
# Page that appears when you click to preview an Assignment
|
294
|
+
# as an instructor user. Note that the primary difference
|
295
|
+
# between this class and AssignmentsView is that there are
|
296
|
+
# instructor-specific buttons and menu options that don't
|
297
|
+
# appear for student users.
|
346
298
|
class AssignmentsPreview < AssignmentsBase
|
347
299
|
|
348
300
|
menu_elements
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
hash = {}
|
359
|
-
frm.table(:class=>"itemSummary").rows.each do |row|
|
360
|
-
hash.store(row.th.text, row.td.text)
|
301
|
+
basic_page_elements # Needed for the header method
|
302
|
+
|
303
|
+
# returns a hash containing the info in the Summary table.
|
304
|
+
# Header fields are the keys and their associated tds are the values.
|
305
|
+
def summary_info
|
306
|
+
hash={}
|
307
|
+
array = frm.table(:class=>"itemSummary").to_a
|
308
|
+
array.each do |subarray|
|
309
|
+
hash.store(subarray[0], subarray[1])
|
361
310
|
end
|
362
|
-
|
311
|
+
hash
|
363
312
|
end
|
364
313
|
|
365
314
|
# Grabs the Assignment Instructions text.
|
366
|
-
|
367
|
-
frm.div(:class=>"textPanel").text
|
368
|
-
end
|
315
|
+
value(:instructions) { |b| b.frm.div(:class=>"textPanel").text }
|
369
316
|
|
370
317
|
# Grabs the instructor comments text.
|
371
|
-
|
372
|
-
frm.div(:class=>"portletBody").div(:class=>"textPanel", :index=>2).text
|
373
|
-
end
|
374
|
-
|
375
|
-
#
|
376
|
-
def back_to_list
|
377
|
-
frm.button(:value=>"Back to list").click
|
378
|
-
AssignmentsList.new(@browser)
|
379
|
-
end
|
318
|
+
value(:instructor_comments) { |b| b.frm.div(:class=>"portletBody").div(:class=>"textPanel", :index=>2).text }
|
380
319
|
|
381
|
-
|
382
|
-
# the AssignmentsList page class.
|
383
|
-
def post
|
384
|
-
frm.button(:name=>"post").click
|
385
|
-
AssignmentsList.new(@browser)
|
386
|
-
end
|
320
|
+
action(:back_to_list) { |b| b.frm.button(:value=>"Back to list").click }
|
387
321
|
|
388
|
-
# Clicks the
|
389
|
-
|
390
|
-
def cancel
|
391
|
-
frm.button(:value=>"Cancel").click
|
392
|
-
AssignmentsList.new(@browser)
|
393
|
-
end
|
322
|
+
# Clicks the Post button.
|
323
|
+
action(:post) { |b| b.frm.button(:name=>"post").click }
|
394
324
|
|
395
325
|
element(:assignment_id) { |b| b.frm.hidden(:name=>"assignmentId") }
|
396
326
|
action(:hide_assignment) { |b| b.frm.link(:href=>/doHide_preview_assignment_assignment/).click }
|
@@ -407,21 +337,9 @@ end
|
|
407
337
|
class AssignmentsReorder < AssignmentsBase
|
408
338
|
|
409
339
|
menu_elements
|
340
|
+
basic_page_elements
|
410
341
|
|
411
|
-
|
412
|
-
# the AssignmentsList page class.
|
413
|
-
def save
|
414
|
-
frm.button(:value=>"Save").click
|
415
|
-
AssignmentsList.new(@browser)
|
416
|
-
end
|
417
|
-
|
418
|
-
# Clicks the Cancel button, then instantiates
|
419
|
-
# the AssignmentsList Class.
|
420
|
-
def cancel
|
421
|
-
frm.button(:value=>"Cancel").click
|
422
|
-
AssignmentsList.new(@browser)
|
423
|
-
end
|
424
|
-
|
342
|
+
action(:save) { |b| b.frm.button(:value=>"Save").click }
|
425
343
|
action(:sort_by_title) { |b| b.frm.link(:text=>"Sort by title").click }
|
426
344
|
action(:sort_by_open_date) { |b| b.frm.link(:text=>"Sort by open date").click }
|
427
345
|
action(:sort_by_due_date) { |b| b.frm.link(:text=>"Sort by due date").click }
|
@@ -431,169 +349,65 @@ class AssignmentsReorder < AssignmentsBase
|
|
431
349
|
end
|
432
350
|
|
433
351
|
# A Student user's page for editing/submitting/view an assignment.
|
434
|
-
class
|
352
|
+
class AssignmentStudentView < BasePage
|
435
353
|
|
354
|
+
include FCKEditor
|
436
355
|
frame_element
|
356
|
+
basic_page_elements
|
437
357
|
|
438
|
-
|
439
|
-
|
440
|
-
frm.
|
441
|
-
|
442
|
-
|
443
|
-
# Returns a hash object containing the contents of the Item Summary table.
|
444
|
-
# The hash's Key is the header column and the value is the content column.
|
445
|
-
def item_summary
|
446
|
-
hash = {}
|
447
|
-
frm.table(:class=>"itemSummary").rows.each do |row|
|
448
|
-
hash.store(row.th.text, row.td.text)
|
358
|
+
def summary_info
|
359
|
+
hash={}
|
360
|
+
array = frm.table(:class=>"itemSummary").to_a
|
361
|
+
array.each do |subarray|
|
362
|
+
hash.store(subarray[0], subarray[1])
|
449
363
|
end
|
450
|
-
|
364
|
+
hash
|
451
365
|
end
|
452
366
|
|
453
|
-
|
454
|
-
def instructor_comments
|
455
|
-
frm.div(:class=>"portletBody").div(:class=>"textPanel", :index=>2).text
|
456
|
-
end
|
367
|
+
element(:editor) { |b| b.frm.frame(:id, "Assignment.view_submission_text___Frame") }
|
457
368
|
|
458
369
|
# Enters the specified text into the Assignment Text FCKEditor.
|
459
370
|
def assignment_text=(text)
|
460
|
-
|
371
|
+
remove_assignment_text
|
372
|
+
editor.td(:id, "xEditingArea").frame(:index=>0).send_keys(text)
|
461
373
|
end
|
462
374
|
|
463
375
|
# Clears out any existing text from the Assignment Text FCKEditor.
|
464
376
|
def remove_assignment_text
|
465
|
-
|
466
|
-
|
377
|
+
select_all(editor)
|
378
|
+
editor.td(:id, "xEditingArea").frame(:index=>0).send_keys :backspace
|
467
379
|
end
|
468
380
|
|
469
|
-
# This class variable allows adding an arbitrary number of
|
470
|
-
# files to the page, as long as the adding steps alternate between
|
471
|
-
# selecting the file and clicking the add more files button
|
472
|
-
@@file_number = 0
|
473
|
-
|
474
|
-
# Enters the specified file name into the file field. Entering the path
|
475
|
-
# separately is optional.
|
476
|
-
# Once the filename is entered in the field, the
|
477
|
-
# @@file_number class variable is increased by one
|
478
|
-
# in case any more files need to be added to the upload
|
479
|
-
# list.
|
480
381
|
def select_file(file_name, file_path="")
|
481
|
-
frm.file_field(:id=>"clonableUpload", :name
|
482
|
-
@@file_number += 1
|
483
|
-
end
|
484
|
-
|
485
|
-
# Clicks the Submit button, then instantiates
|
486
|
-
# the appropriate page class, based on the
|
487
|
-
# page that gets loaded.
|
488
|
-
def submit
|
489
|
-
frm.button(:value=>"Submit").click
|
490
|
-
@@file_number=0
|
491
|
-
if frm.div(:class=>"portletBody").h3.text=~/Submission Confirmation/
|
492
|
-
SubmissionConfirmation.new(@browser)
|
493
|
-
elsif frm.button(:value=>"Back to list").exist?
|
494
|
-
SubmissionConfirmation.new(@browser)
|
495
|
-
else
|
496
|
-
AssessmentsList.new(@browser)
|
497
|
-
end
|
498
|
-
end
|
499
|
-
|
500
|
-
# Clicks the Resubmit button, then instantiates
|
501
|
-
# the appropriate page class, based on the
|
502
|
-
# page that gets loaded.
|
503
|
-
#
|
504
|
-
# Resets @@file_number to zero so that file
|
505
|
-
# uploads will work if this page is visited again
|
506
|
-
# in the same script.
|
507
|
-
def resubmit
|
508
|
-
frm.button(:value=>"Resubmit").click
|
509
|
-
@@file_number=0
|
510
|
-
if frm.link(:text=>"Assignment title").exist?
|
511
|
-
puts "list..."
|
512
|
-
AssessmentsList.new(@browser)
|
513
|
-
else
|
514
|
-
SubmissionConfirmation.new(@browser)
|
515
|
-
end
|
516
|
-
end
|
517
|
-
|
518
|
-
# Clicks the Preview button, then
|
519
|
-
# instantiates the AssignmentStudentPreview page class.
|
520
|
-
#
|
521
|
-
# Resets @@file_number to zero so that file
|
522
|
-
# uploads will work if this page is visited again
|
523
|
-
# in the same script.
|
524
|
-
def preview
|
525
|
-
frm.button(:value=>"Preview").click
|
526
|
-
@@file_number=0
|
527
|
-
AssignmentStudentPreview.new(@browser)
|
528
|
-
end
|
529
|
-
|
530
|
-
# Clicks the Save Draft button, then
|
531
|
-
# instantiates the SubmissionConfirmation
|
532
|
-
# page class.
|
533
|
-
def save_draft
|
534
|
-
frm.button(:value=>"Save Draft").click
|
535
|
-
SubmissionConfirmation.new(@browser)
|
536
|
-
end
|
537
|
-
|
538
|
-
# Clicks the link to select more files
|
539
|
-
# from the Workspace. Then instantiates
|
540
|
-
# the AssignmentAttachments page class.
|
541
|
-
def select_more_files_from_workspace
|
542
|
-
frm.link(:id=>"attach").click
|
543
|
-
AssignmentAttachments.new(@browser)
|
544
|
-
end
|
545
|
-
|
546
|
-
# Clicks the Back to list button, then
|
547
|
-
# instantiates the AssignmentList page class.
|
548
|
-
def back_to_list
|
549
|
-
frm.button(:value=>"Back to list").click
|
550
|
-
AssignmentsList.new(@browser)
|
551
|
-
end
|
552
|
-
|
553
|
-
# Clicks the Cancel button and instantiates the
|
554
|
-
# AssignmentsList Class.
|
555
|
-
def cancel
|
556
|
-
frm.button(:value=>"Cancel").click
|
557
|
-
AssignmentsList.new(@browser)
|
382
|
+
frm.file_field(:id=>"clonableUpload", :name=>/upload/).set(file_path + file_name)
|
558
383
|
end
|
559
384
|
|
385
|
+
action(:select_more_files_from_workspace) { |b| b.frm.link(:id=>"attach").click }
|
560
386
|
action(:add_another_file) { |b| b.frm.link(:id=>"addMoreAttachmentControls") }
|
561
387
|
|
562
|
-
|
563
|
-
|
564
|
-
|
565
|
-
|
566
|
-
class AssignmentStudentPreview < BasePage
|
388
|
+
element(:submit_button) { |b| b.frm.button(:value=>"Submit") }
|
389
|
+
element(:resubmit_button) { |b| b.frm.button(:value=>"Resubmit") }
|
390
|
+
element(:save_draft_button) { |b| b.frm.button(:value=>"Save Draft") }
|
391
|
+
element(:preview_button) { |b| b.frm.button(:value=>"Preview") }
|
567
392
|
|
568
|
-
|
393
|
+
action(:submit) { |p| p.submit_button.click }
|
394
|
+
action(:resubmit) { |p| p.resubmit_button.click }
|
395
|
+
action(:save_draft) { |p| p.save_draft_button.click }
|
396
|
+
action(:back_to_list) { |b| b.frm.button(:value=>"Back to list").click }
|
397
|
+
action(:preview) { |p| p.preview_button.click }
|
569
398
|
|
570
|
-
|
571
|
-
# instantiates the SubmissionConfirmation
|
572
|
-
# page class.
|
573
|
-
def submit
|
574
|
-
frm.button(:value=>"Submit").click
|
575
|
-
SubmissionConfirmation.new(@browser)
|
576
|
-
end
|
399
|
+
element(:instructor_comment_field) { |b| b.frm.form(:name=>"addSubmissionForm").div(:class=>"textPanel", :index=>1) }
|
577
400
|
|
578
|
-
|
579
|
-
|
580
|
-
|
581
|
-
def save_draft
|
582
|
-
frm.button(:value=>"Save Draft").click
|
583
|
-
SubmissionConfirmation.new(@browser)
|
584
|
-
end
|
585
|
-
|
586
|
-
# Returns the contents of the submission box.
|
587
|
-
def submission_text
|
588
|
-
frm.div(:class=>"portletBody").div(:class=>/textPanel/).text
|
589
|
-
end
|
401
|
+
value(:instructions) { |b| b.frm.div(:class=>"portletBody").div(:class=>"textPanel").text }
|
402
|
+
value(:submission_text) { |b| b.frm.form(:name=>"addSubmissionForm").div(:class=>"textPanel").text }
|
403
|
+
value(:instructor_comments) { |p| p.instructor_comment_field.text }
|
590
404
|
|
591
405
|
# Returns an array of strings. Each element in the
|
592
406
|
# array is the name of attached files.
|
593
407
|
def attachments
|
594
408
|
names = []
|
595
409
|
frm.ul(:class=>"attachList indnt1").links.each { |link| names << link.text }
|
596
|
-
|
410
|
+
names
|
597
411
|
end
|
598
412
|
|
599
413
|
end
|
@@ -605,22 +419,24 @@ class SubmissionConfirmation < BasePage
|
|
605
419
|
frame_element
|
606
420
|
|
607
421
|
# Returns the text of the success message on the page.
|
608
|
-
|
609
|
-
frm.div(:class=>"portletBody").div(:class=>"success").text
|
610
|
-
end
|
422
|
+
value(:confirmation_text) { |b| b.frm.div(:class=>"portletBody").div(:class=>"success").text }
|
611
423
|
|
612
424
|
# Returns the text of the assignment submission.
|
613
|
-
|
614
|
-
frm.div(:class=>"portletBody").div(:class=>"textPanel indnt2").text
|
615
|
-
end
|
425
|
+
value(:submission_text) { |b| b.frm.div(:class=>"portletBody").div(:class=>"textPanel indnt2").text }
|
616
426
|
|
617
427
|
# Clicks the Back to list button, then
|
618
428
|
# instantiates the AssignmentsList page class.
|
619
|
-
|
620
|
-
|
621
|
-
|
622
|
-
|
429
|
+
action(:back_to_list) { |b| b.frm.button(:value=>"Back to list").click }
|
430
|
+
|
431
|
+
def summary_info
|
432
|
+
hash={}
|
433
|
+
array = frm.table(:class=>"itemSummary").to_a
|
434
|
+
array.each do |subarray|
|
435
|
+
hash.store(subarray[0], subarray[1])
|
436
|
+
end
|
437
|
+
hash
|
623
438
|
end
|
439
|
+
|
624
440
|
end
|
625
441
|
|
626
442
|
# The page that appears when you click on an assignment's "Grade" or "View Submission" link
|
@@ -631,33 +447,18 @@ class AssignmentSubmissionList < AssignmentsBase
|
|
631
447
|
menu_elements
|
632
448
|
listview_elements
|
633
449
|
|
634
|
-
# Clicks the Assignment List link and instantiates the AssignmentsList Class.
|
635
|
-
def assignment_list
|
636
|
-
frm.link(:text=>"Assignment List").click
|
637
|
-
AssignmentsList.new(@browser)
|
638
|
-
end
|
639
450
|
# Clicks the Show Resubmission Settings button
|
640
|
-
|
641
|
-
frm.image(:src, "/library/image/sakai/expand.gif?panel=Main").click
|
642
|
-
end
|
451
|
+
action(:show_resubmission_settings) { |b| b.frm.image(:src, "/library/image/sakai/expand.gif?panel=Main").click }
|
643
452
|
|
644
453
|
# Clicks the Show Assignment Details button.
|
645
|
-
|
646
|
-
frm.image(:src, "/library/image/sakai/expand.gif").click
|
647
|
-
end
|
454
|
+
action(:show_assignment_details) { |b| b.frm.image(:src, "/library/image/sakai/expand.gif").click }
|
648
455
|
|
649
456
|
# Gets the Student table text and returns it in an Array object.
|
650
|
-
|
651
|
-
table = frm.table(:class=>"listHier lines nolines").to_a
|
652
|
-
end
|
457
|
+
value(:student_table) { |b| b.frm.table(:class=>"listHier lines nolines").to_a }
|
653
458
|
|
654
459
|
# Clicks the Grade link for the specified student, then
|
655
460
|
# instantiates the AssignmentSubmission page class.
|
656
|
-
|
657
|
-
frm.table(:class=>"listHier lines nolines").row(:text=>/#{Regexp.escape(student_name)}/).link(:text=>"Grade").click
|
658
|
-
frm.frame(:id, "grade_submission_feedback_comment___Frame").td(:id, "xEditingArea").frame(:index=>0).wait_until_present
|
659
|
-
AssignmentSubmission.new(@browser)
|
660
|
-
end
|
461
|
+
pgmd(:grade) { |student_name, b| b.frm.table(:class=>"listHier lines nolines").row(:text=>/#{Regexp.escape(student_name)}/).link(:text=>"Grade").click }
|
661
462
|
|
662
463
|
# Gets the value of the status field for the specified
|
663
464
|
# Student. Note that the student's name needs to be entered
|
@@ -666,9 +467,7 @@ class AssignmentSubmissionList < AssignmentsBase
|
|
666
467
|
# students with the same name.
|
667
468
|
#
|
668
469
|
# Useful for verification purposes.
|
669
|
-
|
670
|
-
frm.table(:class=>"listHier lines nolines").row(:text=>/#{Regexp.escape(student_name)}/)[4].text
|
671
|
-
end
|
470
|
+
pgmd(:submission_status_of) { |student_name, b| b.frm.table(:class=>"listHier lines nolines").row(:text=>/#{Regexp.escape(student_name)}/)[4].text }
|
672
471
|
|
673
472
|
element(:search_input) { |b| b.frm.text_field(:id=>"search") }
|
674
473
|
action(:find) { |b| b.frm.button(:value=>"Find").click }
|
@@ -701,40 +500,35 @@ class AssignmentSubmission < BasePage
|
|
701
500
|
include FCKEditor
|
702
501
|
frame_element
|
703
502
|
|
704
|
-
expected_element :
|
503
|
+
expected_element :assignment_submission
|
705
504
|
|
706
|
-
element(:
|
505
|
+
element(:assignment_submission) { |b| b.frm.frame(:id, "grade_submission_feedback_text___Frame") }
|
506
|
+
element(:instructor_comments) { |b| b.frm.frame(:id, "grade_submission_feedback_comment___Frame") }
|
707
507
|
|
708
508
|
# Enters the specified text string in the FCKEditor box for the assignment text.
|
709
509
|
def assignment_text=(text)
|
710
|
-
|
510
|
+
assignment_submission.td(:id, "xEditingArea").frame(:index=>0).send_keys(text)
|
711
511
|
end
|
712
512
|
|
713
513
|
# Removes all the contents of the FCKEditor Assignment Text box.
|
714
514
|
def remove_assignment_text
|
715
|
-
|
716
|
-
|
515
|
+
assignment_submission.div(:title=>"Select All").fire_event("onclick")
|
516
|
+
assignment_submission.td(:id, "xEditingArea").frame(:index=>0).send_keys :backspace
|
717
517
|
end
|
718
518
|
|
719
519
|
# Enters the specified string into the Instructor Comments FCKEditor box.
|
720
520
|
def instructor_comments=(text)
|
721
|
-
|
521
|
+
instructor_comments.td(:id, "xEditingArea").frame(:index=>0).send_keys(text)
|
722
522
|
end
|
723
523
|
|
724
524
|
# Clicks the Add Attachments button, then instantiates the AssignmentAttachments Class.
|
725
|
-
|
726
|
-
frm.button(:name=>"attach").click
|
727
|
-
AssignmentAttachments.new(@browser)
|
728
|
-
end
|
525
|
+
action(:add_attachments) { |b| b.frm.button(:name=>"attach").click }
|
729
526
|
|
730
527
|
# Clicks the Return to List button, then instantiates the
|
731
528
|
# AssignmentSubmissionList Class.
|
732
|
-
|
733
|
-
frm.button(:value=>"Return to List").click
|
734
|
-
AssignmentSubmissionList.new(@browser)
|
735
|
-
end
|
529
|
+
action(:return_to_list) { |b| b.frm.button(:value=>"Return to List").click }
|
736
530
|
|
737
|
-
element(:
|
531
|
+
element(:grade) { |b| b.frm.select(:name=>"grade_submission_grade") }
|
738
532
|
element(:allow_resubmission) { |b| b.frm.checkbox(:id=>"allowResToggle") }
|
739
533
|
element(:num_resubmissions) { |b| b.frm.select(:id=>"allowResubmitNumberSelect") }
|
740
534
|
element(:accept_until_month) { |b| b.frm.select(:id=>"allow_resubmit_closeMonth") }
|
@@ -753,18 +547,4 @@ class GradeReport < BasePage
|
|
753
547
|
|
754
548
|
frame_element
|
755
549
|
|
756
|
-
end
|
757
|
-
|
758
|
-
# The Student View page accessed from the Assignments page
|
759
|
-
class StudentView < AssignmentsBase
|
760
|
-
|
761
|
-
menu_elements
|
762
|
-
listview_elements
|
763
|
-
|
764
|
-
action(:sort_assignment_title) { |b| b.frm.link(:text=>"Assignment title").click }
|
765
|
-
action(:sort_status) { |b| b.frm.link(:text=>"Status").click }
|
766
|
-
action(:sort_open) { |b| b.frm.link(:text=>"Open").click }
|
767
|
-
action(:sort_due) { |b| b.frm.link(:text=>"Due").click }
|
768
|
-
action(:sort_scale) { |b| b.frm.link(:text=>"Scale").click }
|
769
|
-
|
770
|
-
end
|
550
|
+
end
|
@@ -228,8 +228,6 @@ class EventFrequency < CalendarBase
|
|
228
228
|
|
229
229
|
action(:save_frequency) { |b| b.frm.button(:value=>"Save Frequency").click }
|
230
230
|
|
231
|
-
action(:cancel) { |b| b.frm.button(:value=>"Cancel").click }
|
232
|
-
|
233
231
|
element(:event_frequency) { |b| b.frm.select(:id=>"frequencySelect") }
|
234
232
|
element(:interval) { |b| b.frm.select(:id=>"interval") }
|
235
233
|
element(:ends_after) { |b| b.frm.select(:name=>"count") }
|