sakai-cle-test-api 0.0.9 → 0.0.75

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 +2 -7
  2. data/lib/sakai-cle-test-api/admin_page_elements.rb +2 -6
  3. data/lib/sakai-cle-test-api/announcements.rb +7 -274
  4. data/lib/sakai-cle-test-api/assessments.rb +27 -930
  5. data/lib/sakai-cle-test-api/assignments.rb +13 -769
  6. data/lib/sakai-cle-test-api/basic_lti.rb +1 -5
  7. data/lib/sakai-cle-test-api/blogs.rb +2 -54
  8. data/lib/sakai-cle-test-api/calendar.rb +8 -423
  9. data/lib/sakai-cle-test-api/common_page_elements.rb +172 -69
  10. data/lib/sakai-cle-test-api/drop_box.rb +0 -21
  11. data/lib/sakai-cle-test-api/email_archive.rb +1 -15
  12. data/lib/sakai-cle-test-api/forums.rb +8 -282
  13. data/lib/sakai-cle-test-api/gradebook.rb +1 -19
  14. data/lib/sakai-cle-test-api/gradebook2.rb +1 -15
  15. data/lib/sakai-cle-test-api/messages.rb +15 -551
  16. data/lib/sakai-cle-test-api/news.rb +1 -3
  17. data/lib/sakai-cle-test-api/polls.rb +3 -65
  18. data/lib/sakai-cle-test-api/profile.rb +2 -36
  19. data/lib/sakai-cle-test-api/profile2.rb +6 -315
  20. data/lib/sakai-cle-test-api/sections.rb +8 -198
  21. data/lib/sakai-cle-test-api/site_page_elements.rb +441 -4
  22. data/lib/sakai-cle-test-api/syllabus.rb +7 -149
  23. data/lib/sakai-cle-test-api/tools_menu.rb +20 -3
  24. data/lib/sakai-cle-test-api/utilities.rb +0 -260
  25. data/sakai-cle-test-api.gemspec +3 -2
  26. metadata +19 -21
  27. data/lib/sakai-cle-test-api/add_files.rb +0 -198
  28. data/lib/sakai-cle-test-api/chat_room.rb +0 -0
  29. data/lib/sakai-cle-test-api/core-ext.rb +0 -90
  30. data/lib/sakai-cle-test-api/data_objects/announcement.rb +0 -38
  31. data/lib/sakai-cle-test-api/data_objects/assessment.rb +0 -32
  32. data/lib/sakai-cle-test-api/data_objects/assignment.rb +0 -62
  33. data/lib/sakai-cle-test-api/data_objects/event.rb +0 -86
  34. data/lib/sakai-cle-test-api/data_objects/lesson.rb +0 -137
  35. data/lib/sakai-cle-test-api/data_objects/resource.rb +0 -174
  36. data/lib/sakai-cle-test-api/data_objects/site.rb +0 -213
  37. data/lib/sakai-cle-test-api/data_objects/syllabus.rb +0 -7
  38. data/lib/sakai-cle-test-api/data_objects/topic.rb +0 -0
  39. data/lib/sakai-cle-test-api/data_objects/web_content_tool.rb +0 -52
  40. data/lib/sakai-cle-test-api/data_objects/wiki.rb +0 -7
  41. data/lib/sakai-cle-test-api/gem_ext.rb +0 -45
  42. data/lib/sakai-cle-test-api/lessons.rb +0 -440
  43. data/lib/sakai-cle-test-api/resources.rb +0 -138
  44. data/lib/sakai-cle-test-api/rich_text.rb +0 -13
@@ -1,15 +1,9 @@
1
1
  require 'cgi'
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'
2
+ require 'kuali-sakai-common-lib'
8
3
  require 'sakai-cle-test-api/utilities'
9
4
  require 'sakai-cle-test-api/tools_menu'
10
5
  require 'sakai-cle-test-api/admin_page_elements'
11
6
  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 }
13
7
 
14
8
  # Initialize this class at the start of your test cases to
15
9
  # open the specified test browser at the specified Sakai welcome page URL.
@@ -27,6 +21,7 @@ class SakaiCLE
27
21
  @browser = Watir::Browser.new web_browser
28
22
  @browser.window.resize_to(1400,900)
29
23
  @browser.goto url
24
+ $frame_index = 0 # TODO - Need to remove this and all dependent code.
30
25
  end
31
26
 
32
27
  # Returns the class containing the welcome page's page elements.
@@ -744,12 +744,7 @@ class EditUser
744
744
 
745
745
  include PageObject
746
746
  include ToolsMenu
747
-
748
- def update_details
749
- frm.button(:name=>"eventSubmit_doSave").click
750
- sleep 1
751
- end
752
-
747
+
753
748
  in_frame(:class=>"portletMainIframe") do |frame|
754
749
  link(:remove_user, :text=>"Remove User", :frame=>frame)
755
750
  text_field(:first_name, :id=>"first-name", :frame=>frame)
@@ -757,6 +752,7 @@ class EditUser
757
752
  text_field(:email, :id=>"email", :frame=>frame)
758
753
  text_field(:create_new_password, :id=>"pw", :frame=>frame)
759
754
  text_field(:verify_new_password, :id=>"pw0", :frame=>frame)
755
+ button(:update_details, :name=>"eventSubmit_doSave", :frame=>frame)
760
756
  button(:cancel_changes, :name=>"eventSubmit_doCancel", :frame=>frame)
761
757
  end
762
758
 
@@ -1,294 +1,27 @@
1
1
  # The Announcements list page for a Site.
2
2
  class Announcements
3
3
  include ToolsMenu
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
-
4
+ include AnnouncementsMethods
69
5
  end
70
6
 
71
7
  # Show Announcements from Another Site. On this page you select what announcements
72
8
  # you want to merge into the current Site.
73
9
  class AnnouncementsMerge
74
10
  include ToolsMenu
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
-
11
+ include AnnouncementsMergeMethods
88
12
  end
89
13
 
90
14
  # This Class does double-duty. It's for the Preview page when editing an
91
15
  # Announcement, plus for when you just click an Announcement to view it.
92
16
  class PreviewAnnouncements
93
17
  include ToolsMenu
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
-
18
+ include PreviewAnnouncementsMethods
113
19
  end
114
20
 
115
21
  # The page where an announcement is created or edited.
116
22
  class AddEditAnnouncements
117
23
  include ToolsMenu
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
-
24
+ include AddEditAnnouncementsMethods
292
25
  end
293
26
 
294
27
  # The page for attaching files and links to Announcements.
@@ -310,17 +43,17 @@ end
310
43
  # Page for merging announcements from other sites
311
44
  class AnnouncementsMerge
312
45
  include ToolsMenu
313
-
46
+ include AnnouncementsMergeMethods
314
47
  end
315
48
 
316
49
  # Page for setting up options for announcements
317
50
  class AnnouncementsOptions
318
51
  include ToolsMenu
319
-
52
+ include AnnouncementsOptionsMethods
320
53
  end
321
54
 
322
55
  # Page containing permissions options for announcements
323
56
  class AnnouncementsPermissions
324
57
  include ToolsMenu
325
-
58
+ include AnnouncementsPermissionsMethods
326
59
  end
@@ -3,125 +3,12 @@
3
3
  # Assessments pages - "Samigo", a.k.a., "Tests & Quizzes"
4
4
  #================
5
5
 
6
- # This is a module containing methods that are
7
- # common to all the question pages inside the
8
- # Assessment section of a Site.
9
- module QuestionHelpers
10
- include PageObject
11
- # Saves the question by clicking the Save button, then makes the determination
12
- # whether to instantiate the EditAssessment class, or the EditQuestionPool class.
13
- def save
14
-
15
- quiz = frm.div(:class=>"portletBody").div(:index=>0).text
16
- pool = frm.div(:class=>"portletBody").div(:index=>1).text
17
-
18
- frm.button(:value=>"Save").click
19
-
20
- if quiz =~ /^Assessments/
21
- EditAssessment.new(@browser)
22
- elsif pool =~ /^Question Pools/
23
- EditQuestionPool.new(@browser)
24
- else
25
- puts "Unexpected text: "
26
- p pool
27
- p quiz
28
- end
29
-
30
- end
31
-
32
- in_frame(:class=>"portletMainIframe") do |frame|
33
- link(:assessments, :text=>"Assessments", :frame=>frame)
34
- link(:assessment_types, :text=>"Assessment Types", :frame=>frame)
35
- link(:question_pools, :text=>"Question Pools", :frame=>frame)
36
- link(:questions, :text=>/Questions:/, :frame=>frame)
37
- end
38
-
39
- end
40
-
41
6
  # The Course Tools "Tests and Quizzes" page for a given site.
42
7
  # (Instructor view)
43
8
  class AssessmentsList
44
9
  include PageObject
45
10
  include ToolsMenu
46
-
47
- # This method reads the type of assessment selected for creation,
48
- # then clicks the Create button and instantiates the proper class.
49
- #
50
- # If the assessment is going to be made in the builder, then
51
- # EditAssessment is called. If from Markup text...
52
- def create
53
- builder_or_text = frm.radio(:value=>"1", :name=>"authorIndexForm:_id29").set?
54
-
55
- frm.button(:value=>"Create").click
56
-
57
- if builder_or_text == true
58
- EditAssessment.new(@browser)
59
- else
60
- # Need to add Markup page class, then add the reference here.
61
- end
62
-
63
- end
64
-
65
- # Clicks the Question Pools link, then instantiates
66
- # the QuestionPoolsList class.
67
- def question_pools
68
- frm.link(:text=>"Question Pools").click
69
- QuestionPoolsList.new(@browser)
70
- end
71
-
72
- # Collects the titles of the Assessments listed as "Pending"
73
- # then returns them as an Array.
74
- def pending_assessment_titles
75
- titles =[]
76
- pending_table = frm.table(:id=>"authorIndexForm:coreAssessments")
77
- 1.upto(pending_table.rows.size-1) do |x|
78
- titles << pending_table[x][1].span(:id=>/assessmentTitle/).text
79
- end
80
- return titles
81
- end
82
-
83
- # Collects the titles of the Assessments listed as "Published"
84
- # then returns them as an Array.
85
- def published_assessment_titles
86
- titles =[]
87
- published_table = frm.div(:class=>"tier2", :index=>2).table(:class=>"listHier", :index=>0)
88
- 1.upto(published_table.rows.size-1) do |x|
89
- titles << published_table[x][1].span(:id=>/publishedAssessmentTitle/).text
90
- end
91
- return titles
92
- end
93
-
94
- # Returns an Array of the inactive Assessment titles displayed
95
- # in the list.
96
- def inactive_assessment_titles
97
- titles =[]
98
- inactive_table = frm.div(:class=>"tier2", :index=>2).table(:id=>"authorIndexForm:inactivePublishedAssessments")
99
- 1.upto(inactive_table.rows.size-1) do |x|
100
- titles << inactive_table[x][1].span(:id=>/inactivePublishedAssessmentTitle/).text
101
- end
102
- return titles
103
- end
104
-
105
- # Opens the selected test for scoring
106
- # then instantiates the AssessmentTotalScores class.
107
- # @param test_title [String] the title of the test to be clicked.
108
- def score_test(test_title)
109
- frm.tbody(:id=>"authorIndexForm:_id88:tbody_element").row(:text=>/#{Regexp.escape(test_title)}/).link(:id=>/authorIndexToScore/).click
110
- AssessmentTotalScores.new(@browser)
111
- end
112
-
113
- in_frame(:class=>"portletMainIframe") do |frame|
114
- link(:assessment_types, :text=>"Assessment Types", :frame=>frame)
115
- text_field(:title, :id=>"authorIndexForm:title", :frame=>frame)
116
- radio_button(:create_using_builder) { |page| page.radio_button_element(:name=>"authorIndexForm:_id29", index=>0, :frame=>frame) }
117
- radio_button(:create_using_text) { |page| page.radio_button_element(:name=>"authorIndexForm:_id29", :index=>$frame_index, :frame=>frame) }
118
- select_list(:select_assessment_type, :id=>"authorIndexForm:assessmentTemplate", :frame=>frame)
119
- button(:import, :id=>"authorIndexForm:import", :frame=>frame)
120
- #(:, :=>"", :frame=>frame)
121
- #(:, :=>"", :frame=>frame)
122
-
123
- end
124
-
11
+ include AssessmentsListMethods
125
12
  end
126
13
 
127
14
  # Page that appears when previewing an assessment.
@@ -129,201 +16,21 @@ end
129
16
  class PreviewOverview
130
17
  include PageObject
131
18
  include ToolsMenu
132
-
133
- # Scrapes the value of the due date from the page. Returns it as a string.
134
- def due_date
135
- frm.div(:class=>"tier2").table(:index=>0)[0][0].text
136
- end
137
-
138
- # Scrapes the value of the time limit from the page. Returns it as a string.
139
- def time_limit
140
- frm.div(:class=>"tier2").table(:index=>0)[3][0].text
141
- end
142
-
143
- # Scrapes the submission limit from the page. Returns it as a string.
144
- def submission_limit
145
- frm.div(:class=>"tier2").table(:index=>0)[6][0].text
146
- end
147
-
148
- # Scrapes the Feedback policy from the page. Returns it as a string.
149
- def feedback
150
- frm.div(:class=>"tier2").table(:index=>0)[9][0].text
151
- end
152
-
153
- # Clicks the Done button, then instantiates
154
- # the EditAssessment class.
155
- def done
156
- frm.button(:name=>"takeAssessmentForm:_id5").click
157
- EditAssessment.new(@browser)
158
- end
159
-
160
- in_frame(:class=>"portletMainIframe") do |frame|
161
- button(:begin_assessment, :id=>"takeAssessmentForm:beginAssessment3", :frame=>frame)
162
-
163
- end
164
-
19
+ include PreviewOverviewMethods
165
20
  end
166
21
 
167
22
  # The Settings page for a particular Assessment
168
23
  class AssessmentSettings
169
24
  include PageObject
170
25
  include ToolsMenu
171
-
172
- # Scrapes the Assessment Type from the page and returns it as a string.
173
- def assessment_type_title
174
- frm.div(:class=>"tier2").table(:index=>0)[0][1].text
175
- end
176
-
177
- # Scrapes the Assessment Author information from the page and returns it as a string.
178
- def assessment_type_author
179
- frm.div(:class=>"tier2").table(:index=>0)[1][1].text
180
- end
181
-
182
- # Scrapes the Assessment Type Description from the page and returns it as a string.
183
- def assessment_type_description
184
- frm.div(:class=>"tier2").table(:index=>0)[2][1].text
185
- end
186
-
187
- # Clicks the Save Settings and Publish button
188
- # then instantiates the PublishAssessment class.
189
- def save_and_publish
190
- frm.button(:value=>"Save Settings and Publish").click
191
- PublishAssessment.new(@browser)
192
- end
193
-
194
- in_frame(:class=>"portletMainIframe") do |frame|
195
- link(:open, :text=>"Open", :frame=>frame)
196
- link(:close, :text=>"Close", :frame=>frame)
197
- text_field(:title, :id=>"assessmentSettingsAction:intro:assessment_title", :frame=>frame)
198
- text_field(:authors, :id=>"assessmentSettingsAction:intro:assessment_author", :frame=>frame)
199
- text_area(:description, :id=>"assessmentSettingsAction:intro:_id44_textinput", :frame=>frame)
200
- button(:add_attachments_to_intro, :name=>"assessmentSettingsAction:intro:_id90", :frame=>frame)
201
- text_field(:available_date, :id=>"assessmentSettingsAction:startDate", :frame=>frame)
202
- text_field(:due_date, :id=>"assessmentSettingsAction:endDate", :frame=>frame)
203
- text_field(:retract_date, :id=>"assessmentSettingsAction:retractDate", :frame=>frame)
204
- radio_button(:released_to_anonymous) { |page| page.radio_button_element( :name=>"assessmentSettingsAction:_id117", :index=>$frame_index, :frame=>frame) }
205
- radio_button(:released_to_site) { |page| page.radio_button_element( :name=>"assessmentSettingsAction:_id117", :index=>$frame_index, :frame=>frame) }
206
- text_area(:specified_ips, :name=>"assessmentSettingsAction:_id132", :frame=>frame)
207
- text_field(:secondary_id, :id=>"assessmentSettingsAction:username", :frame=>frame)
208
- text_field(:secondary_pw, :id=>"assessmentSettingsAction:password", :frame=>frame)
209
- checkbox(:timed_assessment, :id=>"assessmentSettingsAction:selTimeAssess", :frame=>frame)
210
- select_list(:limit_hour, :id=>"assessmentSettingsAction:timedHours", :frame=>frame)
211
- select_list(:limit_mins, :id=>"assessmentSettingsAction:timedMinutes", :frame=>frame)
212
- radio_button(:linear_access) { |page| page.radio_button_element( :name=>"assessmentSettingsAction:itemNavigation", :index=>$frame_index, :frame=>frame) }
213
- radio_button(:random_access) { |page| page.radio_button_element( :name=>"assessmentSettingsAction:itemNavigation", :index=>$frame_index, :frame=>frame) }
214
- radio_button(:question_per_page) { |page| page.radio_button_element( :name=>"assessmentSettingsAction:assessmentFormat", :index=>$frame_index, :frame=>frame) }
215
- radio_button(:part_per_page) { |page| page.radio_button_element( :name=>"assessmentSettingsAction:assessmentFormat", :index=>$frame_index, :frame=>frame) }
216
- radio_button(:assessment_per_page) { |page| page.radio_button_element( :name=>"assessmentSettingsAction:assessmentFormat", :index=>2, :frame=>frame) }
217
- radio_button(:continuous_numbering) { |page| page.radio_button_element( :name=>"assessmentSettingsAction:itemNumbering", :index=>$frame_index, :frame=>frame) }
218
- radio_button(:restart_per_part) { |page| page.radio_button_element( :name=>"assessmentSettingsAction:itemNumbering", :index=>$frame_index, :frame=>frame) }
219
- checkbox(:add_mark_for_review, :id=>"assessmentSettingsAction:markForReview1", :frame=>frame)
220
- radio_button(:unlimited_submissions) { |page| page.radio_button_element( :name=>"assessmentSettingsAction:unlimitedSubmissions", :index=>$frame_index, :frame=>frame) }
221
- radio_button(:only_x_submissions) { |page| page.radio_button_element( :name=>"assessmentSettingsAction:unlimitedSubmissions", :index=>$frame_index, :frame=>frame) }
222
- text_field(:allowed_submissions, :id=>"assessmentSettingsAction:submissions_Allowed", :frame=>frame)
223
- radio_button(:late_submissions_not_accepted) { |page| page.radio_button_element( :name=>"assessmentSettingsAction:lateHandling", :index=>$frame_index, :frame=>frame) }
224
- radio_button(:late_submissions_accepted) { |page| page.radio_button_element( :name=>"assessmentSettingsAction:lateHandling", :index=>$frame_index, :frame=>frame) }
225
- text_area(:submission_message, :id=>"assessmentSettingsAction:_id245_textinput", :frame=>frame)
226
- text_field(:final_page_url, :id=>"assessmentSettingsAction:finalPageUrl", :frame=>frame)
227
- radio_button(:question_level_feedback) { |page| page.radio_button_element( :name=>"assessmentSettingsAction:feedbackAuthoring", :index=>$frame_index, :frame=>frame) }
228
- radio_button(:selection_level_feedback) { |page| page.radio_button_element( :name=>"assessmentSettingsAction:feedbackAuthoring", :index=>$frame_index, :frame=>frame) }
229
- radio_button(:both_feedback_levels) { |page| page.radio_button_element( :name=>"assessmentSettingsAction:feedbackAuthoring", :index=>2, :frame=>frame) }
230
- radio_button(:immediate_feedback) { |page| page.radio_button_element( :name=>"assessmentSettingsAction:feedbackDelivery", :index=>$frame_index, :frame=>frame) }
231
- radio_button(:feedback_on_submission) { |page| page.radio_button_element( :name=>"assessmentSettingsAction:feedbackDelivery", :index=>$frame_index, :frame=>frame) }
232
- radio_button(:no_feedback) { |page| page.radio_button_element( :name=>"assessmentSettingsAction:feedbackDelivery", :index=>2, :frame=>frame) }
233
- radio_button(:feedback_on_date) { |page| page.radio_button_element( :name=>"assessmentSettingsAction:feedbackDelivery", :index=>3, :frame=>frame) }
234
- text_field(:feedback_date, :id=>"assessmentSettingsAction:feedbackDate", :frame=>frame)
235
- radio_button(:only_release_scores) { |page| page.radio_button_element( :name=>"assessmentSettingsAction:feedbackComponentOption", :index=>$frame_index, :frame=>frame) }
236
- radio_button(:release_questions_and) { |page| page.radio_button_element( :name=>"assessmentSettingsAction:feedbackComponentOption", :index=>$frame_index, :frame=>frame) }
237
- checkbox(:release_student_response, :id=>"assessmentSettingsAction:feedbackCheckbox1", :frame=>frame)
238
- checkbox(:release_correct_response, :id=>"assessmentSettingsAction:feedbackCheckbox3", :frame=>frame)
239
- checkbox(:release_students_assessment_scores, :id=>"assessmentSettingsAction:feedbackCheckbox5", :frame=>frame)
240
- checkbox(:release_students_question_and_part_scores, :id=>"assessmentSettingsAction:feedbackCheckbox7", :frame=>frame)
241
- checkbox(:release_question_level_feedback, :id=>"assessmentSettingsAction:feedbackCheckbox2", :frame=>frame)
242
- checkbox(:release_selection_level_feedback, :id=>"assessmentSettingsAction:feedbackCheckbox4", :frame=>frame)
243
- checkbox(:release_graders_comments, :id=>"assessmentSettingsAction:feedbackCheckbox6", :frame=>frame)
244
- checkbox(:release_statistics, :id=>"assessmentSettingsAction:feedbackCheckbox8", :frame=>frame)
245
- radio_button(:student_ids_seen) { |page| page.radio_button_element( :name=>"assessmentSettingsAction:anonymousGrading1", :index=>$frame_index, :frame=>frame) }
246
- radio_button(:anonymous_grading) { |page| page.radio_button_element( :name=>"assessmentSettingsAction:anonymousGrading1", :index=>$frame_index, :frame=>frame) }
247
- #radio_button(:no_gradebook_options) { |page| page.radio_button_element( :name=>"", :index=>$frame_index, :frame=>frame) }
248
- #radio_button(:grades_sent_to_gradebook) { |page| page.radio_button_element( :name=>"", :index=>$frame_index, :frame=>frame) }
249
- #radio_button(:record_highest_score) { |page| page.radio_button_element( :name=>"", :index=>$frame_index, :frame=>frame) }
250
- #radio_button(:record_last_score) { |page| page.radio_button_element( :name=>"", :index=>$frame_index, :frame=>frame) }
251
- #radio_button(:background_color) { |page| page.radio_button_element( :name=>"", :index=>$frame_index, :frame=>frame) }
252
- #text_field(:color_value, :id=>"", :frame=>frame)
253
- #radio_button(:background_image) { |page| page.radio_button_element( :name=>"", :index=>$frame_index, :frame=>frame) }
254
- #text_field(:image_name, :=>"", :frame=>frame)
255
- #text_field(:keywords, :=>"", :frame=>frame)
256
- #text_field(:objectives, :=>"", :frame=>frame)
257
- #text_field(:rubrics, :=>"", :frame=>frame)
258
- #checkbox(:record_metadata_for_questions, :=>"", :frame=>frame)
259
- button(:save, :name=>"assessmentSettingsAction:_id383", :frame=>frame)
260
- button(:cancel, :name=>"assessmentSettingsAction:_id385", :frame=>frame)
261
-
262
- end
263
-
26
+ include AssessmentSettingsMethods
264
27
  end
265
28
 
266
29
  # Instructor's view of Students' assessment scores
267
30
  class AssessmentTotalScores
268
31
  include PageObject
269
32
  include ToolsMenu
270
-
271
- # Gets the user ids listed in the
272
- # scores table, returns them as an Array
273
- # object.
274
- #
275
- # Note that this method is only appropriate when student
276
- # identities are not being obscured on this page. If student
277
- # submissions are set to be anonymous then this method will fail
278
- # to return any ids.
279
- def student_ids
280
- ids = []
281
- scores_table = frm.table(:id=>"editTotalResults:totalScoreTable").to_a
282
- scores_table.delete_at(0)
283
- scores_table.each { |row| ids << row[1] }
284
- return ids
285
- end
286
-
287
- # Adds a comment to the specified student's comment box.
288
- #
289
- # Note that this method assumes that the student identities are not being
290
- # obscured on this page. If they are, then this method will not work for
291
- # selecting the appropriate comment box.
292
- # @param student_id [String] the target student id
293
- # @param comment [String] the text of the comment being made to the student
294
- def comment_for_student(student_id, comment)
295
- index_val = student_ids.index(student_id)
296
- frm.text_field(:name=>"editTotalResults:totalScoreTable:#{index_val}:_id345").value=comment
297
- end
298
-
299
- # Clicks the Submit Date link in the table header to sort/reverse sort the list.
300
- def sort_by_submit_date
301
- frm.link(:text=>"Submit Date").click
302
- end
303
-
304
- # Enters the specified string into the topmost box listed on the page.
305
- #
306
- # This method is especially useful when the student identities are obscured, since
307
- # in that situation you can't target a specific student's comment box, obviously.
308
- # @param comment [String] the text to be entered into the Comment box
309
- def comment_in_first_box=(comment)
310
- frm.text_field(:name=>"editTotalResults:totalScoreTable:0:_id345").value=comment
311
- end
312
-
313
- # Clicks the Update button, then instantiates
314
- # the AssessmentTotalScores class.
315
- def update
316
- frm.button(:value=>"Update").click
317
- AssessmentTotalScores.new(@browser)
318
- end
319
-
320
- # Clicks the Assessments link on the page
321
- # then instantiates the AssessmentsList class.
322
- def assessments
323
- frm.link(:text=>"Assessments").click
324
- AssessmentsList.new(@browser)
325
- end
326
-
33
+ include AssessmentTotalScoresMethods
327
34
  end
328
35
 
329
36
  # The page that appears when you're creating a new quiz
@@ -331,176 +38,14 @@ end
331
38
  class EditAssessment
332
39
  include PageObject
333
40
  include ToolsMenu
334
-
335
- # Allows insertion of a question at a specified
336
- # point in the Assessment. Must include the
337
- # part number, the question number, and the type of
338
- # question. Question Type must match the Type
339
- # value in the drop down.
340
- #
341
- # The method will instantiate the page class
342
- # based on the selected question type.
343
- def insert_question_after(part_num, question_num, qtype)
344
- if question_num.to_i == 0
345
- frm.select(:id=>"assesssmentForm:parts:#{part_num.to_i - 1}:changeQType").select(qtype)
346
- else
347
- frm.select(:id=>"assesssmentForm:parts:#{part_num.to_i - 1}:parts:#{question_num.to_i - 1}:changeQType").select(qtype)
348
- end
349
-
350
- page = case(qtype)
351
- when "Multiple Choice" then MultipleChoice.new(@browser)
352
- when "True False" then TrueFalse.new(@browser)
353
- when "Survey" then Survey.new(@browser)
354
- when "Short Answer/Essay" then ShortAnswer.new(@browser)
355
- when "Fill in the Blank" then FillInBlank.new(@browser)
356
- when "Numeric Response" then NumericResponse.new(@browser)
357
- when "Matching" then Matching.new(@browser)
358
- when "Audio Recording" then AudioRecording.new(@browser)
359
- when "File Upload" then FileUpload.new(@browser)
360
- else puts "#{qtype} is not a valid question type"
361
- end
362
-
363
- return page
364
-
365
- end
366
-
367
- # Allows removal of question by part number and question number.
368
- # @param part_num [String] the Part number containing the question you want to remove
369
- # @param question_num [String] the number of the question you want to remove
370
- def remove_question(part_num, question_num)
371
- frm.link(:id=>"assesssmentForm:parts:#{part_num.to_i-1}:parts:#{question_num.to_i-1}:deleteitem").click
372
- end
373
-
374
- # Allows editing of a question by specifying its part number
375
- # and question number.
376
- # @param part_num [String] the Part number containing the question you want
377
- # @param question_num [String] the number of the question you want
378
- def edit_question(part_num, question_num)
379
- frm.link(:id=>"assesssmentForm:parts:#{part_num.to_i-1}:parts:#{question_num.to_i-1}:modify").click
380
- end
381
-
382
- # Allows copying an Assessment part to a Pool.
383
- # @param part_num [String] the part number of the assessment you want
384
- def copy_part_to_pool(part_num)
385
- frm.link(:id=>"assesssmentForm:parts:#{part_num.to_i-1}:copyToPool").click
386
- end
387
-
388
- # Allows removing a specified
389
- # Assessment part number.
390
- # @param part_num [String] the part number of the assessment you want
391
- def remove_part(part_num)
392
- frm.link(:xpath, "//a[contains(@onclick, 'assesssmentForm:parts:#{part_num.to_i-1}:copyToPool')]").click
393
- end
394
-
395
- # Clicks the Add Part button, then
396
- # instantiates the AddEditAssessmentPart page class.
397
- def add_part
398
- frm.link(:text=>"Add Part").click
399
- AddEditAssessmentPart.new(@browser)
400
- end
401
-
402
- # Selects the desired question type from the
403
- # drop down list, then instantiates the appropriate
404
- # page class.
405
- # @param qtype [String] the text of the item you want to select from the list
406
- def select_question_type(qtype)
407
- frm.select(:id=>"assesssmentForm:changeQType").select(qtype)
408
-
409
- page = case(qtype)
410
- when "Multiple Choice" then MultipleChoice.new(@browser)
411
- when "True False" then TrueFalse.new(@browser)
412
- when "Survey" then Survey.new(@browser)
413
- when "Short Answer/Essay" then ShortAnswer.new(@browser)
414
- when "Fill in the Blank" then FillInBlank.new(@browser)
415
- when "Numeric Response" then NumericResponse.new(@browser)
416
- when "Matching" then Matching.new(@browser)
417
- when "Audio Recording" then AudioRecording.new(@browser)
418
- when "File Upload" then FileUpload.new(@browser)
419
- else puts "#{qtype} is not a valid question type"
420
- end
421
-
422
- return page
423
-
424
- end
425
-
426
- # Clicks the Preview button,
427
- # then instantiates the PreviewOverview page class.
428
- def preview
429
- frm.link(:text=>"Preview").click
430
- PreviewOverview.new(@browser)
431
- end
432
-
433
- # Clicks the Settings link, then
434
- # instantiates the AssessmentSettings page class.
435
- def settings
436
- frm.link(:text=>"Settings").click
437
- AssessmentSettings.new(@browser)
438
- end
439
-
440
- # Clicks the Publish button, then
441
- # instantiates the PublishAssessment page class.
442
- def publish
443
- frm.link(:text=>"Publish").click
444
- PublishAssessment.new(@browser)
445
- end
446
-
447
- # Clicks the Question Pools button, then
448
- # instantiates the QuestionPoolsList page class.
449
- def question_pools
450
- frm.link(:text=>"Question Pools").click
451
- QuestionPoolsList.new(@browser)
452
- end
453
-
454
- # Allows retrieval of a specified question's
455
- # text, by part and question number.
456
- # @param part_num [String] the Part number containing the question you want
457
- # @param question_num [String] the number of the question you want
458
- def get_question_text(part_number, question_number)
459
- frm.table(:id=>"assesssmentForm:parts:#{part_number.to_i-1}:parts").div(:class=>"tier3", :index=>question_number.to_i-1).text
460
- end
461
-
462
- in_frame(:class=>"portletMainIframe") do |frame|
463
- link(:assessments, :text=>"Assessments", :frame=>frame)
464
- link(:assessment_types, :text=>"Assessment Types", :frame=>frame)
465
- link(:print, :text=>"Print", :frame=>frame)
466
- button(:update_points, :id=>"assesssmentForm:pointsUpdate", :frame=>frame)
467
-
468
- end
469
-
41
+ include EditAssessmentMethods
470
42
  end
471
43
 
472
44
  # This is the page for adding and editing a part of an assessment
473
45
  class AddEditAssessmentPart
474
46
  include PageObject
475
47
  include ToolsMenu
476
-
477
- # Clicks the Save button, then instantiates
478
- # the EditAssessment page class.
479
- def save
480
- frm.button(:name=>"modifyPartForm:_id89").click
481
- EditAssessment.new(@browser)
482
- end
483
-
484
- in_frame(:class=>"portletMainIframe") do |frame|
485
- text_field(:title, :id=>"modifyPartForm:title", :frame=>frame)
486
- text_area(:information, :id=>"modifyPartForm:_id10_textinput", :frame=>frame)
487
- button(:add_attachments, :name=>"modifyPartForm:_id54", :frame=>frame)
488
- radio_button(:questions_one_by_one) { |page| page.radio_button_element(:index=>0, :name=>"modifyPartForm:_id60", :frame=>frame)}
489
- radio_button(:random_draw) { |page| page.radio_button_element(:index=>1, :name=>"modifyPartForm:_id60", :frame=>frame) }
490
- select_list(:pool_name, :id=>"modifyPartForm:assignToPool", :frame=>frame)
491
- text_field(:number_of_questions, :id=>"modifyPartForm:numSelected", :frame=>frame)
492
- text_field(:point_value_of_questions, :id=>"modifyPartForm:numPointsRandom", :frame=>frame)
493
- text_field(:negative_point_value, :id=>"modifyPartForm:numDiscountRandom", :frame=>frame)
494
- radio_button(:randomized_each_time) { |page| page.radio_button_element(:index=>0, :name=>"modifyPartForm:randomizationType", :frame=>frame) }
495
- radio_button(:randomized_once) { |page| page.radio_button_element(:index=>1, :name=>"modifyPartForm:randomizationType", :frame=>frame) }
496
- radio_button(:order_as_listed) { |page| page.radio_button_element(:index=>0, :name=>"modifyPartForm:_id81", :frame=>frame) }
497
- radio_button(:random_within_part) { |page| page.radio_button_element(:index=>1, :name=>"modifyPartForm:_id81", :frame=>frame) }
498
- text_field(:objective, :id=>"modifyPartForm:obj", :frame=>frame)
499
- text_field(:keyword, :id=>"modifyPartForm:keyword", :frame=>frame)
500
- text_field(:rubric, :id=>"modifyPartForm:rubric", :frame=>frame)
501
- button(:cancel, :name=>"modifyPartForm:_id90", :frame=>frame)
502
- end
503
-
48
+ include AddEditAssessmentPartMethods
504
49
  end
505
50
 
506
51
  # The review page once you've selected to Save and Publish
@@ -508,229 +53,63 @@ end
508
53
  class PublishAssessment
509
54
  include PageObject
510
55
  include ToolsMenu
511
-
512
- # Clicks the Publish button, then
513
- # instantiates the AssessmentsList page class.
514
- def publish
515
- frm.button(:value=>"Publish").click
516
- AssessmentsList.new(@browser)
517
- end
518
-
519
- in_frame(:class=>"portletMainIframe") do |frame|
520
- button(:cancel, :value=>"Cancel", :frame=>frame)
521
- button(:edit, :name=>"publishAssessmentForm:_id23", :frame=>frame)
522
- select_list(:notification, :id=>"publishAssessmentForm:number", :frame=>frame)
523
-
524
- end
525
-
56
+ include PublishAssessmentMethods
526
57
  end
527
58
 
528
59
  # The page for setting up a multiple choice question
529
60
  class MultipleChoice
530
61
  include PageObject
531
62
  include ToolsMenu
532
- include QuestionHelpers
533
-
534
- in_frame(:class=>"portletMainIframe") do |frame|
535
- button(:cancel, :value=>"Cancel", :frame=>frame)
536
- text_field(:answer_point_value, :id=>"itemForm:answerptr", :frame=>frame)
537
- link(:whats_this, :text=>"(What's This?)", :frame=>frame)
538
- radio_button(:single_correct) { |page| page.radio_button_element(:name=>"itemForm:chooseAnswerTypeForMC", :index=>0, :frame=>frame) }
539
- radio_button(:enable_negative_marking) { |page| page.radio_button_element(:name=>"itemForm:partialCreadit_NegativeMarking", :index=>0, :frame=>frame) }
540
-
541
- # Element present when negative marking selected:
542
- text_field(:negative_point_value, :id=>"itemForm:answerdsc", :frame=>frame)
543
-
544
- radio_button(:enable_partial_credit) { |page| page.radio_button_element(:name=>"itemForm:partialCreadit_NegativeMarking", :index=>1, :frame=>frame) }
545
- link(:reset_to_default, :text=>"Reset to Default Grading Logic", :frame=>frame)
546
- radio_button(:multi_single) {|page| page.radio_button_element(:name=>"itemForm:chooseAnswerTypeForMC", :index=>1, :frame=>frame) }
547
- radio_button(:multi_multi) {|page| page.radio_button_element(:name=>"itemForm:chooseAnswerTypeForMC", :index=>2, :frame=>frame) }
548
- text_area(:question_text, :id=>"itemForm:_id82_textinput", :frame=>frame)
549
- button(:add_attachments, :name=>"itemForm:_id126", :frame=>frame)
550
-
551
- text_area(:answer_a, :id=>"itemForm:mcchoices:0:_id140_textinput", :frame=>frame)
552
- link(:remove_a, :id=>"itemForm:mcchoices:0:removelinkSingle", :frame=>frame)
553
- text_area(:answer_b, :id=>"itemForm:mcchoices:1:_id140_textinput", :frame=>frame)
554
- link(:remove_b, :id=>"itemForm:mcchoices:1:removelinkSingle", :frame=>frame)
555
- text_area(:answer_c, :id=>"itemForm:mcchoices:2:_id140_textinput", :frame=>frame)
556
- link(:remove_c, :id=>"itemForm:mcchoices:2:removelinkSingle", :frame=>frame)
557
- text_area(:answer_d, :id=>"itemForm:mcchoices:3:_id140_textinput", :frame=>frame)
558
- link(:remove_d, :id=>"itemForm:mcchoices:3:removelinkSingle", :frame=>frame)
559
-
560
- # Radio buttons that appear when "single correct" is selected
561
- radio_button(:a_correct, :name=>"itemForm:mcchoices:0:mcradiobtn", :frame=>frame)
562
- radio_button(:b_correct, :name=>"itemForm:mcchoices:1:mcradiobtn", :frame=>frame)
563
- radio_button(:c_correct, :name=>"itemForm:mcchoices:2:mcradiobtn", :frame=>frame)
564
- radio_button(:d_correct, :name=>"itemForm:mcchoices:3:mcradiobtn", :frame=>frame)
565
-
566
- # % Value fields that appear when "single correct" and "partial credit" selected
567
- text_field(:a_value, :id=>"itemForm:mcchoices:0:partialCredit", :frame=>frame)
568
- text_field(:b_value, :id=>"itemForm:mcchoices:1:partialCredit", :frame=>frame)
569
- text_field(:c_value, :id=>"itemForm:mcchoices:2:partialCredit", :frame=>frame)
570
- text_field(:d_value, :id=>"itemForm:mcchoices:3:partialCredit", :frame=>frame)
571
-
572
- link(:reset_score_values, :text=>"Reset Score Values", :frame=>frame)
573
-
574
- # Checkboxes that appear when "multiple correct" is selected
575
- checkbox(:a_correct, :name=>"itemForm:mcchoices:0:mccheckboxes", :frame=>frame)
576
- checkbox(:b_correct, :name=>"itemForm:mcchoices:1:mccheckboxes", :frame=>frame)
577
- checkbox(:c_correct, :name=>"itemForm:mcchoices:2:mccheckboxes", :frame=>frame)
578
- checkbox(:d_correct, :name=>"itemForm:mcchoices:3:mccheckboxes", :frame=>frame)
579
-
580
- select_list(:insert_additional_answers, :id=>"itemForm:insertAdditionalAnswerSelectMenu", :frame=>frame)
581
- radio_button(:randomize_answers_yes) {|page| page.radio_button_element(:index=>0, :name=>"itemForm:_id162", :frame=>frame) }
582
- radio_button(:randomize_answers_no) {|page| page.radio_button_element(:index=>1, :name=>"itemForm:_id162", :frame=>frame) }
583
- radio_button(:require_rationale_yes) {|page| page.radio_button_element(:index=>0, :name=>"itemForm:_id166", :frame=>frame) }
584
- radio_button(:require_rationale_no) {|page| page.radio_button_element(:index=>1, :name=>"itemForm:_id166", :frame=>frame) }
585
- select_list(:assign_to_part, :id=>"itemForm:assignToPart", :frame=>frame)
586
- select_list(:assign_to_pool, :id=>"itemForm:assignToPool", :frame=>frame)
587
-
588
- end
589
-
63
+ include MultipleChoiceMethods
590
64
  end
591
65
 
592
66
  # The page for setting up a Survey question
593
67
  class Survey
594
68
  include PageObject
595
69
  include ToolsMenu
596
- include QuestionHelpers
597
-
598
- in_frame(:class=>"portletMainIframe") do |frame|
599
- button(:cancel, :id=>"itemForm:_id63", :frame=>frame)
600
- text_area(:question_text, :id=>"itemForm:_id69_textinput", :frame=>frame)
601
- button(:add_attachments, :id=>"itemForm:_id113", :frame=>frame)
602
- radio_button(:yes_no) { |page| page.radio_button_element(:index=>0, :name=>"itemForm:selectscale", :frame=>frame) }
603
- radio_button(:disagree_agree) {|page| page.radio_button_element(:index=>1, :name=>"itemForm:selectscale", :frame=>frame) }
604
- radio_button(:disagree_undecided) {|page| page.radio_button_element(:index=>2, :name=>"itemForm:selectscale", :frame=>frame) }
605
- radio_button(:below_above) {|page| page.radio_button_element(:index=>3, :name=>"itemForm:selectscale", :frame=>frame)}
606
- radio_button(:strongly_agree) {|page| page.radio_button_element(:index=>4, :name=>"itemForm:selectscale", :frame=>frame)}
607
- radio_button(:unacceptable_excellent) {|page| page.radio_button_element(:index=>5, :name=>"itemForm:selectscale", :frame=>frame)}
608
- radio_button(:one_to_five) {|page| page.radio_button_element(:index=>6, :name=>"itemForm:selectscale", :frame=>frame)}
609
- radio_button(:one_to_ten) {|page| page.radio_button_element(:index=>7, :name=>"itemForm:selectscale", :frame=>frame)}
610
- select_list(:assign_to_part, :id=>"itemForm:assignToPart", :frame=>frame)
611
- select_list(:assign_to_pool, :id=>"itemForm:assignToPool", :frame=>frame)
612
- end
613
-
70
+ include SurveyMethods
614
71
  end
615
72
 
616
73
  # The page for setting up a Short Answer/Essay question
617
74
  class ShortAnswer
618
75
  include PageObject
619
76
  include ToolsMenu
620
- include QuestionHelpers
621
-
622
- in_frame(:class=>"portletMainIframe") do |frame|
623
- button(:cancel, :id=>"itemForm:_id63", :frame=>frame)
624
- text_field(:answer_point_value, :id=>"itemForm:answerptr", :frame=>frame)
625
- text_area(:question_text, :id=>"itemForm:_id69_textinput", :frame=>frame)
626
- button(:add_attachments, :id=>"itemForm:_id113", :frame=>frame)
627
- text_area(:model_short_answer, :id=>"itemForm:_id129_textinput", :frame=>frame)
628
- select_list(:assign_to_part, :id=>"itemForm:assignToPart", :frame=>frame)
629
- select_list(:assign_to_pool, :id=>"itemForm:assignToPool", :frame=>frame)
630
- end
631
-
77
+ include ShortAnswerMethods
632
78
  end
633
79
 
634
80
  # The page for setting up a Fill-in-the-blank question
635
81
  class FillInBlank
636
82
  include PageObject
637
83
  include ToolsMenu
638
- include QuestionHelpers
639
-
640
- in_frame(:class=>"portletMainIframe") do |frame|
641
- button(:cancel, :id=>"itemForm:_id63", :frame=>frame)
642
- text_field(:answer_point_value, :id=>"itemForm:answerptr", :frame=>frame)
643
- text_area(:question_text, :id=>"itemForm:_id75_textinput", :frame=>frame)
644
- checkbox(:case_sensitive, :name=>"itemForm:_id76", :frame=>frame)
645
- checkbox(:mutually_exclusive, :name=>"itemForm:_id78", :frame=>frame)
646
- button(:add_attachments, :id=>"itemForm:_id126", :frame=>frame)
647
- select_list(:assign_to_part, :id=>"itemForm:assignToPart", :frame=>frame)
648
- select_list(:assign_to_pool, :id=>"itemForm:assignToPool", :frame=>frame)
649
-
650
- end
651
-
84
+ include FillInBlankMethods
652
85
  end
653
86
 
654
87
  # The page for setting up a numeric response question
655
88
  class NumericResponse
656
89
  include PageObject
657
90
  include ToolsMenu
658
- include QuestionHelpers
659
-
660
- in_frame(:class=>"portletMainIframe") do |frame|
661
- button(:cancel, :id=>"itemForm:_id63", :frame=>frame)
662
- text_field(:answer_point_value, :id=>"itemForm:answerptr", :frame=>frame)
663
- text_area(:question_text, :id=>"itemForm:_id73_textinput", :frame=>frame)
664
- button(:add_attachments, :id=>"itemForm:_id117", :frame=>frame)
665
- select_list(:assign_to_part, :id=>"itemForm:assignToPart", :frame=>frame)
666
- select_list(:assign_to_pool, :id=>"itemForm:assignToPool", :frame=>frame)
667
-
668
- end
669
-
91
+ include NumericResponseMethods
670
92
  end
671
93
 
672
94
  # The page for setting up a matching question
673
95
  class Matching
674
96
  include PageObject
675
97
  include ToolsMenu
676
- include QuestionHelpers
677
-
678
- in_frame(:class=>"portletMainIframe") do |frame|
679
- button(:cancel, :id=>"itemForm:_id63", :frame=>frame)
680
- text_field(:answer_point_value, :id=>"itemForm:answerptr", :frame=>frame)
681
- text_area(:question_text, :id=>"itemForm:_id78_textinput", :frame=>frame)
682
- button(:add_attachments, :id=>"itemForm:_id122", :frame=>frame)
683
- text_area(:choice, :id=>"itemForm:_id147_textinput", :frame=>frame)
684
- text_area(:match, :id=>"itemForm:_id151_textinput", :frame=>frame)
685
- button(:save_pairing, :name=>"itemForm:_id164", :frame=>frame)
686
- select_list(:assign_to_part, :id=>"itemForm:assignToPart", :frame=>frame)
687
- select_list(:assign_to_pool, :id=>"itemForm:assignToPool", :frame=>frame)
688
-
689
- end
690
-
98
+ include MatchingMethods
691
99
  end
692
100
 
693
101
  # The page for setting up a True/False question
694
102
  class TrueFalse
695
103
  include PageObject
696
104
  include ToolsMenu
697
- include QuestionHelpers
698
-
699
- in_frame(:class=>"portletMainIframe") do |frame|
700
- button(:cancel, :id=>"itemForm:_id63", :frame=>frame)
701
- text_field(:answer_point_value, :id=>"itemForm:answerptr", :frame=>frame)
702
- text_area(:question_text, :id=>"itemForm:_id77_textinput", :frame=>frame)
703
- button(:add_attachments, :id=>"itemForm:_id121", :frame=>frame)
704
- text_field(:negative_point_value, :id=>"itemForm:answerdsc", :frame=>frame)
705
- radio_button(:answer_true) {|page| page.radio_button_element(:index=>0, :name=>"itemForm:TF", :frame=>frame)}
706
- radio_button(:answer_false) {|page| page.radio_button_element(:index=>1, :name=>"itemForm:TF", :frame=>frame)}
707
- radio_button(:required_rationale_yes) {|page| page.radio_button_element(:index=>0, :name=>"itemForm:rational", :frame=>frame)}
708
- radio_button(:required_rationale_no) {|page| page.radio_button_element(:index=>1, :name=>"itemForm:rational", :frame=>frame)}
709
- select_list(:assign_to_part, :id=>"itemForm:assignToPart", :frame=>frame)
710
- select_list(:assign_to_pool, :id=>"itemForm:assignToPool", :frame=>frame)
711
-
712
- end
713
-
105
+ include TrueFalseMethods
714
106
  end
715
107
 
716
108
  # The page for setting up a question that requires an audio response
717
109
  class AudioRecording
718
110
  include PageObject
719
111
  include ToolsMenu
720
- include QuestionHelpers
721
-
722
- in_frame(:class=>"portletMainIframe") do |frame|
723
- button(:cancel, :id=>"itemForm:_id63", :frame=>frame)
724
- text_field(:answer_point_value, :id=>"itemForm:answerptr", :frame=>frame)
725
- text_area(:question_text, :id=>"itemForm:_id69_textinput", :frame=>frame)
726
- button(:add_attachments, :id=>"itemForm:_id113", :frame=>frame)
727
- text_field(:time_allowed, :id=>"itemForm:timeallowed", :frame=>frame)
728
- select_list(:number_of_attempts, :id=>"itemForm:noattempts", :frame=>frame)
729
- select_list(:assign_to_part, :id=>"itemForm:assignToPart", :frame=>frame)
730
- select_list(:assign_to_pool, :id=>"itemForm:assignToPool", :frame=>frame)
731
-
732
- end
733
-
112
+ include AudioRecordingMethods
734
113
  end
735
114
 
736
115
  # The page for setting up a question that requires
@@ -738,140 +117,35 @@ end
738
117
  class FileUpload
739
118
  include PageObject
740
119
  include ToolsMenu
741
- include QuestionHelpers
742
-
743
- in_frame(:class=>"portletMainIframe") do |frame|
744
- button(:cancel, :id=>"itemForm:_id63", :frame=>frame)
745
- text_field(:answer_point_value, :id=>"itemForm:answerptr", :frame=>frame)
746
- text_area(:question_text, :id=>"itemForm:_id69_textinput", :frame=>frame)
747
- button(:add_attachments, :id=>"itemForm:_id113", :frame=>frame)
748
- select_list(:assign_to_part, :id=>"itemForm:assignToPart", :frame=>frame)
749
- select_list(:assign_to_pool, :id=>"itemForm:assignToPool", :frame=>frame)
750
-
751
- end
752
-
120
+ include FileUploadMethods
753
121
  end
754
122
 
755
123
  # The page that appears when you are editing a type of assessment
756
124
  class EditAssessmentType
757
125
  include PageObject
758
126
  include ToolsMenu
759
-
127
+ include EditAssessmentTypeMethods
760
128
  end
761
129
 
762
130
  # The Page that appears when adding a new question pool
763
131
  class AddQuestionPool
764
132
  include PageObject
765
133
  include ToolsMenu
766
- # Clicks the Save button, then
767
- # instantiates the QuestionPoolsList page class.
768
- def save
769
- #10.times {frm.button(:id=>"questionpool:submit").flash}
770
- frm.button(:id=>"questionpool:submit").click
771
- #sleep 180
772
- #frm.button(:value=>"Create").wait_until_present(120)
773
- QuestionPoolsList.new(@browser)
774
- end
775
-
776
- def cancel
777
- frm.button(:value=>"Cancel").click
778
- QuestionPoolsList.new @browser
779
- end
780
-
781
- in_frame(:class=>"portletMainIframe") do |frame|
782
- text_field(:pool_name, :id=>"questionpool:namefield", :frame=>frame)
783
- text_field(:department_group, :id=>"questionpool:orgfield", :frame=>frame)
784
- text_area(:description, :id=>"questionpool:descfield", :frame=>frame)
785
- text_field(:objectives, :id=>"questionpool:objfield", :frame=>frame)
786
- text_field(:keywords, :id=>"questionpool:keyfield", :frame=>frame)
787
-
788
- end
134
+ include AddQuestionPoolMethods
789
135
  end
790
136
 
791
137
  # The Page that appears when editing an existing question pool
792
138
  class EditQuestionPool
793
139
  include PageObject
794
140
  include ToolsMenu
795
- # Clicks the Add Question link, then
796
- # instantiates the SelectQuestionType class.
797
- def add_question
798
- frm.link(:id=>"editform:addQlink").click
799
- SelectQuestionType.new(@browser)
800
- end
801
-
802
- # Clicks the Question Pools link, then
803
- # instantiates the QuestionPoolsList class.
804
- def question_pools
805
- frm.link(:text=>"Question Pools").click
806
- QuestionPoolsList.new(@browser)
807
- end
808
-
809
- in_frame(:class=>"portletMainIframe") do |frame|
810
- text_field(:pool_name, :id=>"editform:namefield", :frame=>frame)
811
- text_field(:department_group, :id=>"editform:orgfield", :frame=>frame)
812
- text_area(:description, :id=>"editform:descfield", :frame=>frame)
813
- text_field(:objectives, :id=>"editform:objfield", :frame=>frame)
814
- text_field(:keywords, :id=>"editform:keyfield", :frame=>frame)
815
- button(:update, :id=>"editform:Update", :frame=>frame)
816
- button(:save, :id=>"questionpool:submit", :frame=>frame)
817
- button(:cancel, :id=>"questionpool:_id11", :frame=>frame)
818
-
819
- end
141
+ include EditQuestionPoolMethods
820
142
  end
821
143
 
822
144
  # The page with the list of existing Question Pools
823
145
  class QuestionPoolsList
824
146
  include PageObject
825
147
  include ToolsMenu
826
- # Clicks the edit button, then instantiates
827
- # the EditQuestionPool page class.
828
- # @param name [String] the name of the pool you want to edit
829
- def edit_pool(name)
830
- frm.span(:text=>name).fire_event("onclick")
831
- EditQuestionPool.new(@browser)
832
- end
833
-
834
- # Clicks the Add New Pool link, then
835
- # instantiates the AddQuestionPool page class.
836
- def add_new_pool
837
- #puts "clicking add new pool..."
838
- #10.times {frm.link(:text=>"Add New Pool").flash}
839
- frm.link(:text=>"Add New Pool").click
840
- #puts "clicked..."
841
- #frm.text_field(:id=>"questionpool:namefield").wait_until_present(200)
842
- AddQuestionPool.new(@browser)
843
- end
844
-
845
- # Returns an array containing strings of the pool names listed
846
- # on the page.
847
- def pool_names
848
- names= []
849
- frm.table(:id=>"questionpool:TreeTable").rows.each do | row |
850
- if row.span(:id=>/questionpool.+poolnametext/).exist?
851
- names << row.span(:id=>/questionpool.+poolnametext/).text
852
- end
853
- end
854
- return names
855
- end
856
-
857
- # Clicks "Import" and then instantiates the
858
- # PoolImport page class.
859
- def import
860
- frm.link(:text=>"Import").click
861
- PoolImport.new(@browser)
862
- end
863
-
864
- # Clicks the Assessments link and then
865
- # instantiates the AssessmentsList page class.
866
- def assessments
867
- frm.link(:text=>"Assessments").click
868
- AssessmentsList.new(@browser)
869
- end
870
-
871
- in_frame(:class=>"portletMainIframe") do |frame|
872
- link(:assessment_types, :text=>"Assessment Types", :frame=>frame)
873
-
874
- end
148
+ include QuestionPoolsListMethods
875
149
  end
876
150
 
877
151
  # The page that appears when you click to import
@@ -879,57 +153,14 @@ end
879
153
  class PoolImport
880
154
  include PageObject
881
155
  include ToolsMenu
882
- # Enters the target file into the Choose File
883
- # file field. Including the file path separately is optional.
884
- # @param file_name [String] the name of the file you want to choose. Can include path info, if desired.
885
- # @param file_path [String] Optional. This is the path information for the file location.
886
- def choose_file(file_name, file_path="")
887
- frm.file_field(:name=>"importPoolForm:_id6.upload").set(file_path + file_name)
888
- end
889
-
890
- # Clicks the Import button, then
891
- # instantiates the QuestionPoolsList
892
- # page class.
893
- def import
894
- frm.button(:value=>"Import").click
895
- QuestionPoolsList.new(@browser)
896
- end
897
-
156
+ include PoolImportMethods
898
157
  end
899
158
 
900
159
  # This page appears when adding a question to a pool
901
160
  class SelectQuestionType
902
161
  include PageObject
903
162
  include ToolsMenu
904
- # Selects the specified question type from the
905
- # drop-down list, then instantiates the appropriate
906
- # page class, based on the question type selected.
907
- # @param qtype [String] the text of the question type you want to select from the drop down list.
908
- def select_question_type(qtype)
909
- frm.select(:id=>"_id1:selType").select(qtype)
910
- frm.button(:value=>"Save").click
911
-
912
- page = case(qtype)
913
- when "Multiple Choice" then MultipleChoice.new(@browser)
914
- when "True False" then TrueFalse.new(@browser)
915
- when "Survey" then Survey.new(@browser)
916
- when "Short Answer/Essay" then ShortAnswer.new(@browser)
917
- when "Fill in the Blank" then FillInBlank.new(@browser)
918
- when "Numeric Response" then NumericResponse.new(@browser)
919
- when "Matching" then Matching.new(@browser)
920
- when "Audio Recording" then AudioRecording.new(@browser)
921
- when "File Upload" then FileUpload.new(@browser)
922
- else puts "nothing selected"
923
- end
924
-
925
- return page
926
-
927
- end
928
-
929
- in_frame(:class=>"portletMainIframe") do |frame|
930
- button(:cancel, :value=>"Cancel", :frame=>frame)
931
-
932
- end
163
+ include SelectQuestionTypeMethods
933
164
  end
934
165
 
935
166
  # Page of Assessments accessible to a student user
@@ -939,159 +170,25 @@ end
939
170
  class TakeAssessmentList
940
171
  include PageObject
941
172
  include ToolsMenu
942
- # Returns an array containing the assessment names that appear on the page.
943
- def available_assessments
944
- # define this later
945
- end
946
-
947
- # Method to get the titles of assessments that
948
- # the student user has submitted. The titles are
949
- # returned in an Array object.
950
- def submitted_assessments
951
- table_array = @browser.frame(:index=>1).table(:id=>"selectIndexForm:reviewTable").to_a
952
- table_array.delete_at(0)
953
- titles = []
954
- table_array.each { |row|
955
- unless row[0] == ""
956
- titles << row[0]
957
- end
958
- }
959
-
960
- return titles
961
-
962
- end
963
-
964
- # Clicks the specified assessment
965
- # then instantiates the BeginAssessment
966
- # page class.
967
- # @param name [String] the name of the assessment you want to take
968
- def take_assessment(name)
969
- begin
970
- frm.link(:text=>name).click
971
- rescue Watir::Exception::UnknownObjectException
972
- frm.link(:text=>CGI::escapeHTML(name)).click
973
- end
974
- BeginAssessment.new(@browser)
975
- end
976
-
977
- # TODO This method is in need of improvement to make it more generalized for finding the correct test.
978
- #
979
- def feedback(test_name)
980
- test_table = frm.table(:id=>"selectIndexForm:reviewTable").to_a
981
- test_table.delete_if { |row| row[3] != "Immediate" }
982
- index_value = test_table.index { |row| row[0] == test_name }
983
- frm.link(:text=>"Feedback", :index=>index_value).click
984
- # Need to add a call to a New class here, when it's written
985
- end
986
-
173
+ include TakeAssessmentListMethods
987
174
  end
988
175
 
989
176
  # The student view of the overview page of an Assessment
990
177
  class BeginAssessment
991
178
  include PageObject
992
179
  include ToolsMenu
993
- # Clicks the Begin Assessment button.
994
- def begin_assessment
995
- frm.button(:value=>"Begin Assessment").click
996
- end
997
-
998
- # Clicks the Cancel button and instantiates the X Class.
999
- def cancel
1000
- # Define this later
1001
- end
1002
-
1003
- # Selects the specified radio button answer
1004
- def multiple_choice_answer(letter)
1005
- index = case(letter.upcase)
1006
- when "A" then "0"
1007
- when "B" then "1"
1008
- when "C" then "2"
1009
- when "D" then "3"
1010
- when "E" then "4"
1011
- end
1012
- frm.radio(:name=>/takeAssessmentForm.+:deliverMultipleChoice.+:_id.+:#{index}/).click
1013
- end
1014
-
1015
- # Enters the answer into the specified blank number (1-based).
1016
- # @param answer [String]
1017
- def fill_in_blank_answer(answer, blank_number)
1018
- index = blank_number.to_i-1
1019
- frm.text_field(:name=>/deliverFillInTheBlank:_id.+:#{index}/).value=answer
1020
- end
1021
-
1022
- # Clicks either the True or the False radio button, as specified.
1023
- def true_false_answer(answer)
1024
- answer.upcase=~/t/i ? index = 0 : index = 1
1025
- frm.radio(:name=>/deliverTrueFalse/, :index=>index).set
1026
- end
1027
-
1028
- # Enters the specified string into the Rationale text box.
1029
- def true_false_rationale(text)
1030
- frm.text_field(:name=>/:deliverTrueFalse:rationale/).value=text
1031
- end
1032
-
1033
- # Enters the specified text into the "Short Answer" field.
1034
- def short_answer(answer)
1035
- frm.text_field(:name=>/deliverShortAnswer/).value=answer
1036
- end
1037
-
1038
- # Selects the specified matching value, at the spot specified by the number (1-based counting).
1039
- def match_answer(answer, number)
1040
- index = number.to_i-1
1041
- frm.select(:name=>/deliverMatching/, :index=>index).select(answer)
1042
- end
1043
-
1044
- # Enters the specified file name in the file field. You can include the path to the file
1045
- # as an optional second parameter.
1046
- def file_answer(file_name, file_path="")
1047
- frm.file_field(:name=>/deliverFileUpload/).set(file_path + file_name)
1048
- frm.button(:value=>"Upload").click
1049
- end
1050
-
1051
- # Clicks the Next button and instantiates the BeginAssessment Class.
1052
- def next
1053
- frm.button(:value=>"Next").click
1054
- BeginAssessment.new(@browser)
1055
- end
1056
-
1057
- # Clicks the Submit for Grading button and instantiates the ConfirmSubmission Class.
1058
- def submit_for_grading
1059
- frm.button(:value=>"Submit for Grading").click
1060
- ConfirmSubmission.new(@browser)
1061
- end
180
+ include BeginAssessmentMethods
1062
181
  end
1063
182
 
1064
183
  # The confirmation page that appears when submitting an Assessment.
1065
184
  # The last step before actually submitting the the Assessment.
1066
185
  class ConfirmSubmission
1067
186
  include ToolsMenu
1068
- include PageObject
1069
- # Clicks the Submit for Grading button and instantiates
1070
- # the SubmissionSummary Class.
1071
- def submit_for_grading
1072
- frm.button(:value=>"Submit for Grading").click
1073
- SubmissionSummary.new(@browser)
1074
- end
1075
-
1076
- in_frame(:class=>"portletMainIframe") do |frame|
1077
- span(:validation, :class=>"validation", :frame=>frame)
1078
-
1079
- end
187
+ include ConfirmSubmissionMethods
1080
188
  end
1081
189
 
1082
190
  # The summary page that appears when an Assessment has been submitted.
1083
191
  class SubmissionSummary
1084
192
  include ToolsMenu
1085
- include PageObject
1086
- # Clicks the Continue button and instantiates
1087
- # the TakeAssessmentList Class.
1088
- def continue
1089
- frm.button(:value=>"Continue").click
1090
- TakeAssessmentList.new(@browser)
1091
- end
1092
-
1093
- in_frame(:class=>"portletMainIframe") do |frame|
1094
- div(:summary_info, :class=>"tier1", :frame=>frame)
1095
-
1096
- end
1097
- end
193
+ include SubmissionSummaryMethods
194
+ end