sambal-cle 0.1.4 → 0.1.5
Sign up to get free protection for your applications and to get access to all the features.
- 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.
|