sakai-cle-test-api 0.0.7 → 0.0.9
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/sakai-cle-test-api.rb +7 -2
- data/lib/sakai-cle-test-api/add_files.rb +198 -0
- data/lib/sakai-cle-test-api/admin_page_elements.rb +7 -3
- data/lib/sakai-cle-test-api/announcements.rb +274 -7
- data/lib/sakai-cle-test-api/assessments.rb +930 -27
- data/lib/sakai-cle-test-api/assignments.rb +769 -13
- data/lib/sakai-cle-test-api/basic_lti.rb +5 -1
- data/lib/sakai-cle-test-api/blogs.rb +54 -2
- data/lib/sakai-cle-test-api/calendar.rb +423 -8
- data/lib/sakai-cle-test-api/chat_room.rb +0 -0
- data/lib/sakai-cle-test-api/common_page_elements.rb +69 -172
- data/lib/sakai-cle-test-api/core-ext.rb +90 -0
- data/lib/sakai-cle-test-api/data_objects/announcement.rb +38 -0
- data/lib/sakai-cle-test-api/data_objects/assessment.rb +32 -0
- data/lib/sakai-cle-test-api/data_objects/assignment.rb +62 -0
- data/lib/sakai-cle-test-api/data_objects/event.rb +86 -0
- data/lib/sakai-cle-test-api/data_objects/lesson.rb +137 -0
- data/lib/sakai-cle-test-api/data_objects/resource.rb +174 -0
- data/lib/sakai-cle-test-api/data_objects/site.rb +213 -0
- data/lib/sakai-cle-test-api/data_objects/syllabus.rb +7 -0
- data/lib/sakai-cle-test-api/data_objects/topic.rb +0 -0
- data/lib/sakai-cle-test-api/data_objects/web_content_tool.rb +52 -0
- data/lib/sakai-cle-test-api/data_objects/wiki.rb +7 -0
- data/lib/sakai-cle-test-api/drop_box.rb +21 -0
- data/lib/sakai-cle-test-api/email_archive.rb +15 -1
- data/lib/sakai-cle-test-api/forums.rb +282 -8
- data/lib/sakai-cle-test-api/gem_ext.rb +45 -0
- data/lib/sakai-cle-test-api/gradebook.rb +19 -1
- data/lib/sakai-cle-test-api/gradebook2.rb +15 -1
- data/lib/sakai-cle-test-api/lessons.rb +440 -0
- data/lib/sakai-cle-test-api/messages.rb +551 -15
- data/lib/sakai-cle-test-api/news.rb +3 -1
- data/lib/sakai-cle-test-api/polls.rb +65 -3
- data/lib/sakai-cle-test-api/profile.rb +36 -2
- data/lib/sakai-cle-test-api/profile2.rb +315 -6
- data/lib/sakai-cle-test-api/resources.rb +138 -0
- data/lib/sakai-cle-test-api/rich_text.rb +13 -0
- data/lib/sakai-cle-test-api/sections.rb +198 -8
- data/lib/sakai-cle-test-api/site_page_elements.rb +4 -441
- data/lib/sakai-cle-test-api/syllabus.rb +149 -7
- data/lib/sakai-cle-test-api/tools_menu.rb +3 -20
- data/lib/sakai-cle-test-api/utilities.rb +260 -0
- data/sakai-cle-test-api.gemspec +2 -3
- metadata +21 -19
@@ -1,5 +1,57 @@
|
|
1
|
-
|
1
|
+
module BlogsMenuButtons
|
2
|
+
include PageObject
|
3
|
+
|
4
|
+
def add_blog_entry
|
5
|
+
frm.link(:text=>"Add blog entry").click
|
6
|
+
AddBlogEntry.new @browser
|
7
|
+
end
|
8
|
+
|
9
|
+
end
|
10
|
+
|
2
11
|
class Blogs
|
3
12
|
include ToolsMenu
|
4
|
-
include
|
13
|
+
include BlogsMenuButtons
|
14
|
+
# Returns an array containing the list of Bloggers
|
15
|
+
# in the "All the blogs" table.
|
16
|
+
def blogger_list
|
17
|
+
bloggers = []
|
18
|
+
frm.table(:class=>"listHier lines").rows.each do |row|
|
19
|
+
bloggers << row[1].text
|
20
|
+
end
|
21
|
+
bloggers.delete_at(0)
|
22
|
+
return bloggers
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
class AddBlogEntry
|
27
|
+
include ToolsMenu
|
28
|
+
include BlogsMenuButtons
|
29
|
+
include PageObject
|
30
|
+
def blog_text=(text)
|
31
|
+
frm.frame(:id, "blog-text-input:1:input___Frame").td(:id, "xEditingArea").frame(:index=>0).wait_until_present
|
32
|
+
frm.frame(:id, "blog-text-input:1:input___Frame").td(:id, "xEditingArea").frame(:index=>0).send_keys(text)
|
33
|
+
end
|
34
|
+
|
35
|
+
def publish_entry
|
36
|
+
frm.button(:value=>"Publish entry").click
|
37
|
+
BlogsList.new @browser
|
38
|
+
end
|
39
|
+
|
40
|
+
def save_draft
|
41
|
+
frm.button(:value=>"Save Draft").click
|
42
|
+
BlogsList.new @browser
|
43
|
+
end
|
44
|
+
|
45
|
+
in_frame(:class=>"PortletMainIframe") do |frame|
|
46
|
+
text_field(:title, :name=>"title-input", :frame=>frame)
|
47
|
+
radio_button(:only_site_admins, :id=>"instructors-only-radio", :frame=>frame)
|
48
|
+
radio_button(:all_members, :id=>"all-members-radio", :frame=>frame)
|
49
|
+
radio_button(:publicly_viewable, :id=>"public-viewable-radio", :frame=>frame)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
class BlogsList
|
54
|
+
include ToolsMenu
|
55
|
+
|
56
|
+
include BlogsMenuButtons
|
5
57
|
end
|
@@ -1,3 +1,26 @@
|
|
1
|
+
module CalendarTools
|
2
|
+
|
3
|
+
#
|
4
|
+
def add_event
|
5
|
+
frm.link(:text=>"Add").click
|
6
|
+
frm.frame(:id, "description___Frame").td(:id, "xEditingArea").frame(:index=>0).wait_until_present
|
7
|
+
AddEditEvent.new(@browser)
|
8
|
+
end
|
9
|
+
|
10
|
+
#
|
11
|
+
def fields
|
12
|
+
frm.link(:text=>"Fields").click
|
13
|
+
AddEditFields.new(@browser)
|
14
|
+
end
|
15
|
+
|
16
|
+
#
|
17
|
+
def import
|
18
|
+
frm.link(:text=>"Import").click
|
19
|
+
ImportStepOne.new(@browser)
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
|
1
24
|
# Top page of the Calendar
|
2
25
|
# For now it includes all views, though that probably
|
3
26
|
# means it will have to be re-instantiated every time
|
@@ -5,47 +28,439 @@
|
|
5
28
|
class Calendar
|
6
29
|
include ToolsMenu
|
7
30
|
include CalendarTools
|
8
|
-
|
31
|
+
# Selects the specified item in the View select list,
|
32
|
+
# then reinstantiates the Class.
|
33
|
+
def select_view(item)
|
34
|
+
frm.select(:id=>"view").select(item)
|
35
|
+
Calendar.new(@browser)
|
36
|
+
end
|
37
|
+
|
38
|
+
# Selects the specified item in the View select list.
|
39
|
+
# This is the same method as the select_view method, except
|
40
|
+
# that it does not reinstantiate the class. Use this if you're
|
41
|
+
# not concerned about throwing obsolete element errors when
|
42
|
+
# the page updates.
|
43
|
+
def view=(item)
|
44
|
+
frm.select(:id=>"view").select(item)
|
45
|
+
end
|
46
|
+
|
47
|
+
# Selects the specified item in the Show select list.
|
48
|
+
def show=(item)
|
49
|
+
frm.select(:id=>"timeFilterOption").select(item)
|
50
|
+
end
|
51
|
+
|
52
|
+
# Returns the text of the Calendar's header.
|
53
|
+
def header
|
54
|
+
frm.div(:class=>"portletBody").h3.text
|
55
|
+
end
|
56
|
+
|
57
|
+
# This is the alert box object. If you want to
|
58
|
+
# get the text contents of the alert box, use
|
59
|
+
# alert_box.text. That will get you a string object
|
60
|
+
# that is the text contents.
|
61
|
+
def alert_box
|
62
|
+
frm.div(:class=>"alertMessage")
|
63
|
+
end
|
64
|
+
|
65
|
+
# Clicks the link to the specified event, then
|
66
|
+
# instantiates the EventDetail class.
|
67
|
+
def open_event(title)
|
68
|
+
truncated = title[0..5]
|
69
|
+
frm.link(:text=>/#{Regexp.escape(truncated)}/).click
|
70
|
+
EventDetail.new(@browser)
|
71
|
+
end
|
72
|
+
|
73
|
+
# Returns the href value of the target link
|
74
|
+
# use for validation when you are testing whether the link
|
75
|
+
# will appear again on another screen, since often times
|
76
|
+
# validation by title text alone will not work.
|
77
|
+
def event_href(title)
|
78
|
+
truncated = title[0..5]
|
79
|
+
return frm.link(:text=>/#{Regexp.escape(truncated)}/).href
|
80
|
+
end
|
81
|
+
|
82
|
+
def show_events=(item)
|
83
|
+
frm.select(:id=>"timeFilterOption").select(item)
|
84
|
+
end
|
85
|
+
|
86
|
+
# Selects the specified value in the start month select list.
|
87
|
+
def start_month=(item)
|
88
|
+
frm.select(:id=>"customStartMonth").select(item)
|
89
|
+
end
|
90
|
+
|
91
|
+
# Selects the specified value in the start day select list.
|
92
|
+
def start_day=(item)
|
93
|
+
frm.select(:id=>"customStartDay").select(item)
|
94
|
+
end
|
95
|
+
|
96
|
+
# Selects the specified value in the start year select list.
|
97
|
+
def start_year=(item)
|
98
|
+
frm.select(:id=>"customStartYear").select(item)
|
99
|
+
end
|
100
|
+
|
101
|
+
# Selects the specified value in the end month select list.
|
102
|
+
def end_month=(item)
|
103
|
+
frm.select(:id=>"customEndMonth").select(item)
|
104
|
+
end
|
105
|
+
|
106
|
+
# Selects the specified value in the End Day select list.
|
107
|
+
def end_day=(item)
|
108
|
+
frm.select(:id=>"customEndDay").select(item)
|
109
|
+
end
|
110
|
+
|
111
|
+
# Selects the specified value in the End Year select list.
|
112
|
+
def end_year=(item)
|
113
|
+
frm.select(:id=>"customEndYear").select(item)
|
114
|
+
end
|
115
|
+
|
116
|
+
# Clicks the Filter Events button, then re-instantiates
|
117
|
+
# the Calendar class to avoid the possibility of an
|
118
|
+
# ObsoleteElement error.
|
119
|
+
def filter_events
|
120
|
+
frm.button(:name=>"eventSubmit_doCustomdate").click
|
121
|
+
Calendar.new(@browser)
|
122
|
+
end
|
123
|
+
|
124
|
+
# Clicks the Go to Today button, then reinstantiates
|
125
|
+
# the Calendar class.
|
126
|
+
def go_to_today
|
127
|
+
frm.button(:value=>"Go to Today").click
|
128
|
+
Calendar.new(@browser)
|
129
|
+
end
|
130
|
+
|
131
|
+
# Returns an array of the titles of the displayed events.
|
132
|
+
def event_list
|
133
|
+
events_list
|
134
|
+
end
|
135
|
+
|
136
|
+
# Returns an array for the listed events.
|
137
|
+
# This array contains more than simply strings of the event titles, because
|
138
|
+
# often the titles are truncated to fit on the screen. In addition, getting the "title"
|
139
|
+
# tag of the link is often problematic because titles can contain double-quotes, which
|
140
|
+
# will mess up the HTML of the anchor tag (there is probably an XSS vulnerability to
|
141
|
+
# exploit, there. This should be extensively tested.).
|
142
|
+
#
|
143
|
+
# Because of these issues, the array contains the title tag, the anchor text, and
|
144
|
+
# the entire href string for every event listed on the page. Having all three items
|
145
|
+
# available should ensure that verification steps don't give false results--especially
|
146
|
+
# when you are doing a negative test (checking that an event is NOT present).
|
147
|
+
def events_list
|
148
|
+
list = []
|
149
|
+
if frm.table(:class=>"calendar").exist?
|
150
|
+
events_table = frm.table(:class=>"calendar")
|
151
|
+
else
|
152
|
+
events_table = frm.table(:class=>"listHier lines nolines")
|
153
|
+
end
|
154
|
+
events_table.links.each do |link|
|
155
|
+
list << link.title
|
156
|
+
list << link.text
|
157
|
+
list << link.href
|
158
|
+
list << link.html[/(?<="location=").+doDescription/]
|
159
|
+
end
|
160
|
+
list.compact!
|
161
|
+
list.uniq!
|
162
|
+
return list
|
163
|
+
end
|
164
|
+
|
165
|
+
# Clicks the "Previous X" button, where X might be Day, Week, or Month,
|
166
|
+
# then reinstantiates the Calendar class to ensure against any obsolete element
|
167
|
+
# errors.
|
168
|
+
def previous
|
169
|
+
frm.button(:name=>"eventSubmit_doPrev").click
|
170
|
+
Calendar.new(@browser)
|
171
|
+
end
|
172
|
+
|
173
|
+
# Clicks the "Next X" button, where X might be Day, Week, or Month,
|
174
|
+
# then reinstantiates the Calendar class to ensure against any obsolete element
|
175
|
+
# errors.
|
176
|
+
def next
|
177
|
+
frm.button(:name=>"eventSubmit_doNext").click
|
178
|
+
Calendar.new(@browser)
|
179
|
+
end
|
180
|
+
|
181
|
+
# Clicks the "Today" button and reinstantiates the class.
|
182
|
+
def today
|
183
|
+
frm.button(:value=>"Today").click
|
184
|
+
Calendar.new(@browser)
|
185
|
+
end
|
186
|
+
|
187
|
+
def earlier
|
188
|
+
frm().link(:text=>"Earlier").click
|
189
|
+
Calendar.new(@browser)
|
190
|
+
end
|
191
|
+
|
192
|
+
def later
|
193
|
+
frm().link(:text=>"Later").click
|
194
|
+
Calendar.new(@browser)
|
195
|
+
end
|
196
|
+
|
197
|
+
# Clicks the "Set as Default View" button
|
198
|
+
def set_as_default_view
|
199
|
+
frm.link(:text=>"Set as Default View").click
|
200
|
+
end
|
9
201
|
end
|
10
202
|
|
11
203
|
# The page that appears when you click on an event in the Calendar
|
12
204
|
class EventDetail
|
13
205
|
include ToolsMenu
|
14
206
|
include CalendarTools
|
15
|
-
|
207
|
+
# Clicks the Go to Today button, then instantiates
|
208
|
+
# the Calendar class.
|
209
|
+
def go_to_today
|
210
|
+
frm.button(:value=>"Go to Today").click
|
211
|
+
Calendar.new(@browser)
|
212
|
+
end
|
213
|
+
|
214
|
+
def back_to_calendar
|
215
|
+
frm.button(:value=>"Back to Calendar").click
|
216
|
+
Calendar.new(@browser)
|
217
|
+
end
|
218
|
+
|
219
|
+
def last_event
|
220
|
+
frm().button(:value=>"< Last Event").click
|
221
|
+
EventDetail.new(@browser)
|
222
|
+
end
|
223
|
+
|
224
|
+
def next_event
|
225
|
+
frm().button(:value=>"Next Event >").click
|
226
|
+
EventDetail.new(@browser)
|
227
|
+
end
|
228
|
+
|
229
|
+
def event_title
|
230
|
+
frm.div(:class=>"portletBody").h3.text
|
231
|
+
end
|
232
|
+
|
233
|
+
def edit
|
234
|
+
frm.button(:value=>"Edit").click
|
235
|
+
AddEditEvent.new(@browser)
|
236
|
+
end
|
237
|
+
|
238
|
+
def remove_event
|
239
|
+
frm.button(:value=>"Remove event").click
|
240
|
+
DeleteConfirm.new(@browser)
|
241
|
+
end
|
242
|
+
|
243
|
+
# Returns a hash object containing the contents of the event details
|
244
|
+
# table on the page, with each of the header column items as a Key
|
245
|
+
# and the associated data column as the corresponding Value.
|
246
|
+
def details
|
247
|
+
details = {}
|
248
|
+
frm.table(:class=>"itemSummary").rows.each do |row|
|
249
|
+
details.store(row.th.text, row.td.text)
|
250
|
+
end
|
251
|
+
return details
|
252
|
+
end
|
253
|
+
|
16
254
|
end
|
17
255
|
|
18
256
|
#
|
19
257
|
class AddEditEvent
|
20
258
|
include ToolsMenu
|
21
|
-
include
|
259
|
+
include PageObject
|
260
|
+
#
|
261
|
+
def save_event
|
262
|
+
frm.button(:value=>"Save Event").click
|
263
|
+
Calendar.new(@browser)
|
264
|
+
end
|
265
|
+
#
|
266
|
+
def message=(text)
|
267
|
+
frm.frame(:id, "description___Frame").td(:id, "xEditingArea").frame(:index=>0).send_keys(text)
|
268
|
+
end
|
269
|
+
|
270
|
+
# The FCKEditor object. Use this method to set up a "wait_until_present"
|
271
|
+
# step, since sometimes it takes a long time for this object to load.
|
272
|
+
def message_editor
|
273
|
+
frm.frame(:id, "description___Frame").td(:id, "xEditingArea").frame(:index=>0)
|
274
|
+
end
|
275
|
+
|
276
|
+
def frequency
|
277
|
+
frm.button(:name=>"eventSubmit_doEditfrequency").click
|
278
|
+
EventFrequency.new(@browser)
|
279
|
+
end
|
280
|
+
|
281
|
+
def add_attachments
|
282
|
+
frm.button(:value=>"Add Attachments").click
|
283
|
+
EventAttach.new(@browser)
|
284
|
+
end
|
285
|
+
|
286
|
+
def add_remove_attachments
|
287
|
+
frm.button(:value=>"Add/remove attachments").click
|
288
|
+
EventAttach.new(@browser)
|
289
|
+
end
|
290
|
+
|
291
|
+
# Returns true if the page has a link with the
|
292
|
+
# specified file name. Use for test case asserts.
|
293
|
+
def attachment?(file_name)
|
294
|
+
frm.link(:text=>file_name).exist?
|
295
|
+
end
|
296
|
+
|
297
|
+
# Use this method to enter text into custom fields
|
298
|
+
# on the page. The "field" variable is the name of the
|
299
|
+
# field, while the "text" is the string you want to put into
|
300
|
+
# it.
|
301
|
+
def custom_field_text(field, text)
|
302
|
+
frm.text_field(:name=>field).set(text)
|
303
|
+
end
|
304
|
+
|
305
|
+
in_frame(:class=>"portletMainIframe") do |frame|
|
306
|
+
text_field(:title, :id=>"activitytitle", :frame=>frame)
|
307
|
+
select_list(:month, :id=>"month", :frame=>frame)
|
308
|
+
select_list(:day, :id=>"day", :frame=>frame)
|
309
|
+
select_list(:year, :id=>"yearSelect", :frame=>frame)
|
310
|
+
select_list(:start_hour, :id=>"startHour", :frame=>frame)
|
311
|
+
select_list(:start_minute, :id=>"startMinute", :frame=>frame)
|
312
|
+
select_list(:start_meridian, :id=>"startAmpm", :frame=>frame)
|
313
|
+
select_list(:hours, :id=>"duHour", :frame=>frame)
|
314
|
+
select_list(:minutes, :id=>"duMinute", :frame=>frame)
|
315
|
+
select_list(:end_hour, :id=>"endHour", :frame=>frame)
|
316
|
+
select_list(:end_minute, :id=>"endMinute", :frame=>frame)
|
317
|
+
select_list(:end_meridian, :id=>"endAmpm", :frame=>frame)
|
318
|
+
radio_button(:display_to_site, :id=>"site", :frame=>frame)
|
319
|
+
select_list(:event_type, :id=>"eventType", :frame=>frame)
|
320
|
+
text_area(:location, :name=>"location", :frame=>frame)
|
321
|
+
|
322
|
+
end
|
22
323
|
end
|
23
324
|
|
24
325
|
# The page that appears when the Frequency button is clicked on the Add/Edit
|
25
326
|
# Event page.
|
26
327
|
class EventFrequency
|
27
328
|
include ToolsMenu
|
28
|
-
include
|
329
|
+
include PageObject
|
330
|
+
def save_frequency
|
331
|
+
frm.button(:value=>"Save Frequency").click
|
332
|
+
AddEditEvent.new(@browser)
|
333
|
+
end
|
334
|
+
|
335
|
+
def cancel
|
336
|
+
frm.button(:value=>"Cancel").click
|
337
|
+
AddEditEvent.new(@browser)
|
338
|
+
end
|
339
|
+
|
340
|
+
in_frame(:class=>"portletMainIframe") do |frame|
|
341
|
+
select_list(:event_frequency, :id=>"frequencySelect", :frame=>frame)
|
342
|
+
select_list(:interval, :id=>"interval", :frame=>frame)
|
343
|
+
select_list(:ends_after, :name=>"count", :frame=>frame)
|
344
|
+
select_list(:ends_month, :id=>"endMonth", :frame=>frame)
|
345
|
+
select_list(:ends_day, :id=>"endDay", :frame=>frame)
|
346
|
+
select_list(:ends_year, :id=>"endYear", :frame=>frame)
|
347
|
+
radio_button(:after, :id=>"count", :frame=>frame)
|
348
|
+
radio_button(:on, :id=>"till", :frame=>frame)
|
349
|
+
radio_button(:never, :id=>"never", :frame=>frame)
|
350
|
+
|
351
|
+
end
|
29
352
|
end
|
30
353
|
|
31
354
|
class AddEditFields
|
32
355
|
include ToolsMenu
|
33
|
-
include
|
356
|
+
include PageObject
|
357
|
+
# Clicks the Save Field Changes buton and instantiates
|
358
|
+
# The Calendar or EventDetail class--unless the Alert Message box appears,
|
359
|
+
# in which case it re-instantiates the class.
|
360
|
+
def save_field_changes
|
361
|
+
frm.button(:value=>"Save Field Changes").click
|
362
|
+
if frm.div(:class=>"alertMessage").exist?
|
363
|
+
AddEditFields.new(@browser)
|
364
|
+
elsif frm.button(:value=>"Back to Calendar").exist?
|
365
|
+
EventDetail.new(@browser)
|
366
|
+
else
|
367
|
+
Calendar.new(@browser)
|
368
|
+
end
|
369
|
+
end
|
370
|
+
|
371
|
+
# Returns a string of the contents of the Alert box.
|
372
|
+
def alert_box
|
373
|
+
frm.div(:class=>"alertMessage").text
|
374
|
+
end
|
375
|
+
|
376
|
+
def create_field
|
377
|
+
frm.button(:value=>"Create Field").click
|
378
|
+
AddEditFields.new(@browser)
|
379
|
+
end
|
380
|
+
|
381
|
+
# Checks the checkbox for the specified field
|
382
|
+
def check_remove(field_name)
|
383
|
+
frm.table(:class=>/listHier lines/).row(:text=>/#{Regexp.escape(field_name)}/).checkbox.set
|
384
|
+
end
|
385
|
+
|
386
|
+
in_frame(:class=>"portletMainIframe") do |frame|
|
387
|
+
text_field(:field_name, :id=>"textfield", :frame=>frame)
|
388
|
+
|
389
|
+
end
|
34
390
|
end
|
35
391
|
|
36
392
|
class ImportStepOne
|
37
393
|
include ToolsMenu
|
38
|
-
include
|
394
|
+
include PageObject
|
395
|
+
def continue
|
396
|
+
frm.button(:value=>"Continue").click
|
397
|
+
ImportStepTwo.new(@browser)
|
398
|
+
end
|
399
|
+
|
400
|
+
in_frame(:class=>"portletMainIframe") do |frame|
|
401
|
+
radio_button(:microsoft_outlook, :id=>"importType_Outlook", :frame=>frame)
|
402
|
+
radio_button(:meeting_maker, :id=>"importType_MeetingMaker", :frame=>frame)
|
403
|
+
radio_button(:generic_calendar_import, :id=>"importType_Generic", :frame=>frame)
|
404
|
+
|
405
|
+
end
|
39
406
|
end
|
40
407
|
|
41
408
|
class ImportStepTwo
|
42
409
|
include ToolsMenu
|
43
|
-
|
410
|
+
def continue
|
411
|
+
frm.button(:value=>"Continue").click
|
412
|
+
ImportStepThree.new(@browser)
|
413
|
+
end
|
414
|
+
|
415
|
+
# Enters the specified filename in the file field.
|
416
|
+
#
|
417
|
+
# Note that the file path is an optional second parameter, if you do not want to
|
418
|
+
# include the full path in the filename.
|
419
|
+
def import_file(filename, filepath="")
|
420
|
+
frm.file_field(:name=>"importFile").set(filepath + filename)
|
421
|
+
end
|
44
422
|
end
|
45
423
|
|
46
424
|
class ImportStepThree
|
47
425
|
include ToolsMenu
|
48
|
-
include
|
426
|
+
include PageObject
|
427
|
+
def import_events
|
428
|
+
frm.button(:value=>"Import Events").click
|
429
|
+
Calendar.new(@browser)
|
430
|
+
end
|
431
|
+
|
432
|
+
# Returns an array containing the list of Activity names on the page.
|
433
|
+
def events
|
434
|
+
list = []
|
435
|
+
frm.table(:class=>/listHier lines/).rows.each do |row|
|
436
|
+
if row.label(:for=>/eventSelected/).exist?
|
437
|
+
list << row.label.text
|
438
|
+
end
|
439
|
+
end
|
440
|
+
names = []
|
441
|
+
list.uniq!
|
442
|
+
list.each do | item |
|
443
|
+
name = item[/(?<=\s).+(?=\s\s\()/]
|
444
|
+
names << name
|
445
|
+
end
|
446
|
+
return names
|
447
|
+
end
|
448
|
+
|
449
|
+
# Returns the date of the specified event
|
450
|
+
def event_date(event_name)
|
451
|
+
frm.table(:class=>/listHier lines/).row(:text=>/#{Regexp.escape(event_name)}/)[0].text
|
452
|
+
end
|
453
|
+
|
454
|
+
# Unchecks the checkbox for the specified event
|
455
|
+
def uncheck_event(event_name)
|
456
|
+
frm.table(:class=>/listHier lines/).row(:text=>/#{Regexp.escape(event_name)}/)
|
457
|
+
end
|
458
|
+
|
459
|
+
in_frame(:class=>"portletMainIframe") do |frame|
|
460
|
+
radio_button(:import_events_for_site, :id=>"site", :frame=>frame)
|
461
|
+
radio_button(:import_events_for_selected_groups, :id=>"groups", :frame=>frame)
|
462
|
+
|
463
|
+
end
|
49
464
|
end
|
50
465
|
|
51
466
|
# TODO: Rethink this!!!
|