sambal-cle 0.1.3 → 0.1.4
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +3 -1
- data/lib/sambal-cle/base_page.rb +3 -1
- data/lib/sambal-cle/data_objects/announcement.rb +7 -10
- data/lib/sambal-cle/data_objects/assessment.rb +265 -9
- data/lib/sambal-cle/data_objects/assignment.rb +38 -32
- data/lib/sambal-cle/data_objects/assignment_permissions.rb +61 -0
- data/lib/sambal-cle/data_objects/assignment_submission.rb +126 -0
- data/lib/sambal-cle/data_objects/blog.rb +4 -7
- data/lib/sambal-cle/data_objects/blogger.rb +4 -10
- data/lib/sambal-cle/data_objects/chat_room.rb +5 -8
- data/lib/sambal-cle/data_objects/event.rb +6 -17
- data/lib/sambal-cle/data_objects/forum.rb +9 -19
- data/lib/sambal-cle/data_objects/lesson.rb +8 -29
- data/lib/sambal-cle/data_objects/message.rb +7 -10
- data/lib/sambal-cle/data_objects/poll.rb +6 -11
- data/lib/sambal-cle/data_objects/resource.rb +28 -37
- data/lib/sambal-cle/data_objects/site.rb +6 -17
- data/lib/sambal-cle/data_objects/syllabus.rb +6 -8
- data/lib/sambal-cle/data_objects/user.rb +88 -0
- data/lib/sambal-cle/data_objects/web_content_tool.rb +5 -6
- data/lib/sambal-cle/data_objects/wiki.rb +6 -6
- data/lib/sambal-cle/page_objects/account.rb +0 -2
- data/lib/sambal-cle/page_objects/announcements.rb +0 -1
- data/lib/sambal-cle/page_objects/assessments.rb +57 -87
- data/lib/sambal-cle/page_objects/assignments.rb +117 -337
- data/lib/sambal-cle/page_objects/calendar.rb +0 -2
- data/lib/sambal-cle/page_objects/login.rb +3 -9
- data/lib/sambal-cle/page_objects/sections.rb +2 -3
- data/lib/sambal-cle/page_objects/site_setup.rb +9 -19
- data/lib/sambal-cle/rich_text.rb +6 -0
- data/lib/sambal-cle/utilities.rb +4 -10
- data/lib/sambal-cle/workflows.rb +1 -5
- data/lib/sambal-cle.rb +2 -10
- data/sambal-cle.gemspec +7 -8
- data/test/add_assignment_to_calendar_spec.rb +14 -15
- data/test/assessment_create_spec.rb +355 -0
- data/test/assignment_announcements_spec.rb +14 -15
- data/test/assignment_duplicate_spec.rb +56 -0
- data/test/assignment_gradebook_spec.rb +16 -15
- data/test/assignment_permissions_spec.rb +77 -0
- data/test/assignments_grading_spec.rb +123 -0
- data/test/assignments_submission_spec.rb +143 -0
- data/test/config.yml +3 -0
- data/test/directory.yml +120 -0
- data/test/duplicate_site_spec.rb +5 -3
- data/test/import_site_content_spec.rb +248 -0
- metadata +22 -31
- data/lib/sambal-cle/core-ext.rb +0 -90
- data/lib/sambal-cle/date_makers.rb +0 -118
- data/lib/sambal-cle/gem_ext.rb +0 -23
- data/lib/sambal-cle/page_helper.rb +0 -22
- data/lib/sambal-cle/page_maker.rb +0 -48
- data/lib/sambal-cle/randomizers.rb +0 -117
@@ -35,7 +35,6 @@ class AssessmentsBase <BasePage
|
|
35
35
|
element(:keywords) { |b| b.frm.text_field(:id=>/:keyfield/) }
|
36
36
|
# QuestionPoolsList
|
37
37
|
action(:save) { |b| b.frm.button(:id=>"questionpool:submit").click }
|
38
|
-
action(:cancel) { |b| b.frm.button(:value=>"Cancel").click }
|
39
38
|
end
|
40
39
|
end
|
41
40
|
end
|
@@ -56,7 +55,6 @@ class AssessmentsList < AssessmentsBase
|
|
56
55
|
# then returns them as an Array.
|
57
56
|
def pending_assessment_titles
|
58
57
|
titles =[]
|
59
|
-
pending_table = frm.table(:id=>"authorIndexForm:coreAssessments")
|
60
58
|
1.upto(pending_table.rows.size-1) do |x|
|
61
59
|
titles << pending_table[x][1].span(:id=>/assessmentTitle/).text
|
62
60
|
end
|
@@ -67,7 +65,6 @@ class AssessmentsList < AssessmentsBase
|
|
67
65
|
# then returns them as an Array.
|
68
66
|
def published_assessment_titles
|
69
67
|
titles =[]
|
70
|
-
published_table = frm.div(:class=>"tier2", :index=>2).table(:class=>"listHier", :index=>0)
|
71
68
|
1.upto(published_table.rows.size-1) do |x|
|
72
69
|
titles << published_table[x][1].span(:id=>/publishedAssessmentTitle/).text
|
73
70
|
end
|
@@ -78,7 +75,6 @@ class AssessmentsList < AssessmentsBase
|
|
78
75
|
# in the list.
|
79
76
|
def inactive_assessment_titles
|
80
77
|
titles =[]
|
81
|
-
inactive_table = frm.div(:class=>"tier2", :index=>2).table(:id=>"authorIndexForm:inactivePublishedAssessments")
|
82
78
|
1.upto(inactive_table.rows.size-1) do |x|
|
83
79
|
titles << inactive_table[x][1].span(:id=>/inactivePublishedAssessmentTitle/).text
|
84
80
|
end
|
@@ -88,12 +84,16 @@ class AssessmentsList < AssessmentsBase
|
|
88
84
|
# Opens the selected test for scoring
|
89
85
|
# then instantiates the AssessmentTotalScores class.
|
90
86
|
# @param test_title [String] the title of the test to be clicked.
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
87
|
+
pgmd(:score_test) { |test_title, b| b.frm.tbody(:id=>"authorIndexForm:_id88:tbody_element").row(:text=>/#{Regexp.escape(test_title)}/).link(:id=>/authorIndexToScore/).click }
|
88
|
+
|
89
|
+
pgmd(:publish) { |test_title, b| b.pending_table.tr(:text=>/#{Regexp.escape(test_title)}/).select(:name=>/Select/).select "Publish" }
|
90
|
+
|
91
|
+
pgmd(:edit) { |test_title, b| b.form(:id=>"authorIndexForm").tr(:text=>/#{Regexp.escape(test_title)}/).select(:name=>/Select/).select "Edit" }
|
95
92
|
|
96
93
|
element(:title) { |b| b.frm.text_field(:id=>"authorIndexForm:title") }
|
94
|
+
element(:pending_table) { |b| b.frm.table(:id=>"authorIndexForm:coreAssessments") }
|
95
|
+
element(:published_table) { |b| b.frm.div(:class=>"tier2", :index=>2).table(:class=>"listHier", :index=>0) }
|
96
|
+
element(:inactive_table) { |b| b.frm.div(:class=>"tier2", :index=>2).table(:id=>"authorIndexForm:inactivePublishedAssessments") }
|
97
97
|
element(:create_using_builder) { |b| b.frm.radio(:name=>"authorIndexForm:_id29", :index=>0) }
|
98
98
|
element(:create_using_text) { |b| b.frm.radio(:name=>"authorIndexForm:_id29") }
|
99
99
|
element(:select_assessment_type) { |b| b.frm.select(:id=>"authorIndexForm:assessmentTemplate") }
|
@@ -108,31 +108,20 @@ class PreviewOverview < BasePage
|
|
108
108
|
frame_element
|
109
109
|
|
110
110
|
# Scrapes the value of the due date from the page. Returns it as a string.
|
111
|
-
|
112
|
-
frm.div(:class=>"tier2").table(:index=>0)[0][0].text
|
113
|
-
end
|
111
|
+
value(:due_date) { |b| b.frm.frm.div(:class=>"tier2").table(:index=>0)[0][0].text }
|
114
112
|
|
115
113
|
# Scrapes the value of the time limit from the page. Returns it as a string.
|
116
|
-
|
117
|
-
frm.div(:class=>"tier2").table(:index=>0)[3][0].text
|
118
|
-
end
|
114
|
+
value(:time_limit) { |b| b.frm.frm.div(:class=>"tier2").table(:index=>0)[3][0].text }
|
119
115
|
|
120
116
|
# Scrapes the submission limit from the page. Returns it as a string.
|
121
|
-
|
122
|
-
frm.div(:class=>"tier2").table(:index=>0)[6][0].text
|
123
|
-
end
|
117
|
+
value(:submission_limit) { |b| b.frm.frm.div(:class=>"tier2").table(:index=>0)[6][0].text }
|
124
118
|
|
125
119
|
# Scrapes the Feedback policy from the page. Returns it as a string.
|
126
|
-
|
127
|
-
frm.div(:class=>"tier2").table(:index=>0)[9][0].text
|
128
|
-
end
|
120
|
+
value(:feedback) { |b| b.frm.div(:class=>"tier2").table(:index=>0)[9][0].text }
|
129
121
|
|
130
122
|
# Clicks the Done button, then instantiates
|
131
123
|
# the EditAssessment class.
|
132
|
-
|
133
|
-
frm.button(:name=>"takeAssessmentForm:_id5").click
|
134
|
-
EditAssessment.new(@browser)
|
135
|
-
end
|
124
|
+
action(:done) { |b| b.frm.button(:name=>"takeAssessmentForm:_id5").click }
|
136
125
|
|
137
126
|
action(:begin_assessment) { |b| b.frm.button(:id=>"takeAssessmentForm:beginAssessment3").click }
|
138
127
|
|
@@ -143,45 +132,44 @@ class AssessmentSettings < AssessmentsBase
|
|
143
132
|
|
144
133
|
menu_bar_elements
|
145
134
|
|
135
|
+
expected_element :cancel_button
|
136
|
+
|
146
137
|
# Scrapes the Assessment Type from the page and returns it as a string.
|
147
|
-
|
148
|
-
frm.div(:class=>"tier2").table(:index=>0)[0][1].text
|
149
|
-
end
|
138
|
+
value(:assessment_type_title) { |b| b.frm.div(:class=>"tier2").table(:index=>0)[0][1].text }
|
150
139
|
|
151
140
|
# Scrapes the Assessment Author information from the page and returns it as a string.
|
152
|
-
|
153
|
-
frm.div(:class=>"tier2").table(:index=>0)[1][1].text
|
154
|
-
end
|
141
|
+
value(:assessment_type_author) { |b| b.frm.div(:class=>"tier2").table(:index=>0)[1][1].text }
|
155
142
|
|
156
143
|
# Scrapes the Assessment Type Description from the page and returns it as a string.
|
157
|
-
|
158
|
-
frm.div(:class=>"tier2").table(:index=>0)[2][1].text
|
159
|
-
end
|
144
|
+
value(:assessment_type_description) { |b| b.frm.div(:class=>"tier2").table(:index=>0)[2][1].text }
|
160
145
|
|
161
146
|
# Clicks the Save Settings and Publish button
|
162
147
|
# then instantiates the PublishAssessment class.
|
163
|
-
|
164
|
-
frm.button(:value=>"Save Settings and Publish").click
|
165
|
-
PublishAssessment.new(@browser)
|
166
|
-
end
|
148
|
+
action(:save_and_publish) { |b| b.frm.button(:value=>"Save Settings and Publish").click }
|
167
149
|
|
168
|
-
action(:open) { |b| b.frm.link(:text=>"Open") }
|
169
|
-
action(:close) { |b| b.frm.link(:text=>"Close") }
|
150
|
+
action(:open) { |b| b.frm.link(:text=>"Open").click }
|
151
|
+
action(:close) { |b| b.frm.link(:text=>"Close").click }
|
152
|
+
# Introduction
|
170
153
|
element(:title) { |b| b.frm.text_field(:id=>"assessmentSettingsAction:intro:assessment_title") }
|
171
154
|
element(:authors) { |b| b.frm.text_field(:id=>"assessmentSettingsAction:intro:assessment_author") }
|
172
155
|
element(:description) { |b| b.frm.text_field(:id=>"assessmentSettingsAction:intro:_id44_textinput") }
|
173
156
|
action(:add_attachments_to_intro) { |b| b.frm.button(:name=>"assessmentSettingsAction:intro:_id90").click }
|
157
|
+
# Delivery Dates
|
174
158
|
element(:available_date) { |b| b.frm.text_field(:id=>"assessmentSettingsAction:startDate") }
|
175
159
|
element(:due_date) { |b| b.frm.text_field(:id=>"assessmentSettingsAction:endDate") }
|
176
160
|
element(:retract_date) { |b| b.frm.text_field(:id=>"assessmentSettingsAction:retractDate") }
|
161
|
+
# Assessment Released To
|
177
162
|
element(:released_to_anonymous) { |b| b.frm.radio(:name=>"assessmentSettingsAction:_id117") }
|
178
163
|
element(:released_to_site) { |b| b.frm.radio(:name=>"assessmentSettingsAction:_id117") }
|
179
164
|
element(:specified_ips) { |b| b.frm.text_field(:name=>"assessmentSettingsAction:_id132") }
|
165
|
+
# High Security
|
180
166
|
element(:secondary_id) { |b| b.frm.text_field(:id=>"assessmentSettingsAction:username") }
|
181
167
|
element(:secondary_pw) { |b| b.frm.text_field(:id=>"assessmentSettingsAction:password") }
|
168
|
+
element(:allow_specified_ips) { |b| b.frm.text_field(:name=>"assessmentSettingsAction:_id132") }
|
182
169
|
element(:timed_assessment) { |b| b.frm.checkbox(:id=>"assessmentSettingsAction:selTimeAssess") }
|
183
170
|
element(:limit_hour) { |b| b.frm.select(:id=>"assessmentSettingsAction:timedHours") }
|
184
171
|
element(:limit_mins) { |b| b.frm.select(:id=>"assessmentSettingsAction:timedMinutes") }
|
172
|
+
# Assessment Organization
|
185
173
|
element(:linear_access) { |b| b.frm.radio(:name=>"assessmentSettingsAction:itemNavigation") }
|
186
174
|
element(:random_access) { |b| b.frm.radio(:name=>"assessmentSettingsAction:itemNavigation") }
|
187
175
|
element(:question_per_page) { |b| b.frm.radio(:name=>"assessmentSettingsAction:assessmentFormat") }
|
@@ -189,14 +177,17 @@ class AssessmentSettings < AssessmentsBase
|
|
189
177
|
element(:assessment_per_page) { |b| b.frm.radio(:name=>"assessmentSettingsAction:assessmentFormat") }
|
190
178
|
element(:continuous_numbering) { |b| b.frm.radio(:name=>"assessmentSettingsAction:itemNumbering") }
|
191
179
|
element(:restart_per_part) { |b| b.frm.radio(:name=>"assessmentSettingsAction:itemNumbering") }
|
180
|
+
# Mark for review
|
192
181
|
element(:add_mark_for_review) { |b| b.frm.text_field(:id=>"assessmentSettingsAction:markForReview1") }
|
193
182
|
element(:unlimited_submissions) { |b| b.frm.radio(:name=>"assessmentSettingsAction:unlimitedSubmissions") }
|
194
183
|
element(:only_x_submissions) { |b| b.frm.radio(:name=>"assessmentSettingsAction:unlimitedSubmissions") }
|
195
184
|
element(:allowed_submissions) { |b| b.frm.text_field(:id=>"assessmentSettingsAction:submissions_Allowed") }
|
196
185
|
element(:late_submissions_not_accepted) { |b| b.frm.radio(:name=>"assessmentSettingsAction:lateHandling") }
|
197
186
|
element(:late_submissions_accepted) { |b| b.frm.radio(:name=>"assessmentSettingsAction:lateHandling") }
|
198
|
-
|
187
|
+
# Submission Message
|
188
|
+
element(:submission_message) { |b| b.frm.text_field(:id=>"assessmentSettingsAction:_id250_textinput") }
|
199
189
|
element(:final_page_url) { |b| b.frm.text_field(:id=>"assessmentSettingsAction:finalPageUrl") }
|
190
|
+
# Feedback
|
200
191
|
element(:question_level_feedback) { |b| b.frm.radio(:name=>"assessmentSettingsAction:feedbackAuthoring") }
|
201
192
|
element(:selection_level_feedback) { |b| b.frm.radio(:name=>"assessmentSettingsAction:feedbackAuthoring") }
|
202
193
|
element(:both_feedback_levels) { |b| b.frm.radio(:name=>"assessmentSettingsAction:feedbackAuthoring") }
|
@@ -229,8 +220,9 @@ class AssessmentSettings < AssessmentsBase
|
|
229
220
|
#text_field(:objectives, :=>"") }
|
230
221
|
#text_field(:rubrics, :=>"") }
|
231
222
|
#checkbox(:record_metadata_for_questions, :=>"") }
|
232
|
-
action(:save) { |b| b.frm.button(:
|
233
|
-
|
223
|
+
action(:save) { |b| b.frm.button(:value=>"Save Settings").click }
|
224
|
+
element(:cancel_button) { |b| b.frm.button(:value=>"Cancel") }
|
225
|
+
action(:cancel) { |p| p.cancel_button.click }
|
234
226
|
|
235
227
|
end
|
236
228
|
|
@@ -252,7 +244,7 @@ class AssessmentTotalScores < BasePage
|
|
252
244
|
scores_table = frm.table(:id=>"editTotalResults:totalScoreTable").to_a
|
253
245
|
scores_table.delete_at(0)
|
254
246
|
scores_table.each { |row| ids << row[1] }
|
255
|
-
|
247
|
+
ids
|
256
248
|
end
|
257
249
|
|
258
250
|
# Adds a comment to the specified student's comment box.
|
@@ -262,10 +254,10 @@ class AssessmentTotalScores < BasePage
|
|
262
254
|
# selecting the appropriate comment box.
|
263
255
|
# @param student_id [String] the target student id
|
264
256
|
# @param comment [String] the text of the comment being made to the student
|
265
|
-
|
266
|
-
index_val = student_ids.index(student_id)
|
267
|
-
frm.text_field(:name=>"editTotalResults:totalScoreTable:#{index_val}:_id345").value=comment
|
268
|
-
|
257
|
+
pgmd(:comment_for_student) { |student_id, comment, b|
|
258
|
+
index_val = b.student_ids.index(student_id)
|
259
|
+
b.frm.text_field(:name=>"editTotalResults:totalScoreTable:#{index_val}:_id345").value=comment
|
260
|
+
}
|
269
261
|
|
270
262
|
# Clicks the Submit Date link in the table header to sort/reverse sort the list.
|
271
263
|
def sort_by_submit_date
|
@@ -340,60 +332,41 @@ class EditAssessment < AssessmentsBase
|
|
340
332
|
# Allows removing a specified
|
341
333
|
# Assessment part number.
|
342
334
|
# @param part_num [String] the part number of the assessment you want
|
343
|
-
|
344
|
-
frm.link(:xpath, "//a[contains(@onclick, 'assesssmentForm:parts:#{part_num.to_i-1}:copyToPool')]").click
|
345
|
-
end
|
335
|
+
pgmd(:remove_part) { |part_num, b| b.frm.link(:xpath, "//a[contains(@onclick, 'assesssmentForm:parts:#{part_num.to_i-1}:copyToPool')]").click }
|
346
336
|
|
347
337
|
# Clicks the Add Part button, then
|
348
338
|
# instantiates the AddEditAssessmentPart page class.
|
349
|
-
|
350
|
-
frm.link(:text=>"Add Part").click
|
351
|
-
AddEditAssessmentPart.new(@browser)
|
352
|
-
end
|
339
|
+
action(:add_part) { |b| b.frm.link(:text=>"Add Part").click }
|
353
340
|
|
354
341
|
# Selects the desired question type from the
|
355
|
-
# drop down list.
|
356
|
-
|
342
|
+
# drop down list at the top of the page.
|
343
|
+
pgmd(:question_type) { |qtype, b| b.frm.select(:id=>"assesssmentForm:changeQType").select(qtype) }
|
357
344
|
|
358
345
|
# Clicks the Preview button,
|
359
346
|
# then instantiates the PreviewOverview page class.
|
360
|
-
|
361
|
-
frm.link(:text=>"Preview").click
|
362
|
-
PreviewOverview.new(@browser)
|
363
|
-
end
|
347
|
+
action(:preview) { |b| b.frm.link(:text=>"Preview").click }
|
364
348
|
|
365
349
|
# Clicks the Settings link, then
|
366
350
|
# instantiates the AssessmentSettings page class.
|
367
|
-
|
368
|
-
frm.link(:text=>"Settings").click
|
369
|
-
AssessmentSettings.new(@browser)
|
370
|
-
end
|
351
|
+
action(:settings) { |b| b.frm.link(:text=>"Settings").click }
|
371
352
|
|
372
353
|
# Clicks the Publish button, then
|
373
354
|
# instantiates the PublishAssessment page class.
|
374
|
-
|
375
|
-
frm.link(:text=>"Publish").click
|
376
|
-
PublishAssessment.new(@browser)
|
377
|
-
end
|
378
|
-
|
379
|
-
# Clicks the Question Pools button, then
|
380
|
-
# instantiates the QuestionPoolsList page class.
|
381
|
-
def question_pools
|
382
|
-
frm.link(:text=>"Question Pools").click
|
383
|
-
QuestionPoolsList.new(@browser)
|
384
|
-
end
|
355
|
+
action(:publish) { |b| b.frm.link(:text=>"Publish").click }
|
385
356
|
|
386
357
|
# Allows retrieval of a specified question's
|
387
358
|
# text, by part and question number.
|
388
359
|
# @param part_num [String] the Part number containing the question you want
|
389
360
|
# @param question_num [String] the number of the question you want
|
390
|
-
|
391
|
-
frm.table(:id=>"assesssmentForm:parts:#{part_number.to_i-1}:parts").div(:class=>"tier3", :index=>question_number.to_i-1).text
|
392
|
-
end
|
361
|
+
pgmd(: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 }
|
393
362
|
|
394
363
|
action(:print) { |b| b.frm.button(:text=>"Print").click }
|
395
364
|
action(:update_points) { |b| b.frm.button(:id=>"assesssmentForm:pointsUpdate").click }
|
396
365
|
|
366
|
+
pgmd(:add_question_to_part) { |part, p| p.assessment_form.row(:text=>/#{Regexp.escape(part)}/).select(:id=>/changeQType/) }
|
367
|
+
|
368
|
+
element(:assessment_form) { |b| b.table(:id=>"assesssmentForm:parts") }
|
369
|
+
|
397
370
|
end
|
398
371
|
|
399
372
|
# This is the page for adding and editing a part of an assessment
|
@@ -401,17 +374,16 @@ class AddEditAssessmentPart < BasePage
|
|
401
374
|
|
402
375
|
frame_element
|
403
376
|
|
404
|
-
# Clicks the Save button
|
405
|
-
# the EditAssessment page class.
|
377
|
+
# Clicks the Save button
|
406
378
|
def save
|
407
379
|
frm.button(:name=>"modifyPartForm:_id89").click
|
408
|
-
|
380
|
+
|
409
381
|
end
|
410
382
|
|
411
383
|
element(:title) { |b| b.frm.text_field(:id=>"modifyPartForm:title") }
|
412
384
|
element(:information) { |b| b.frm.text_field(:id=>"modifyPartForm:_id10_textinput") }
|
413
385
|
action(:add_attachments) { |b| b.frm.button(:name=>"modifyPartForm:_id54").click }
|
414
|
-
element(:
|
386
|
+
element(:one_by_one) { |b| b.frm.radio(:index=>0, :name=>"modifyPartForm:_id60") }
|
415
387
|
element(:random_draw) { |b| b.frm.radio(:index=>1, :name=>"modifyPartForm:_id60") }
|
416
388
|
element(:pool_name) { |b| b.frm.select(:id=>"modifyPartForm:assignToPool") }
|
417
389
|
element(:number_of_questions) { |b| b.frm.text_field(:id=>"modifyPartForm:numSelected") }
|
@@ -433,14 +405,12 @@ end
|
|
433
405
|
class PublishAssessment < BasePage
|
434
406
|
|
435
407
|
frame_element
|
408
|
+
basic_page_elements
|
409
|
+
|
436
410
|
# Clicks the Publish button, then
|
437
411
|
# instantiates the AssessmentsList page class.
|
438
|
-
|
439
|
-
frm.button(:value=>"Publish").click
|
440
|
-
AssessmentsList.new(@browser)
|
441
|
-
end
|
412
|
+
action(:publish) { |b| b.frm.button(:value=>"Publish").click }
|
442
413
|
|
443
|
-
action(:cancel) { |b| b.frm.button(:value=>"Cancel").click }
|
444
414
|
action(:edit) { |b| b.frm.button(:name=>"publishAssessmentForm:_id23").click }
|
445
415
|
element(:notification) { |b| b.frm.select(:id=>"publishAssessmentForm:number") }
|
446
416
|
|