sambal-cle 0.1.4 → 0.1.5
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/Gemfile +7 -0
- data/Gemfile.lock +44 -0
- data/lib/sambal-cle/data_objects/announcement.rb +7 -7
- data/lib/sambal-cle/data_objects/assessment.rb +26 -77
- data/lib/sambal-cle/data_objects/assessment_submission.rb +26 -0
- data/lib/sambal-cle/data_objects/assignment.rb +40 -40
- data/lib/sambal-cle/data_objects/assignment_permissions.rb +4 -4
- data/lib/sambal-cle/data_objects/assignment_submission.rb +4 -4
- data/lib/sambal-cle/data_objects/blog.rb +2 -2
- data/lib/sambal-cle/data_objects/blogger.rb +3 -3
- data/lib/sambal-cle/data_objects/chat_room.rb +2 -2
- data/lib/sambal-cle/data_objects/{site.rb → course.rb} +24 -20
- data/lib/sambal-cle/data_objects/event.rb +4 -4
- data/lib/sambal-cle/data_objects/forum.rb +21 -22
- data/lib/sambal-cle/data_objects/glossary_term.rb +71 -0
- data/lib/sambal-cle/data_objects/lesson.rb +10 -9
- data/lib/sambal-cle/data_objects/matrix.rb +142 -0
- data/lib/sambal-cle/data_objects/message.rb +2 -2
- data/lib/sambal-cle/data_objects/poll.rb +2 -2
- data/lib/sambal-cle/data_objects/portfolio.rb +120 -0
- data/lib/sambal-cle/data_objects/questions.rb +690 -0
- data/lib/sambal-cle/data_objects/resource.rb +12 -12
- data/lib/sambal-cle/data_objects/syllabus.rb +7 -7
- data/lib/sambal-cle/data_objects/web_content_tool.rb +2 -2
- data/lib/sambal-cle/data_objects/wiki.rb +6 -6
- data/lib/sambal-cle/page_objects/assessments.rb +165 -157
- data/lib/sambal-cle/page_objects/assignments.rb +17 -17
- data/lib/sambal-cle/page_objects/glossary.rb +14 -64
- data/lib/sambal-cle/page_objects/matrix.rb +77 -113
- data/lib/sambal-cle/page_objects/portfolios.rb +0 -2
- data/lib/sambal-cle/page_objects/resources.rb +4 -4
- data/lib/sambal-cle/page_objects/site_setup.rb +31 -23
- data/lib/sambal-cle/page_objects/sites.rb +2 -12
- data/lib/sambal-cle/utilities.rb +0 -6
- data/lib/sambal-cle/workflows.rb +77 -76
- data/lib/sambal-cle.rb +2 -2
- data/sambal-cle.gemspec +2 -2
- data/test/add_assignment_to_calendar_spec.rb +4 -4
- data/test/assessment_create_spec.rb +1 -1
- data/test/assessment_feedback_spec.rb +78 -0
- data/test/assessment_publish_spec.rb +102 -0
- data/test/assignment_announcements_spec.rb +4 -4
- data/test/assignment_duplicate_spec.rb +4 -4
- data/test/assignment_gradebook_spec.rb +4 -4
- data/test/assignment_permissions_spec.rb +5 -5
- data/test/assignments_grading_spec.rb +4 -4
- data/test/assignments_submission_spec.rb +4 -4
- data/test/duplicate_site_spec.rb +2 -2
- data/test/glossary_term_create_spec.rb +71 -0
- data/test/import_site_content_spec.rb +3 -3
- data/test/test_spec.rb +51 -0
- metadata +16 -5
@@ -19,8 +19,8 @@ class FileObject
|
|
19
19
|
end
|
20
20
|
|
21
21
|
def create
|
22
|
-
open_my_site_by_name @site
|
23
|
-
resources
|
22
|
+
open_my_site_by_name @site
|
23
|
+
resources
|
24
24
|
on Resources do |file|
|
25
25
|
file.upload_file_to_folder @target_folder
|
26
26
|
end
|
@@ -55,8 +55,8 @@ class FolderObject
|
|
55
55
|
end
|
56
56
|
|
57
57
|
def create
|
58
|
-
open_my_site_by_name @site
|
59
|
-
resources
|
58
|
+
open_my_site_by_name @site
|
59
|
+
resources
|
60
60
|
on_page Resources do |page|
|
61
61
|
page.create_subfolders_in @parent_folder
|
62
62
|
end
|
@@ -117,8 +117,8 @@ class HTMLPageObject
|
|
117
117
|
alias :content :html
|
118
118
|
|
119
119
|
def create
|
120
|
-
open_my_site_by_name @site
|
121
|
-
resources
|
120
|
+
open_my_site_by_name @site
|
121
|
+
resources
|
122
122
|
on_page Resources do |page|
|
123
123
|
page.create_html_page_in @folder
|
124
124
|
end
|
@@ -138,8 +138,8 @@ class HTMLPageObject
|
|
138
138
|
end
|
139
139
|
|
140
140
|
def edit_content(html_source)
|
141
|
-
open_my_site_by_name @site
|
142
|
-
resources
|
141
|
+
open_my_site_by_name @site
|
142
|
+
resources
|
143
143
|
on Resources do |fileslist|
|
144
144
|
fileslist.open_folder @folder unless fileslist.item(@name).present? || @folder==nil
|
145
145
|
fileslist.edit_content @name
|
@@ -170,8 +170,8 @@ class TextDocumentObject
|
|
170
170
|
end
|
171
171
|
|
172
172
|
def create
|
173
|
-
open_my_site_by_name @site
|
174
|
-
resources
|
173
|
+
open_my_site_by_name @site
|
174
|
+
resources
|
175
175
|
end
|
176
176
|
|
177
177
|
end
|
@@ -193,8 +193,8 @@ class CitationListObject
|
|
193
193
|
end
|
194
194
|
|
195
195
|
def create
|
196
|
-
open_my_site_by_name @site
|
197
|
-
resources
|
196
|
+
open_my_site_by_name @site
|
197
|
+
resources
|
198
198
|
end
|
199
199
|
|
200
200
|
end
|
@@ -22,8 +22,8 @@ class SyllabusObject
|
|
22
22
|
alias :name :title
|
23
23
|
|
24
24
|
def create
|
25
|
-
open_my_site_by_name @site
|
26
|
-
syllabus
|
25
|
+
open_my_site_by_name @site
|
26
|
+
syllabus
|
27
27
|
on Syllabus do |add|
|
28
28
|
add.create_edit
|
29
29
|
add.add
|
@@ -36,8 +36,8 @@ class SyllabusObject
|
|
36
36
|
end
|
37
37
|
|
38
38
|
def edit opts={}
|
39
|
-
open_my_site_by_name @site
|
40
|
-
syllabus
|
39
|
+
open_my_site_by_name @site
|
40
|
+
syllabus
|
41
41
|
on Syllabus do |syllabus|
|
42
42
|
reset
|
43
43
|
syllabus.create_edit
|
@@ -46,15 +46,15 @@ class SyllabusObject
|
|
46
46
|
edit.open_item @title
|
47
47
|
end
|
48
48
|
on AddEditSyllabusItem do |item|
|
49
|
-
item.title.
|
49
|
+
item.title.fit opts[:title]
|
50
50
|
item.enter_source_text(item.editor, opts[:content]) unless opts[:content]==nil
|
51
51
|
end
|
52
52
|
set_options(opts)
|
53
53
|
end
|
54
54
|
|
55
55
|
def get_properties
|
56
|
-
open_my_site_by_name @site
|
57
|
-
syllabus
|
56
|
+
open_my_site_by_name @site
|
57
|
+
syllabus
|
58
58
|
on Syllabus do |syllabus|
|
59
59
|
reset
|
60
60
|
syllabus.create_edit
|
@@ -23,8 +23,8 @@ class WikiObject
|
|
23
23
|
alias :name :title
|
24
24
|
|
25
25
|
def create
|
26
|
-
open_my_site_by_name @site
|
27
|
-
wiki
|
26
|
+
open_my_site_by_name @site
|
27
|
+
wiki
|
28
28
|
on Rwiki do |home|
|
29
29
|
home.edit
|
30
30
|
@current_content = home.content.value
|
@@ -40,8 +40,8 @@ class WikiObject
|
|
40
40
|
end
|
41
41
|
|
42
42
|
def edit opts={}
|
43
|
-
open_my_site_by_name @site
|
44
|
-
wiki
|
43
|
+
open_my_site_by_name @site
|
44
|
+
wiki
|
45
45
|
on Rwiki do |edit|
|
46
46
|
edit.open_wiki @title
|
47
47
|
edit.edit
|
@@ -51,8 +51,8 @@ class WikiObject
|
|
51
51
|
end
|
52
52
|
|
53
53
|
def get_content
|
54
|
-
open_my_site_by_name @site
|
55
|
-
wiki
|
54
|
+
open_my_site_by_name @site
|
55
|
+
wiki
|
56
56
|
on Rwiki do |edit|
|
57
57
|
edit.open_wiki @title
|
58
58
|
edit.edit
|
@@ -84,11 +84,11 @@ class AssessmentsList < AssessmentsBase
|
|
84
84
|
# Opens the selected test for scoring
|
85
85
|
# then instantiates the AssessmentTotalScores class.
|
86
86
|
# @param test_title [String] the title of the test to be clicked.
|
87
|
-
|
87
|
+
action(:score_test) { |test_title, b| b.frm.tbody(:id=>"authorIndexForm:_id88:tbody_element").row(:text=>/#{Regexp.escape(test_title)}/).link(:id=>/authorIndexToScore/).click }
|
88
88
|
|
89
|
-
|
89
|
+
action(:publish) { |test_title, b| b.pending_table.tr(:text=>/#{Regexp.escape(test_title)}/).select(:name=>/Select/).select "Publish" }
|
90
90
|
|
91
|
-
|
91
|
+
action(:edit) { |test_title, b| b.frm.form(:id=>"authorIndexForm").tr(:text=>/#{Regexp.escape(test_title)}/).select(:name=>/Select/).select "Edit" }
|
92
92
|
|
93
93
|
element(:title) { |b| b.frm.text_field(:id=>"authorIndexForm:title") }
|
94
94
|
element(:pending_table) { |b| b.frm.table(:id=>"authorIndexForm:coreAssessments") }
|
@@ -101,6 +101,62 @@ class AssessmentsList < AssessmentsBase
|
|
101
101
|
|
102
102
|
end
|
103
103
|
|
104
|
+
# Page of Assessments accessible to a student user
|
105
|
+
#
|
106
|
+
# It may be that we want to deprecate this class and simply use
|
107
|
+
# the AssessmentsList class alone.
|
108
|
+
class StudentAssessmentsList < AssessmentsBase
|
109
|
+
|
110
|
+
# Returns an array containing the assessment names that appear on the page.
|
111
|
+
def available_assessments
|
112
|
+
list = []
|
113
|
+
table = available_assessments_table.to_a
|
114
|
+
table.delete_at(0)
|
115
|
+
table.each { |row| list<<row[0].gsub(/\s+$/, "") unless row[0]=="" }
|
116
|
+
list
|
117
|
+
end
|
118
|
+
|
119
|
+
# Method to get the titles of assessments that
|
120
|
+
# the student user has submitted. The titles are
|
121
|
+
# returned in an Array object.
|
122
|
+
def submitted_assessments
|
123
|
+
table_array = @browser.frame(:index=>1).table(:id=>"selectIndexForm:reviewTable").to_a
|
124
|
+
table_array.delete_at(0)
|
125
|
+
titles = []
|
126
|
+
table_array.each { |row|
|
127
|
+
unless row[0] == ""
|
128
|
+
titles << row[0]
|
129
|
+
end
|
130
|
+
}
|
131
|
+
|
132
|
+
return titles
|
133
|
+
|
134
|
+
end
|
135
|
+
|
136
|
+
# Clicks the specified assessment
|
137
|
+
# @param name [String] the name of the assessment you want to take
|
138
|
+
def take_assessment(name)
|
139
|
+
begin
|
140
|
+
frm.link(:text=>name).click
|
141
|
+
rescue Watir::Exception::UnknownObjectException
|
142
|
+
frm.link(:text=>CGI::escapeHTML(name)).click
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
# TODO This method is in need of improvement to make it more generalized for finding the correct test.
|
147
|
+
#
|
148
|
+
def feedback(test_name)
|
149
|
+
test_table = submitted_assessments_table.to_a
|
150
|
+
test_table.delete_if { |row| row[3] != "Immediate" }
|
151
|
+
index_value = test_table.index { |row| row[0] == test_name }
|
152
|
+
frm.link(:text=>"Feedback", :index=>index_value).click
|
153
|
+
end
|
154
|
+
|
155
|
+
element(:available_assessments_table) { |b| b.frm.table(:id=>"selectIndexForm:selectTable") }
|
156
|
+
element(:submitted_assessments_table) { |b| b.frm.table(:id=>"selectIndexForm:reviewTable") }
|
157
|
+
|
158
|
+
end
|
159
|
+
|
104
160
|
# Page that appears when previewing an assessment.
|
105
161
|
# It shows the basic information about the assessment.
|
106
162
|
class PreviewOverview < BasePage
|
@@ -159,8 +215,8 @@ class AssessmentSettings < AssessmentsBase
|
|
159
215
|
element(:due_date) { |b| b.frm.text_field(:id=>"assessmentSettingsAction:endDate") }
|
160
216
|
element(:retract_date) { |b| b.frm.text_field(:id=>"assessmentSettingsAction:retractDate") }
|
161
217
|
# Assessment Released To
|
162
|
-
element(:released_to_anonymous) { |b| b.frm.radio(:
|
163
|
-
element(:released_to_site) { |b| b.frm.radio(:name=>"assessmentSettingsAction:_id117") }
|
218
|
+
element(:released_to_anonymous) { |b| b.frm.radio(:value=>"Anonymous Users") }
|
219
|
+
element(:released_to_site) { |b| b.frm.radio(:name=>"assessmentSettingsAction:_id117", :index=>1) }
|
164
220
|
element(:specified_ips) { |b| b.frm.text_field(:name=>"assessmentSettingsAction:_id132") }
|
165
221
|
# High Security
|
166
222
|
element(:secondary_id) { |b| b.frm.text_field(:id=>"assessmentSettingsAction:username") }
|
@@ -170,52 +226,55 @@ class AssessmentSettings < AssessmentsBase
|
|
170
226
|
element(:limit_hour) { |b| b.frm.select(:id=>"assessmentSettingsAction:timedHours") }
|
171
227
|
element(:limit_mins) { |b| b.frm.select(:id=>"assessmentSettingsAction:timedMinutes") }
|
172
228
|
# Assessment Organization
|
173
|
-
element(:linear_access) { |b| b.frm.radio(:name=>"assessmentSettingsAction:itemNavigation") }
|
174
|
-
element(:random_access) { |b| b.frm.radio(:name=>"assessmentSettingsAction:itemNavigation") }
|
175
|
-
element(:question_per_page) { |b| b.frm.radio(:name=>"assessmentSettingsAction:assessmentFormat") }
|
176
|
-
element(:part_per_page) { |b| b.frm.radio(:name=>"assessmentSettingsAction:assessmentFormat") }
|
177
|
-
element(:assessment_per_page) { |b| b.frm.radio(:name=>"assessmentSettingsAction:assessmentFormat") }
|
178
|
-
element(:continuous_numbering) { |b| b.frm.radio(:name=>"assessmentSettingsAction:itemNumbering") }
|
179
|
-
element(:restart_per_part) { |b| b.frm.radio(:name=>"assessmentSettingsAction:itemNumbering") }
|
229
|
+
element(:linear_access) { |b| b.frm.radio(:name=>"assessmentSettingsAction:itemNavigation", :value=>"1") }
|
230
|
+
element(:random_access) { |b| b.frm.radio(:name=>"assessmentSettingsAction:itemNavigation", :value=>"2") }
|
231
|
+
element(:question_per_page) { |b| b.frm.radio(:name=>"assessmentSettingsAction:assessmentFormat", :value=>"1") }
|
232
|
+
element(:part_per_page) { |b| b.frm.radio(:name=>"assessmentSettingsAction:assessmentFormat", :value=>"2") }
|
233
|
+
element(:assessment_per_page) { |b| b.frm.radio(:name=>"assessmentSettingsAction:assessmentFormat", :value=>"3") }
|
234
|
+
element(:continuous_numbering) { |b| b.frm.radio(:name=>"assessmentSettingsAction:itemNumbering", :value=>"1") }
|
235
|
+
element(:restart_per_part) { |b| b.frm.radio(:name=>"assessmentSettingsAction:itemNumbering", :value=>"2") }
|
180
236
|
# Mark for review
|
181
237
|
element(:add_mark_for_review) { |b| b.frm.text_field(:id=>"assessmentSettingsAction:markForReview1") }
|
182
|
-
element(:unlimited_submissions) { |b| b.frm.radio(:name=>"assessmentSettingsAction:unlimitedSubmissions") }
|
183
|
-
element(:only_x_submissions) { |b| b.frm.radio(:name=>"assessmentSettingsAction:unlimitedSubmissions") }
|
238
|
+
element(:unlimited_submissions) { |b| b.frm.radio(:name=>"assessmentSettingsAction:unlimitedSubmissions", :value=>"1") }
|
239
|
+
element(:only_x_submissions) { |b| b.frm.radio(:name=>"assessmentSettingsAction:unlimitedSubmissions", :value=>"0") }
|
184
240
|
element(:allowed_submissions) { |b| b.frm.text_field(:id=>"assessmentSettingsAction:submissions_Allowed") }
|
185
|
-
element(:late_submissions_not_accepted) { |b| b.frm.radio(:name=>"assessmentSettingsAction:lateHandling") }
|
186
|
-
element(:late_submissions_accepted) { |b| b.frm.radio(:name=>"assessmentSettingsAction:lateHandling") }
|
241
|
+
element(:late_submissions_not_accepted) { |b| b.frm.radio(:name=>"assessmentSettingsAction:lateHandling", :value=>"2") }
|
242
|
+
element(:late_submissions_accepted) { |b| b.frm.radio(:name=>"assessmentSettingsAction:lateHandling", :value=>"1") }
|
187
243
|
# Submission Message
|
188
244
|
element(:submission_message) { |b| b.frm.text_field(:id=>"assessmentSettingsAction:_id250_textinput") }
|
189
245
|
element(:final_page_url) { |b| b.frm.text_field(:id=>"assessmentSettingsAction:finalPageUrl") }
|
190
246
|
# Feedback
|
191
|
-
element(:question_level_feedback) { |b| b.frm.radio(:name=>"assessmentSettingsAction:feedbackAuthoring") }
|
192
|
-
element(:selection_level_feedback) { |b| b.frm.radio(:name=>"assessmentSettingsAction:feedbackAuthoring") }
|
193
|
-
element(:both_feedback_levels) { |b| b.frm.radio(:name=>"assessmentSettingsAction:feedbackAuthoring") }
|
194
|
-
element(:immediate_feedback) { |b| b.frm.radio(:name=>"assessmentSettingsAction:feedbackDelivery") }
|
195
|
-
element(:feedback_on_submission) { |b| b.frm.radio(:name=>"assessmentSettingsAction:feedbackDelivery") }
|
196
|
-
element(:no_feedback) { |b| b.frm.radio(:name=>"assessmentSettingsAction:feedbackDelivery") }
|
197
|
-
element(:feedback_on_date) { |b| b.frm.radio(:name=>"assessmentSettingsAction:feedbackDelivery") }
|
247
|
+
element(:question_level_feedback) { |b| b.frm.radio(:name=>"assessmentSettingsAction:feedbackAuthoring", :value=>"1") }
|
248
|
+
element(:selection_level_feedback) { |b| b.frm.radio(:name=>"assessmentSettingsAction:feedbackAuthoring", :value=>"2") }
|
249
|
+
element(:both_feedback_levels) { |b| b.frm.radio(:name=>"assessmentSettingsAction:feedbackAuthoring", :value=>"3") }
|
250
|
+
element(:immediate_feedback) { |b| b.frm.radio(:name=>"assessmentSettingsAction:feedbackDelivery", :value=>"1") }
|
251
|
+
element(:feedback_on_submission) { |b| b.frm.radio(:name=>"assessmentSettingsAction:feedbackDelivery", :value=>"4") }
|
252
|
+
element(:no_feedback) { |b| b.frm.radio(:name=>"assessmentSettingsAction:feedbackDelivery", :value=>"3") }
|
253
|
+
element(:feedback_on_date) { |b| b.frm.radio(:name=>"assessmentSettingsAction:feedbackDelivery", :value=>"2") }
|
198
254
|
element(:feedback_date) { |b| b.frm.text_field(:id=>"assessmentSettingsAction:feedbackDate") }
|
199
|
-
element(:only_release_scores) { |b| b.frm.radio(:name=>"assessmentSettingsAction:feedbackComponentOption") }
|
200
|
-
element(:release_questions_and) { |b| b.frm.radio(:name=>"assessmentSettingsAction:feedbackComponentOption") }
|
201
|
-
element(:release_student_response) { |b| b.frm.
|
202
|
-
element(:release_correct_response) { |b| b.frm.
|
203
|
-
element(:release_students_assessment_scores) { |b| b.frm.
|
204
|
-
element(:release_students_question_and_part_scores) { |b| b.frm.
|
205
|
-
element(:release_question_level_feedback) { |b| b.frm.
|
206
|
-
element(:release_selection_level_feedback) { |b| b.frm.
|
255
|
+
element(:only_release_scores) { |b| b.frm.radio(:name=>"assessmentSettingsAction:feedbackComponentOption", :value=>"1") }
|
256
|
+
element(:release_questions_and) { |b| b.frm.radio(:name=>"assessmentSettingsAction:feedbackComponentOption", :value=>"2") }
|
257
|
+
element(:release_student_response) { |b| b.frm.checkbox(:id=>"assessmentSettingsAction:feedbackCheckbox1") }
|
258
|
+
element(:release_correct_response) { |b| b.frm.checkbox(:id=>"assessmentSettingsAction:feedbackCheckbox3") }
|
259
|
+
element(:release_students_assessment_scores) { |b| b.frm.checkbox(:id=>"assessmentSettingsAction:feedbackCheckbox5") }
|
260
|
+
element(:release_students_question_and_part_scores) { |b| b.frm.checkbox(:id=>"assessmentSettingsAction:feedbackCheckbox7") }
|
261
|
+
element(:release_question_level_feedback) { |b| b.frm.checkbox(:id=>"assessmentSettingsAction:feedbackCheckbox2") }
|
262
|
+
element(:release_selection_level_feedback) { |b| b.frm.checkbox(:id=>"assessmentSettingsAction:feedbackCheckbox4") }
|
207
263
|
element(:release_graders_comments) { |b| b.frm.checkbox(:id=>"assessmentSettingsAction:feedbackCheckbox6") }
|
208
264
|
element(:release_statistics) { |b| b.frm.checkbox(:id=>"assessmentSettingsAction:feedbackCheckbox8") }
|
209
|
-
|
210
|
-
element(:
|
265
|
+
# Grading
|
266
|
+
element(:student_ids_seen) { |b| b.frm.radio(:name=>"assessmentSettingsAction:anonymousGrading1", :value=>"2") }
|
267
|
+
element(:anonymous_grading) { |b| b.frm.radio(:name=>"assessmentSettingsAction:anonymousGrading1", :value=>"1") }
|
211
268
|
#radio_button(:no_gradebook_options) { |b| b.frm.radio(:name=>"") }
|
212
269
|
#radio_button(:grades_sent_to_gradebook) { |b| b.frm.radio(:name=>"") }
|
270
|
+
# Graphics
|
213
271
|
#radio_button(:record_highest_score) { |b| b.frm.radio(:name=>"") }
|
214
272
|
#radio_button(:record_last_score) { |b| b.frm.radio(:name=>"") }
|
215
273
|
#radio_button(:background_color) { |b| b.frm.radio(:name=>"") }
|
216
274
|
#text_field(:color_value, :id=>"") }
|
217
275
|
#radio_button(:background_image) { |b| b.frm.radio(:name=>"") }
|
218
276
|
#text_field(:image_name, :=>"") }
|
277
|
+
# Metadata
|
219
278
|
#text_field(:keywords, :=>"") }
|
220
279
|
#text_field(:objectives, :=>"") }
|
221
280
|
#text_field(:rubrics, :=>"") }
|
@@ -254,7 +313,7 @@ class AssessmentTotalScores < BasePage
|
|
254
313
|
# selecting the appropriate comment box.
|
255
314
|
# @param student_id [String] the target student id
|
256
315
|
# @param comment [String] the text of the comment being made to the student
|
257
|
-
|
316
|
+
action(:comment_for_student) { |student_id, comment, b|
|
258
317
|
index_val = b.student_ids.index(student_id)
|
259
318
|
b.frm.text_field(:name=>"editTotalResults:totalScoreTable:#{index_val}:_id345").value=comment
|
260
319
|
}
|
@@ -281,7 +340,7 @@ class AssessmentTotalScores < BasePage
|
|
281
340
|
end
|
282
341
|
|
283
342
|
# Clicks the Assessments link on the page
|
284
|
-
# then instantiates the AssessmentsList class.
|
343
|
+
# then instantiates the AssessmentsList class. action(:
|
285
344
|
def assessments
|
286
345
|
frm.link(:text=>"Assessments").click
|
287
346
|
AssessmentsList.new(@browser)
|
@@ -332,7 +391,7 @@ class EditAssessment < AssessmentsBase
|
|
332
391
|
# Allows removing a specified
|
333
392
|
# Assessment part number.
|
334
393
|
# @param part_num [String] the part number of the assessment you want
|
335
|
-
|
394
|
+
action(:remove_part) { |part_num, b| b.frm.link(:xpath, "//a[contains(@onclick, 'assesssmentForm:parts:#{part_num.to_i-1}:copyToPool')]").click }
|
336
395
|
|
337
396
|
# Clicks the Add Part button, then
|
338
397
|
# instantiates the AddEditAssessmentPart page class.
|
@@ -340,7 +399,7 @@ class EditAssessment < AssessmentsBase
|
|
340
399
|
|
341
400
|
# Selects the desired question type from the
|
342
401
|
# drop down list at the top of the page.
|
343
|
-
|
402
|
+
action(:question_type) { |qtype, b| b.frm.select(:id=>"assesssmentForm:changeQType").select(qtype) }
|
344
403
|
|
345
404
|
# Clicks the Preview button,
|
346
405
|
# then instantiates the PreviewOverview page class.
|
@@ -358,12 +417,13 @@ class EditAssessment < AssessmentsBase
|
|
358
417
|
# text, by part and question number.
|
359
418
|
# @param part_num [String] the Part number containing the question you want
|
360
419
|
# @param question_num [String] the number of the question you want
|
361
|
-
|
420
|
+
action(:get_question_text) { |part_number, question_number, b| b.frm.table(:id=>"assesssmentForm:parts:#{part_number.to_i-1}:parts").div(:class=>"tier3", :index=>question_number.to_i-1).text }
|
362
421
|
|
363
422
|
action(:print) { |b| b.frm.button(:text=>"Print").click }
|
364
423
|
action(:update_points) { |b| b.frm.button(:id=>"assesssmentForm:pointsUpdate").click }
|
365
424
|
|
366
|
-
|
425
|
+
# TODO: Fix this method. It doesn't work for some reason...
|
426
|
+
action(:add_question_to_part) { |part, p| p.assessment_form.row(:text=>/#{Regexp.escape(part)}/).select(:id=>/changeQType/) }
|
367
427
|
|
368
428
|
element(:assessment_form) { |b| b.table(:id=>"assesssmentForm:parts") }
|
369
429
|
|
@@ -434,34 +494,16 @@ class MultipleChoice < AssessmentsBase
|
|
434
494
|
element(:multi_single) { |b| b.frm.radio(:name=>"itemForm:chooseAnswerTypeForMC", :index=>1) }
|
435
495
|
element(:multi_multi) { |b| b.frm.radio(:name=>"itemForm:chooseAnswerTypeForMC", :index=>2) }
|
436
496
|
|
437
|
-
|
438
|
-
action(:
|
439
|
-
|
440
|
-
|
441
|
-
element(:
|
442
|
-
|
443
|
-
element(:answer_d) { |b| b.frm.text_field(:id=>"itemForm:mcchoices:3:_id140_textinput") }
|
444
|
-
action(:remove_d) { |b| b.frm.link(:id=>"itemForm:mcchoices:3:removelinkSingle").click }
|
445
|
-
|
446
|
-
# Radio buttons that appear when "single correct" is selected
|
447
|
-
element(:a_correct) { |b| b.frm.radio(:name=>"itemForm:mcchoices:0:mcradiobtn") }
|
448
|
-
element(:b_correct) { |b| b.frm.radio(:name=>"itemForm:mcchoices:1:mcradiobtn") }
|
449
|
-
element(:c_correct) { |b| b.frm.radio(:name=>"itemForm:mcchoices:2:mcradiobtn") }
|
450
|
-
element(:d_correct) { |b| b.frm.radio(:name=>"itemForm:mcchoices:3:mcradiobtn") }
|
451
|
-
|
452
|
-
# % Value fields that appear when "single correct" and "partial credit" selected
|
453
|
-
element(:a_value) { |b| b.frm.text_field(:id=>"itemForm:mcchoices:0:partialCredit") }
|
454
|
-
element(:b_value) { |b| b.frm.text_field(:id=>"itemForm:mcchoices:1:partialCredit") }
|
455
|
-
element(:c_value) { |b| b.frm.text_field(:id=>"itemForm:mcchoices:2:partialCredit") }
|
456
|
-
element(:d_value) { |b| b.frm.text_field(:id=>"itemForm:mcchoices:3:partialCredit") }
|
497
|
+
action(:correct_answer) { |answer, b| b.frm.radio(:value=>answer) }
|
498
|
+
action(:answer_text) { |answer, b| b.frm.text_field(:name=>"itemForm:mcchoices:#{answer.ord-65}:_id140_textinput") }
|
499
|
+
action(:answer_feedback_text) { |answer, b| b.frm.text_field(:name=>"itemForm:mcchoices:#{answer.ord-65}:_id143_textinput") }
|
500
|
+
|
501
|
+
element(:correct_answer_feedback) { |b| b.frm.text_field(:id=>"itemForm:_id186_textinput") }
|
502
|
+
element(:incorrect_answer_feedback) { |b| b.frm.text_field(:id=>"itemForm:_id190_textinput") }
|
457
503
|
|
458
504
|
action(:reset_score_values) { |b| b.frm.link(:text=>"Reset Score Values").click }
|
459
505
|
|
460
|
-
|
461
|
-
element(:check_a_correct) { |b| b.frm.checkbox(:name=>"itemForm:mcchoices:0:mccheckboxes") }
|
462
|
-
element(:check_b_correct) { |b| b.frm.checkbox(:name=>"itemForm:mcchoices:1:mccheckboxes") }
|
463
|
-
element(:check_c_correct) { |b| b.frm.checkbox(:name=>"itemForm:mcchoices:2:mccheckboxes") }
|
464
|
-
element(:check_d_correct) { |b| b.frm.checkbox(:name=>"itemForm:mcchoices:3:mccheckboxes") }
|
506
|
+
action(:remove_last_answer) { |b| b.frm.link(:text=>"Remove", :index=>-1).click }
|
465
507
|
|
466
508
|
element(:insert_additional_answers) { |b| b.frm.select(:id=>"itemForm:insertAdditionalAnswerSelectMenu") }
|
467
509
|
element(:randomize_answers_yes) { |b| b.frm.radio(:index=>0, :name=>"itemForm:_id162") }
|
@@ -485,6 +527,7 @@ class Survey < AssessmentsBase
|
|
485
527
|
element(:unacceptable_excellent) { |b| b.frm.radio(:index=>5, :name=>"itemForm:selectscale") }
|
486
528
|
element(:one_to_five) { |b| b.frm.radio(:index=>6, :name=>"itemForm:selectscale") }
|
487
529
|
element(:one_to_ten) { |b| b.frm.radio(:index=>7, :name=>"itemForm:selectscale") }
|
530
|
+
element(:feedback) { |b| b.frm.text_field(:id=>"itemForm:_id140_textinput") }
|
488
531
|
|
489
532
|
end
|
490
533
|
|
@@ -495,6 +538,7 @@ class ShortAnswer < AssessmentsBase
|
|
495
538
|
question_page_elements
|
496
539
|
|
497
540
|
element(:model_short_answer) { |b| b.frm.text_field(:id=>"itemForm:_id129_textinput") }
|
541
|
+
element(:feedback) { |b| b.frm.text_field(:id=>"itemForm:_id133_textinput") }
|
498
542
|
|
499
543
|
end
|
500
544
|
|
@@ -506,6 +550,8 @@ class FillInBlank < AssessmentsBase
|
|
506
550
|
|
507
551
|
element(:case_sensitive) { |b| b.frm.checkbox(:name=>"itemForm:_id76") }
|
508
552
|
element(:mutually_exclusive) { |b| b.frm.checkbox(:name=>"itemForm:_id78") }
|
553
|
+
element(:correct_answer_feedback) { |b| b.frm.text_field(:id=>"itemForm:_id144_textinput") }
|
554
|
+
element(:incorrect_answer_feedback) { |b| b.frm.text_field(:id=>"itemForm:_id147_textinput") }
|
509
555
|
|
510
556
|
end
|
511
557
|
|
@@ -515,6 +561,9 @@ class NumericResponse < AssessmentsBase
|
|
515
561
|
menu_bar_elements
|
516
562
|
question_page_elements
|
517
563
|
|
564
|
+
element(:correct_answer_feedback) { |b| b.frm.text_field(:id=>"itemForm:_id141_textinput") }
|
565
|
+
element(:incorrect_answer_feedback) { |b| b.frm.text_field(:id=>"itemForm:_id143_textinput") }
|
566
|
+
|
518
567
|
end
|
519
568
|
|
520
569
|
# The page for setting up a matching question
|
@@ -525,6 +574,12 @@ class Matching < AssessmentsBase
|
|
525
574
|
|
526
575
|
element(:choice) { |b| b.frm.text_field(:id=>"itemForm:_id147_textinput") }
|
527
576
|
element(:match) { |b| b.frm.text_field(:id=>"itemForm:_id151_textinput") }
|
577
|
+
element(:correct_match_feedback) { |b| b.frm.text_field(:id=>"itemForm:_id155_textinput") }
|
578
|
+
element(:incorrect_match_feedback) { |b| b.frm.text_field(:id=>"itemForm:_id160_textinput") }
|
579
|
+
element(:correct_answer_feedback) { |b| b.frm.text_field(:id=>"itemForm:_id184_textinput") }
|
580
|
+
element(:incorrect_answer_feedback) { |b| b.frm.text_field(:id=>"itemForm:_id189_textinput") }
|
581
|
+
|
582
|
+
action(:distractor) { |b| b.frm.select(:id=>"itemForm:controllingSequence").select "*distractor*" }
|
528
583
|
action(:save_pairing) { |b| b.frm.button(:name=>"itemForm:_id164").click }
|
529
584
|
|
530
585
|
end
|
@@ -536,10 +591,11 @@ class TrueFalse < AssessmentsBase
|
|
536
591
|
question_page_elements
|
537
592
|
|
538
593
|
element(:negative_point_value) { |b| b.frm.text_field(:id=>"itemForm:answerdsc") }
|
539
|
-
|
540
|
-
element(:answer_false) { |b| b.frm.radio(:index=>1, :name=>"itemForm:TF") }
|
594
|
+
action(:answer) { |answer, b| b.frm.radio(:value=>answer, :name=>"itemForm:TF") }
|
541
595
|
element(:required_rationale_yes) { |b| b.frm.radio(:index=>0, :name=>"itemForm:rational") }
|
542
596
|
element(:required_rationale_no) { |b| b.frm.radio(:index=>1, :name=>"itemForm:rational") }
|
597
|
+
element(:correct_answer_feedback) { |b| b.frm.text_field(:id=>"itemForm:_id148_textinput") }
|
598
|
+
element(:incorrect_answer_feedback) { |b| b.frm.text_field(:id=>"itemForm:_id152_textinput") }
|
543
599
|
|
544
600
|
end
|
545
601
|
|
@@ -551,6 +607,7 @@ class AudioRecording < AssessmentsBase
|
|
551
607
|
|
552
608
|
element(:time_allowed) { |b| b.frm.text_field(:id=>"itemForm:timeallowed") }
|
553
609
|
element(:number_of_attempts) { |b| b.frm.select(:id=>"itemForm:noattempts") }
|
610
|
+
element(:feedback) { |b| b.frm.text_field(:id=>"itemForm:_id146_textinput") }
|
554
611
|
|
555
612
|
end
|
556
613
|
|
@@ -560,6 +617,29 @@ class FileUpload < AssessmentsBase
|
|
560
617
|
|
561
618
|
menu_bar_elements
|
562
619
|
question_page_elements
|
620
|
+
element(:feedback) { |b| b.frm.text_field(:id=>"itemForm:_id130_textinput") }
|
621
|
+
|
622
|
+
end
|
623
|
+
|
624
|
+
# The page for setting up a calculated question
|
625
|
+
class CalculatedQuestions < AssessmentsBase
|
626
|
+
|
627
|
+
menu_bar_elements
|
628
|
+
question_page_elements
|
629
|
+
|
630
|
+
action(:extract_vs_and_fs) { |b| b.frm.button(:value=>"Extract Variables and Formulas").click; b.variables_table.wait_until_present }
|
631
|
+
|
632
|
+
action(:min_value) { |variable_name, p| p.variables_table.td(:text=>variable_name).parent.text_field(:name=>/itemForm:pairs:.:_id167/) }
|
633
|
+
action(:max_value) { |variable_name, p| p.variables_table.td(:text=>variable_name).parent.text_field(:name=>/_id170/) }
|
634
|
+
action(:var_decimals) { |variable_name, p| p.variables_table.td(:text=>variable_name).parent.select(:name=>/_id173/) }
|
635
|
+
action(:formula) { |formula_name, p| p.formulas_table.td(:text=>formula_name).parent.text_field(:name=>/_id186/) }
|
636
|
+
action(:tolerance) { |formula_name, p| p.formulas_table.td(:text=>formula_name).parent.text_field(:name=>/_id189/) }
|
637
|
+
action(:form_decimals) { |formula_name, p| p.formulas_table.td(:text=>formula_name).parent.select(:name=>/assignToPart/) }
|
638
|
+
element(:variables_table) { |b| b.frm.table(:id=>"itemForm:pairs") }
|
639
|
+
element(:formulas_table) { |b| b.frm.table(:id=>"itemForm:formulas") }
|
640
|
+
|
641
|
+
element(:correct_answer_feedback) { |b| b.frm.text_field(:id=>"itemForm:_id207_textinput") }
|
642
|
+
element(:incorrect_answer_feedback) { |b| b.frm.text_field(:id=>"itemForm:_id211_textinput") }
|
563
643
|
|
564
644
|
end
|
565
645
|
|
@@ -686,91 +766,31 @@ class SelectQuestionType < AssessmentsBase
|
|
686
766
|
|
687
767
|
end
|
688
768
|
|
689
|
-
# Page of Assessments accessible to a student user
|
690
|
-
#
|
691
|
-
# It may be that we want to deprecate this class and simply use
|
692
|
-
# the AssessmentsList class alone.
|
693
|
-
class TakeAssessmentList < AssessmentsBase
|
694
769
|
|
695
|
-
|
696
|
-
|
697
|
-
# define this later
|
698
|
-
end
|
770
|
+
# The student view of the overview/intro page of an Assessment
|
771
|
+
class BeginAssessment < BasePage
|
699
772
|
|
700
|
-
|
701
|
-
# the student user has submitted. The titles are
|
702
|
-
# returned in an Array object.
|
703
|
-
def submitted_assessments
|
704
|
-
table_array = @browser.frame(:index=>1).table(:id=>"selectIndexForm:reviewTable").to_a
|
705
|
-
table_array.delete_at(0)
|
706
|
-
titles = []
|
707
|
-
table_array.each { |row|
|
708
|
-
unless row[0] == ""
|
709
|
-
titles << row[0]
|
710
|
-
end
|
711
|
-
}
|
773
|
+
frame_element
|
712
774
|
|
713
|
-
|
775
|
+
action(:begin_assessment) { |b| b.frm.button(:value=>"Begin Assessment").click }
|
714
776
|
|
715
|
-
|
777
|
+
value(:assessment_introduction) { |b| b.frm.div(:class=>"assessmentIntroduction").text }
|
716
778
|
|
717
|
-
|
718
|
-
# then instantiates the BeginAssessment
|
719
|
-
# page class.
|
720
|
-
# @param name [String] the name of the assessment you want to take
|
721
|
-
def take_assessment(name)
|
722
|
-
begin
|
723
|
-
frm.link(:text=>name).click
|
724
|
-
rescue Watir::Exception::UnknownObjectException
|
725
|
-
frm.link(:text=>CGI::escapeHTML(name)).click
|
726
|
-
end
|
727
|
-
BeginAssessment.new(@browser)
|
728
|
-
end
|
779
|
+
element(:info_table) { |b| b.frm.table(:index=>0) }
|
729
780
|
|
730
|
-
#
|
731
|
-
#
|
732
|
-
def feedback(test_name)
|
733
|
-
test_table = frm.table(:id=>"selectIndexForm:reviewTable").to_a
|
734
|
-
test_table.delete_if { |row| row[3] != "Immediate" }
|
735
|
-
index_value = test_table.index { |row| row[0] == test_name }
|
736
|
-
frm.link(:text=>"Feedback", :index=>index_value).click
|
737
|
-
# Need to add a call to a New class here, when it's written
|
738
|
-
end
|
781
|
+
#TODO: Write methods to extract pertinent info from the info table.
|
739
782
|
|
740
783
|
end
|
741
784
|
|
742
|
-
#
|
743
|
-
class
|
785
|
+
# Pages student sees when taking an assessment
|
786
|
+
# Note that this class will only work when the Assessment being taken
|
787
|
+
# is set up to only display one question per page.
|
788
|
+
class TakeAssessment < AssessmentsBase
|
744
789
|
|
745
|
-
|
746
|
-
def begin_assessment
|
747
|
-
frm.button(:value=>"Begin Assessment").click
|
748
|
-
end
|
749
|
-
|
750
|
-
# Clicks the Cancel button and instantiates the X Class.
|
751
|
-
def cancel
|
752
|
-
# Define this later
|
753
|
-
end
|
790
|
+
action(:multiple_choice_answer) { |answer_text, b| b.frm }
|
754
791
|
|
755
|
-
|
756
|
-
|
757
|
-
# TODO: Convert this to a hash instead of case statement
|
758
|
-
index = case(letter.upcase)
|
759
|
-
when "A" then "0"
|
760
|
-
when "B" then "1"
|
761
|
-
when "C" then "2"
|
762
|
-
when "D" then "3"
|
763
|
-
when "E" then "4"
|
764
|
-
end
|
765
|
-
frm.radio(:name=>/takeAssessmentForm.+:deliverMultipleChoice.+:_id.+:#{index}/).click
|
766
|
-
end
|
767
|
-
|
768
|
-
# Enters the answer into the specified blank number (1-based).
|
769
|
-
# @param answer [String]
|
770
|
-
def fill_in_blank_answer(answer, blank_number)
|
771
|
-
index = blank_number.to_i-1
|
772
|
-
frm.text_field(:name=>/deliverFillInTheBlank:_id.+:#{index}/).value=answer
|
773
|
-
end
|
792
|
+
action(:fill_in_blank_answer) { |box, b| b.frm.text_field(:name=>/deliverFillInTheBlank:_id.+:#{box.to_i}/) }
|
793
|
+
action(:numeric_answer) { |box, b| b.frm.text_field(:name=>/deliverFillInNumeric:_id.+:#{box.to_i}/) }
|
774
794
|
|
775
795
|
# Clicks either the True or the False radio button, as specified.
|
776
796
|
def true_false_answer(answer)
|
@@ -783,16 +803,9 @@ class BeginAssessment < AssessmentsBase
|
|
783
803
|
frm.text_field(:name=>/:deliverTrueFalse:rationale/).value=text
|
784
804
|
end
|
785
805
|
|
786
|
-
|
787
|
-
def short_answer(answer)
|
788
|
-
frm.text_field(:name=>/deliverShortAnswer/).value=answer
|
789
|
-
end
|
806
|
+
element(:short_answer) { |b| b.frm.text_field(:name=>/deliverShortAnswer/) }
|
790
807
|
|
791
|
-
|
792
|
-
def match_answer(answer, number)
|
793
|
-
index = number.to_i-1
|
794
|
-
frm.select(:name=>/deliverMatching/, :index=>index).select(answer)
|
795
|
-
end
|
808
|
+
action(:match_answer) { |match_text, b| b.frm.td(:text=>/#{Regexp.escape(match_text)}/).parent.select(:index=>0) }
|
796
809
|
|
797
810
|
# Enters the specified file name in the file field. You can include the path to the file
|
798
811
|
# as an optional second parameter.
|
@@ -802,16 +815,11 @@ class BeginAssessment < AssessmentsBase
|
|
802
815
|
end
|
803
816
|
|
804
817
|
# Clicks the Next button and instantiates the BeginAssessment Class.
|
805
|
-
|
806
|
-
frm.button(:value=>"Next").click
|
807
|
-
BeginAssessment.new(@browser)
|
808
|
-
end
|
818
|
+
action(:next) { |b| b.frm.button(:value=>"Next").click }
|
809
819
|
|
810
820
|
# Clicks the Submit for Grading button and instantiates the ConfirmSubmission Class.
|
811
|
-
|
812
|
-
|
813
|
-
ConfirmSubmission.new(@browser)
|
814
|
-
end
|
821
|
+
action(:submit_for_grading){ |b| b.frm.button(:value=>"Submit for Grading").click }
|
822
|
+
|
815
823
|
end
|
816
824
|
|
817
825
|
# The confirmation page that appears when submitting an Assessment.
|