spec: fix flaky text expectations, refs SD-1145
and misc cleanup on surrounding lines notes: * include_text now only works on elements, not strings * include_text now waits * include_text barfs if you wrap it in a redundant keep_trying_until Change-Id: I164cb8177aecc1fee92053a5468dfdfaf26c7576 Reviewed-on: https://gerrit.instructure.com/79780 Reviewed-by: Landon Wilkins <lwilkins@instructure.com> Tested-by: Jenkins Product-Review: Jon Jensen <jon@instructure.com> QA-Review: Jon Jensen <jon@instructure.com> Reviewed-by: Jon Jensen <jon@instructure.com>
This commit is contained in:
parent
1aa17241b8
commit
3d4c568111
|
@ -11,6 +11,7 @@ module RuboCop
|
|||
describe
|
||||
shared_context
|
||||
shared_examples
|
||||
shared_examples_for
|
||||
].freeze
|
||||
|
||||
def on_def(node)
|
||||
|
|
|
@ -63,9 +63,8 @@ describe "account admin courses tab" do
|
|||
name = name.split(" ")
|
||||
f("#course_name").send_keys(name[0])
|
||||
f("#course_name").send_keys(" "+name[1])
|
||||
ff(".ui-menu-item .ui-corner-all").count > 0
|
||||
keep_trying_until { expect(fj(".ui-menu-item .ui-corner-all:visible").text).to include_text(course.name) }
|
||||
expect_new_page_load { fj("#new_course button").click }
|
||||
expect(fj(".ui-menu-item .ui-corner-all:visible")).to include_text(course.name)
|
||||
expect_new_page_load { f("#new_course button").click }
|
||||
expect(f("#crumb_course_#{course.id}")).to be_displayed
|
||||
end
|
||||
|
||||
|
|
|
@ -24,12 +24,12 @@ describe "settings tabs" do
|
|||
submit_form("#add_notification_form")
|
||||
wait_for_ajax_requests
|
||||
notification = AccountNotification.first
|
||||
expect(notification.message).to include_text("this is a message")
|
||||
expect(notification.subject).to include_text(subject)
|
||||
expect(notification.message).to include("this is a message")
|
||||
expect(notification.subject).to include(subject)
|
||||
expect(notification.start_at.day).to eq 1
|
||||
expect(notification.end_at.day).to eq 15
|
||||
login_text = f("#header .user_name").text
|
||||
expect(f("#tab-announcements .announcement-details").text).to include_text(login_text)
|
||||
expect(f("#tab-announcements .announcement-details")).to include_text(login_text)
|
||||
expect(f("#tab-announcements .notification_subject").text).to eq subject
|
||||
expect(f("#tab-announcements .notification_message").text).to eq "this is a message"
|
||||
end
|
||||
|
|
|
@ -190,7 +190,7 @@ describe "admin settings tab" do
|
|||
|
||||
it "should click on the quiz help link" do
|
||||
f(".ip_help_link").click
|
||||
expect(f("#ip_filters_dialog").text).to include_text "What are Quiz IP Filters?"
|
||||
expect(f("#ip_filters_dialog")).to include_text "What are Quiz IP Filters?"
|
||||
end
|
||||
|
||||
it "should add a quiz filter " do
|
||||
|
|
|
@ -115,7 +115,7 @@ describe "new account user search" do
|
|||
f('#peopleOptionsBtn').click
|
||||
f('#manageStudentsLink').click
|
||||
|
||||
expect(driver.current_url).to include_text("/accounts/#{@account.id}/avatars")
|
||||
expect(driver.current_url).to include("/accounts/#{@account.id}/avatars")
|
||||
end
|
||||
|
||||
it "should link to the user group page" do
|
||||
|
@ -128,6 +128,6 @@ describe "new account user search" do
|
|||
f('#peopleOptionsBtn').click
|
||||
f('#viewUserGroupLink').click
|
||||
|
||||
expect(driver.current_url).to include_text("/accounts/#{@account.id}/groups")
|
||||
expect(driver.current_url).to include("/accounts/#{@account.id}/groups")
|
||||
end
|
||||
end
|
||||
|
|
|
@ -91,18 +91,18 @@ describe "site admin jobs ui" do
|
|||
ff("#jobs-grid .slick-row .l0.r0").find do |element|
|
||||
element.click if element.text == job.id.to_s
|
||||
end
|
||||
expect(fj('#job-id').text).to eq job.id.to_s
|
||||
fj('#job-handler-show').click()
|
||||
expect(f('#job-id').text).to eq job.id.to_s
|
||||
f('#job-handler-show').click
|
||||
wait_for_ajax_requests
|
||||
expect(get_value('#job-handler')).to eq job.handler
|
||||
fj('a.ui-dialog-titlebar-close').click()
|
||||
f('a.ui-dialog-titlebar-close').click
|
||||
|
||||
# also for failed job
|
||||
filter_jobs(FlavorTags::FAILED)
|
||||
wait_for_ajax_requests
|
||||
fj('#jobs-grid .slick-row .l0.r0').click()
|
||||
expect(fj('#job-id').text).to eq @failed_job.id.to_s
|
||||
fj('#job-handler-show').click()
|
||||
f('#jobs-grid .slick-row .l0.r0').click
|
||||
expect(f('#job-id').text).to eq @failed_job.id.to_s
|
||||
f('#job-handler-show').click
|
||||
wait_for_ajax_requests
|
||||
expect(get_value('#job-handler')).to eq @failed_job.handler
|
||||
end
|
||||
|
@ -195,7 +195,7 @@ describe "site admin jobs ui" do
|
|||
f("#jobs-refresh").click
|
||||
wait_for_ajax_requests
|
||||
expect(ff("#jobs-grid .slick-row").count).to eq 1
|
||||
expect(f("#jobs-grid .r1").text).to include_text "String#downcase"
|
||||
expect(f("#jobs-grid .r1")).to include_text "String#downcase"
|
||||
end
|
||||
|
||||
it "should confirm that clicking on delete button should delete all future jobs" do
|
||||
|
|
|
@ -29,7 +29,7 @@ describe "discussion assignments" do
|
|||
get "/courses/#{@course.id}/assignments"
|
||||
expect_new_page_load { build_assignment_with_type("Discussion", :assignment_group_id => ag.id, :name => "More options created discussion", :points => '30', :more_options => true)}
|
||||
#check the content of the discussion page for our set point value and name and the URL to make sure were in /discussions
|
||||
expect(driver.current_url).to include_text("discussion_topics/new?assignment_group_id=#{ag.id}&due_at=null&points_possible=30&title=More+options+created+discussion")
|
||||
expect(driver.current_url).to include("discussion_topics/new?assignment_group_id=#{ag.id}&due_at=null&points_possible=30&title=More+options+created+discussion")
|
||||
expect(f('#discussion-title').attribute(:value)).to eq "More options created discussion"
|
||||
expect(f('#discussion_topic_assignment_points_possible').attribute(:value)).to eq "30"
|
||||
end
|
||||
|
|
|
@ -45,9 +45,9 @@ describe 'assignments' do
|
|||
f('.more_options').click
|
||||
|
||||
expect(f('#edit_assignment_header')).to be
|
||||
expect(f('#assignment_name').attribute(:value)).to include_text(@assignment_name)
|
||||
expect(f('#assignment_points_possible').attribute(:value)).to include_text(@assignment_points)
|
||||
expect(f('input.date_field.datePickerDateField.DueDateInput.datetime_field_enabled.hasDatepicker').attribute(:value)).to include_text('Jul 31')
|
||||
expect(f('#assignment_name').attribute(:value)).to include(@assignment_name)
|
||||
expect(f('#assignment_points_possible').attribute(:value)).to include(@assignment_points)
|
||||
expect(f('input.date_field.datePickerDateField.DueDateInput.datetime_field_enabled.hasDatepicker').attribute(:value)).to include('Jul 31')
|
||||
end
|
||||
|
||||
it 'should work for discussions and transfer values', priority:"1", test_id: 58760 do
|
||||
|
@ -55,9 +55,9 @@ describe 'assignments' do
|
|||
f('.more_options').click
|
||||
|
||||
expect(f('.discussion-edit-header')).to be
|
||||
expect(f('#discussion-title').attribute(:value)).to include_text(@assignment_name)
|
||||
expect(f('#discussion_topic_assignment_points_possible').attribute(:value)).to include_text(@assignment_points)
|
||||
expect(f('input.date_field.datePickerDateField.DueDateInput.datetime_field_enabled.hasDatepicker').attribute(:value)).to include_text('Jul 31')
|
||||
expect(f('#discussion-title').attribute(:value)).to include(@assignment_name)
|
||||
expect(f('#discussion_topic_assignment_points_possible').attribute(:value)).to include(@assignment_points)
|
||||
expect(f('input.date_field.datePickerDateField.DueDateInput.datetime_field_enabled.hasDatepicker').attribute(:value)).to include('Jul 31')
|
||||
end
|
||||
|
||||
it 'should work for quizzes and transfer values', priority:"1", test_id: 238873 do
|
||||
|
@ -65,8 +65,8 @@ describe 'assignments' do
|
|||
f('.more_options').click
|
||||
|
||||
expect(f('#quiz_edit_wrapper')).to be
|
||||
expect(f('#quiz_title').attribute(:value)).to include_text(@assignment_name)
|
||||
expect(f('input.date_field.datePickerDateField.DueDateInput.datetime_field_enabled.hasDatepicker').attribute(:value)).to include_text('Jul 31')
|
||||
expect(f('#quiz_title').attribute(:value)).to include(@assignment_name)
|
||||
expect(f('input.date_field.datePickerDateField.DueDateInput.datetime_field_enabled.hasDatepicker').attribute(:value)).to include('Jul 31')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -81,7 +81,7 @@ describe 'assignments' do
|
|||
get "/courses/#{@course.id}/assignments"
|
||||
click_cog_to_edit
|
||||
|
||||
expect(f("#assign_#{assignment.id}_assignment_name").attribute(:value)).to include_text(@title)
|
||||
expect(f("#assign_#{assignment.id}_assignment_name").attribute(:value)).to include(@title)
|
||||
end
|
||||
|
||||
it 'should work with a quiz', priority:"1", test_id: 269809 do
|
||||
|
@ -89,14 +89,14 @@ describe 'assignments' do
|
|||
get "/courses/#{@course.id}/assignments"
|
||||
click_cog_to_edit
|
||||
|
||||
expect(f("#assign_#{assignment.id}_assignment_name").attribute(:value)).to include_text(@title)
|
||||
expect(f("#assign_#{assignment.id}_assignment_name").attribute(:value)).to include(@title)
|
||||
end
|
||||
|
||||
it 'should work with a graded discussion', priority:"1", test_id: 269810 do
|
||||
assignment = @course.assignments.create!(name: @title, submission_types: 'discussion_topic')
|
||||
get "/courses/#{@course.id}/assignments"
|
||||
click_cog_to_edit
|
||||
expect(f("#assign_#{assignment.id}_assignment_name").attribute(:value)).to include_text(@title)
|
||||
expect(f("#assign_#{assignment.id}_assignment_name").attribute(:value)).to include(@title)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -123,7 +123,7 @@ describe "assignments" do
|
|||
|
||||
#save changes
|
||||
submit_assignment_form
|
||||
expect(driver.execute_script("return document.title")).to include_text(assignment_name + ' edit')
|
||||
expect(driver.title).to include(assignment_name + ' edit')
|
||||
end
|
||||
|
||||
it "should create an assignment using main add button", priority: "1", test_id: 132582 do
|
||||
|
@ -456,7 +456,7 @@ describe "assignments" do
|
|||
f("#assignment_#{@assignment.id} .publish-icon").click
|
||||
wait_for_ajaximations
|
||||
expect(@assignment.reload).to be_published
|
||||
keep_trying_until { expect(f("#assignment_#{@assignment.id} .publish-icon").attribute('aria-label')).to include_text("Published") }
|
||||
keep_trying_until { expect(f("#assignment_#{@assignment.id} .publish-icon").attribute('aria-label')).to include("Published") }
|
||||
end
|
||||
|
||||
it "shows submission scores for students on index page", priority: "2", test_id: 647850 do
|
||||
|
|
|
@ -197,8 +197,8 @@ describe "calendar2" do
|
|||
f(".ig-row").click
|
||||
|
||||
#expect to find the location name and address
|
||||
expect(f('.event-details-content').text).to include_text(location_name)
|
||||
expect(f('.event-details-content').text).to include_text(location_address)
|
||||
expect(f('.event-details-content')).to include_text(location_name)
|
||||
expect(f('.event-details-content')).to include_text(location_address)
|
||||
end
|
||||
|
||||
it "should bring up a calendar date picker when clicking on the agenda range", priority: "1", test_id: 140223 do
|
||||
|
@ -209,8 +209,8 @@ describe "calendar2" do
|
|||
|
||||
# Expect that a the event picker is present
|
||||
# Check various elements to verify that the calendar looks good
|
||||
expect(f('.ui-datepicker-header').text).to include_text(Time.now.utc.strftime("%B"))
|
||||
expect(f('.ui-datepicker-calendar').text).to include_text("Mo")
|
||||
expect(f('.ui-datepicker-header')).to include_text(Time.now.utc.strftime("%B"))
|
||||
expect(f('.ui-datepicker-calendar')).to include_text("Mo")
|
||||
end
|
||||
|
||||
it "show quizes on agenda view", priority: "1", test_id: 138850 do
|
||||
|
@ -236,13 +236,13 @@ describe "calendar2" do
|
|||
|
||||
# Verify Titles include section name
|
||||
agenda_array = ff('.ig-row')
|
||||
expect(f('.ig-title', agenda_array[1]).text).to include_text('Section1')
|
||||
expect(f('.ig-title', agenda_array[2]).text).to include_text('Section2')
|
||||
expect(f('.ig-title', agenda_array[1])).to include_text('Section1')
|
||||
expect(f('.ig-title', agenda_array[2])).to include_text('Section2')
|
||||
|
||||
# Verify Dates
|
||||
date_array = ff('.agenda-day')
|
||||
expect(f('.agenda-date', date_array[1]).text).to include_text(format_date_for_view(s1_date, :short_with_weekday))
|
||||
expect(f('.agenda-date', date_array[2]).text).to include_text(format_date_for_view(s2_date, :short_with_weekday))
|
||||
expect(f('.agenda-date', date_array[1])).to include_text(format_date_for_view(s1_date, :short_with_weekday))
|
||||
expect(f('.agenda-date', date_array[2])).to include_text(format_date_for_view(s2_date, :short_with_weekday))
|
||||
end
|
||||
|
||||
context "with a graded discussion created" do
|
||||
|
|
|
@ -80,7 +80,7 @@ describe "calendar2" do
|
|||
replace_content(f('.ui-dialog #assignment_title'), "Assignment 2!")
|
||||
submit_form('#edit_assignment_form')
|
||||
wait_for_ajaximations
|
||||
expect(assignment2.reload.title).to include_text("Assignment 2!")
|
||||
expect(assignment2.reload.title).to include("Assignment 2!")
|
||||
expect(assignment2.assignment_group).to eq group2
|
||||
end
|
||||
|
||||
|
@ -89,7 +89,7 @@ describe "calendar2" do
|
|||
get "/calendar2"
|
||||
f('.fc-event').click
|
||||
wait_for_ajaximations
|
||||
driver.execute_script("$('.edit_event_link').hover().click()")
|
||||
hover_and_click '.edit_event_link'
|
||||
wait_for_ajaximations
|
||||
original_more_options = f('.more_options_link')['href']
|
||||
expect(original_more_options).not_to match(/undefined/)
|
||||
|
@ -98,13 +98,13 @@ describe "calendar2" do
|
|||
wait_for_ajaximations
|
||||
assignment.reload
|
||||
wait_for_ajaximations
|
||||
expect(assignment.title).to include_text("edited title")
|
||||
expect(assignment.title).to include("edited title")
|
||||
|
||||
fj('.fc-event').click
|
||||
f('.fc-event').click
|
||||
wait_for_ajaximations
|
||||
driver.execute_script("$('.edit_event_link').hover().click()")
|
||||
hover_and_click '.edit_event_link'
|
||||
wait_for_ajaximations
|
||||
expect(fj('.more_options_link')['href']).to match(original_more_options)
|
||||
expect(f('.more_options_link')['href']).to match(original_more_options)
|
||||
end
|
||||
|
||||
it "should make an assignment undated if you delete the start date" do
|
||||
|
@ -121,7 +121,7 @@ describe "calendar2" do
|
|||
wait_for_ajax_requests
|
||||
f("#undated-events-button").click
|
||||
expect(f("#content")).not_to contain_css('.fc-event')
|
||||
expect(f('.undated_event_title').text).to include_text("undate me")
|
||||
expect(f('.undated_event_title')).to include_text("undate me")
|
||||
end
|
||||
|
||||
context "event editing", priority: "1", test_id: 138853 do
|
||||
|
|
|
@ -320,7 +320,7 @@ describe "calendar2" do
|
|||
change_calendar(:next)
|
||||
|
||||
# Verify known dates in calendar header and grid
|
||||
expect(header_text).to include_text('February 2012')
|
||||
expect(header_text).to include('February 2012')
|
||||
first_wednesday = '.fc-day-number.fc-wed:first'
|
||||
expect(fj(first_wednesday).text).to eq('1')
|
||||
expect(fj(first_wednesday).attribute('data-date')).to eq('2012-02-01')
|
||||
|
@ -335,7 +335,7 @@ describe "calendar2" do
|
|||
change_calendar(:prev)
|
||||
|
||||
# Verify known dates in calendar header and grid
|
||||
expect(header_text).to include_text('December 2011')
|
||||
expect(header_text).to include('December 2011')
|
||||
first_thursday = '.fc-day-number.fc-thu:first'
|
||||
expect(fj(first_thursday).text).to eq('1')
|
||||
expect(fj(first_thursday).attribute('data-date')).to eq('2011-12-01')
|
||||
|
@ -427,8 +427,8 @@ describe "calendar2" do
|
|||
find(".fc-event").click
|
||||
|
||||
#expect to find the location name and address
|
||||
expect(find('.event-details-content').text).to include_text(location_name)
|
||||
expect(find('.event-details-content').text).to include_text(location_address)
|
||||
expect(find('.event-details-content')).to include_text(location_name)
|
||||
expect(find('.event-details-content')).to include_text(location_address)
|
||||
end
|
||||
|
||||
it "should bring up a calendar date picker when clicking on the month" do
|
||||
|
@ -439,8 +439,8 @@ describe "calendar2" do
|
|||
|
||||
# Expect that a the event picker is present
|
||||
# Check various elements to verify that the calendar looks good
|
||||
expect(find('.ui-datepicker-header').text).to include_text(Time.now.utc.strftime("%B"))
|
||||
expect(find('.ui-datepicker-calendar').text).to include_text("Mo")
|
||||
expect(find('.ui-datepicker-header')).to include_text(Time.now.utc.strftime("%B"))
|
||||
expect(find('.ui-datepicker-calendar')).to include_text("Mo")
|
||||
end
|
||||
|
||||
it "should strikethrough past due assignment", priority: "1", test_id: 518370 do
|
||||
|
|
|
@ -166,9 +166,9 @@ describe "scheduler" do
|
|||
click_scheduler_link
|
||||
|
||||
# Index page should show correct elements for appointment groups
|
||||
expect(f(".view_calendar_link").text).to include_text(title)
|
||||
expect(f(".ag-context").text).to include @course.name.to_s #include context
|
||||
expect(f(".ag-location").text).to include_text(location)
|
||||
expect(f(".view_calendar_link")).to include_text(title)
|
||||
expect(f(".ag-context")).to include_text @course.name.to_s
|
||||
expect(f(".ag-location")).to include_text(location)
|
||||
end
|
||||
|
||||
context "when un-reserving appointments" do
|
||||
|
|
|
@ -149,10 +149,10 @@ describe "scheduler" do
|
|||
click_scheduler_link
|
||||
|
||||
# Index page should show correct elements for appointment groups
|
||||
expect(f(".view_calendar_link").text).to include_text(title)
|
||||
expect(f(".ag-context").text).to include @course.name.to_s #include context
|
||||
expect(f(".ag-location").text).to include location
|
||||
expect(f(".ag-x-of-x-signed-up").text).to include "people have signed up"
|
||||
expect(f(".view_calendar_link")).to include_text(title)
|
||||
expect(f(".ag-context")).to include_text @course.name.to_s
|
||||
expect(f(".ag-location")).to include_text location
|
||||
expect(f(".ag-x-of-x-signed-up")).to include_text "people have signed up"
|
||||
expect(f(".icon-settings")).not_to be_nil #Gear icon present
|
||||
end
|
||||
end
|
||||
|
|
|
@ -155,7 +155,7 @@ describe "calendar2" do
|
|||
change_calendar(:next)
|
||||
|
||||
# Verify Week and Day labels are correct
|
||||
expect(header_text).to include_text("Jan 8 — 14, 2012")
|
||||
expect(header_text).to include("Jan 8 — 14, 2012")
|
||||
expect(f('.fc-sun')).to include_text('SUN 1/8')
|
||||
end
|
||||
|
||||
|
@ -166,7 +166,7 @@ describe "calendar2" do
|
|||
# Click non all-day event
|
||||
fj('.fc-agendaWeek-view .fc-time-grid .fc-slats .fc-widget-content:not(.fc-axis):first').click
|
||||
event_from_modal(title,false,false)
|
||||
expect(f('.fc-title').text).to include title
|
||||
expect(f('.fc-title')).to include_text title
|
||||
end
|
||||
|
||||
it "should create all day event on week calendar", priority: "1", test_id: 138865 do
|
||||
|
@ -174,9 +174,9 @@ describe "calendar2" do
|
|||
load_week_view
|
||||
|
||||
# click all day event
|
||||
fj('.fc-agendaWeek-view .fc-week .fc-wed').click
|
||||
f('.fc-agendaWeek-view .fc-week .fc-wed').click
|
||||
event_from_modal(title,false,false)
|
||||
expect(f('.fc-title').text).to include title
|
||||
expect(f('.fc-title')).to include_text title
|
||||
end
|
||||
|
||||
it "should have a working today button", priority: "1", test_id: 142042 do
|
||||
|
@ -209,8 +209,8 @@ describe "calendar2" do
|
|||
f(".fc-event").click
|
||||
|
||||
# expect to find the location name and address
|
||||
expect(f('.event-details-content').text).to include_text(location_name)
|
||||
expect(f('.event-details-content').text).to include_text(location_address)
|
||||
expect(f('.event-details-content')).to include_text(location_name)
|
||||
expect(f('.event-details-content')).to include_text(location_address)
|
||||
end
|
||||
|
||||
it "should bring up a calendar date picker when clicking on the week range", priority: "2", test_id: 768985 do
|
||||
|
@ -220,8 +220,8 @@ describe "calendar2" do
|
|||
|
||||
# Expect that a the event picker is present
|
||||
# Check various elements to verify that the calendar looks good
|
||||
expect(f('.ui-datepicker-header').text).to include_text(Time.now.utc.strftime("%B"))
|
||||
expect(f('.ui-datepicker-calendar').text).to include_text("Mo")
|
||||
expect(f('.ui-datepicker-header')).to include_text(Time.now.utc.strftime("%B"))
|
||||
expect(f('.ui-datepicker-calendar')).to include_text("Mo")
|
||||
end
|
||||
|
||||
it "should extend event time by dragging", priority: "1", test_id: 138864 do
|
||||
|
|
|
@ -226,11 +226,7 @@ describe "context modules" do
|
|||
f('.delete_item_link').click
|
||||
expect(driver.switch_to.alert).not_to be_nil
|
||||
driver.switch_to.alert.accept
|
||||
wait_for_ajaximations
|
||||
keep_trying_until do
|
||||
expect(f('.context_module_items')).not_to include_text(@assignment.title)
|
||||
true
|
||||
end
|
||||
expect(f('.context_module_items')).not_to include_text(@assignment.title)
|
||||
end
|
||||
|
||||
it "should edit a module item and validate the changes stick", priority: "1", test_id: 126737 do
|
||||
|
@ -1274,7 +1270,7 @@ describe "context modules" do
|
|||
go_to_modules
|
||||
verify_persistence('Graded Unpublished Discussion')
|
||||
expect(f('span.publish-icon.unpublished.publish-icon-publish > i.icon-unpublish')).to be_displayed
|
||||
expect(f('.points_possible_display').text).to include_text "10 pts"
|
||||
expect(f('.points_possible_display')).to include_text "10 pts"
|
||||
end
|
||||
|
||||
it 'should add a graded published discussion to a module', priority: "1", test_id: 126715 do
|
||||
|
@ -1285,7 +1281,7 @@ describe "context modules" do
|
|||
go_to_modules
|
||||
verify_persistence('Graded Published Discussion')
|
||||
expect(f('span.publish-icon.published.publish-icon-published')).to be_displayed
|
||||
expect(f('.points_possible_display').text).to include_text "10 pts"
|
||||
expect(f('.points_possible_display')).to include_text "10 pts"
|
||||
end
|
||||
|
||||
it 'should add a graded published discussion with a due date to a module', priority: "1", test_id: 126716 do
|
||||
|
@ -1299,7 +1295,7 @@ describe "context modules" do
|
|||
expect(f('span.publish-icon.published.publish-icon-published')).to be_displayed
|
||||
expect(f('.due_date_display').text).not_to be_blank
|
||||
expect(f('.due_date_display').text).to eq date_string(@due_at, :no_words)
|
||||
expect(f('.points_possible_display').text).to include_text "10 pts"
|
||||
expect(f('.points_possible_display')).to include_text "10 pts"
|
||||
end
|
||||
end
|
||||
context 'edit inline items on module page' do
|
||||
|
|
|
@ -236,7 +236,7 @@ describe "context modules" do
|
|||
it "should lock module until a given date", priority: "1", test_id: 126741 do
|
||||
mod_lock = @course.context_modules.create! name: 'a_locked_mod', unlock_at: 1.day.from_now
|
||||
go_to_modules
|
||||
expect(fj("#context_module_content_#{mod_lock.id} .unlock_details").text).to include_text 'Will unlock'
|
||||
expect(fj("#context_module_content_#{mod_lock.id} .unlock_details")).to include_text 'Will unlock'
|
||||
end
|
||||
|
||||
it "should allow a student view student to progress through module content" do
|
||||
|
@ -658,14 +658,14 @@ describe "context modules" do
|
|||
go_to_modules
|
||||
# for a11y there is a hidden header now that gets read as part of the text hence the regex matching
|
||||
expect(f("#context_modules").text).to match(/module\s*module/)
|
||||
expect(f("#context_modules").text).not_to include_text "module_1"
|
||||
expect(f("#context_modules")).not_to include_text "module_1"
|
||||
end
|
||||
|
||||
it "should unlock module after a given date", priority: "1", test_id: 126746 do
|
||||
mod_lock = @course.context_modules.create! name: 'a_locked_mod', unlock_at: 1.day.ago
|
||||
user_session(@student)
|
||||
go_to_modules
|
||||
expect(fj("#context_module_content_#{mod_lock.id} .unlock_details").text).not_to include_text 'Will unlock'
|
||||
expect(fj("#context_module_content_#{mod_lock.id} .unlock_details")).not_to include_text 'Will unlock'
|
||||
end
|
||||
|
||||
it "should mark locked but visible assignments/quizzes/discussions as read" do
|
||||
|
|
|
@ -49,10 +49,10 @@ describe "conversations new" do
|
|||
time = format_time_for_view(UserNote.last.updated_at)
|
||||
remove_user_session
|
||||
get student_user_notes_url
|
||||
expect(f('.subject').text).to include_text('Christmas')
|
||||
expect(f('.subject')).to include_text('Christmas')
|
||||
expect(f('.user_content').text).to eq 'The Fat Man cometh.'
|
||||
expect(f('.creator_name').text).to include_text(@teacher.name)
|
||||
expect(f('.creator_name').text).to include_text(time)
|
||||
expect(f('.creator_name')).to include_text(@teacher.name)
|
||||
expect(f('.creator_name')).to include_text(time)
|
||||
end
|
||||
|
||||
it "should allow an admin to delete a Journal message", priority: "1", test_id: 75703 do
|
||||
|
@ -80,7 +80,7 @@ describe "conversations new" do
|
|||
get student_user_notes_url
|
||||
expect(f('.subject').text).to eq 'FJ Title 2'
|
||||
expect(f('.user_content').text).to eq 'FJ Body text 2'
|
||||
expect(f('.creator_name').text).to include_text(time)
|
||||
expect(f('.creator_name')).to include_text(time)
|
||||
end
|
||||
|
||||
it "should clear the subject and body when cancel is clicked", priority: "1", test_id: 458518 do
|
||||
|
|
|
@ -67,52 +67,52 @@ describe "conversations new" do
|
|||
end
|
||||
|
||||
it "should have a courses dropdown", priority: "1", test_id: 117960 do
|
||||
fj("[data-id = 'course-filter']").click
|
||||
f("[data-id = 'course-filter']").click
|
||||
wait_for_ajaximations
|
||||
|
||||
# Verify course filter is open
|
||||
expect(fj('.course-filter.open')).to be_truthy
|
||||
expect(f('.course-filter.open')).to be_truthy
|
||||
|
||||
# Verify course filter names
|
||||
dropdown_array = ffj('#course-filter-bs .text')
|
||||
expect(dropdown_array[0].text).to include_text('All Courses')
|
||||
expect(dropdown_array[1].text).to include_text(@course.name)
|
||||
dropdown_array = ff('#course-filter-bs .text')
|
||||
expect(dropdown_array[0]).to include_text('All Courses')
|
||||
expect(dropdown_array[1]).to include_text(@course.name)
|
||||
end
|
||||
|
||||
it "should have a type dropdown", priority: "1", test_id: 446594 do
|
||||
fj("[data-id = 'type-filter']").click
|
||||
f("[data-id = 'type-filter']").click
|
||||
wait_for_ajaximations
|
||||
|
||||
# Verify type filter is open
|
||||
expect(fj('.type-filter.open')).to be
|
||||
expect(f('.type-filter.open')).to be
|
||||
|
||||
# Verify type filter names and order
|
||||
dropdown_array = ffj('#type-filter-bs .text')
|
||||
expect(dropdown_array[0].text).to include_text('Inbox')
|
||||
expect(dropdown_array[1].text).to include_text('Unread')
|
||||
expect(dropdown_array[2].text).to include_text('Starred')
|
||||
expect(dropdown_array[3].text).to include_text('Sent')
|
||||
expect(dropdown_array[4].text).to include_text('Archived')
|
||||
expect(dropdown_array[5].text).to include_text('Submission Comments')
|
||||
dropdown_array = ff('#type-filter-bs .text')
|
||||
expect(dropdown_array[0]).to include_text('Inbox')
|
||||
expect(dropdown_array[1]).to include_text('Unread')
|
||||
expect(dropdown_array[2]).to include_text('Starred')
|
||||
expect(dropdown_array[3]).to include_text('Sent')
|
||||
expect(dropdown_array[4]).to include_text('Archived')
|
||||
expect(dropdown_array[5]).to include_text('Submission Comments')
|
||||
end
|
||||
|
||||
it "should have action buttons", priority: "1", test_id: 446595 do
|
||||
expect(fj('#conversation-actions #compose-btn')).to be
|
||||
expect(fj('#conversation-actions #reply-btn')).to be
|
||||
expect(fj('#conversation-actions #reply-all-btn')).to be
|
||||
expect(fj('#conversation-actions #archive-btn')).to be
|
||||
expect(fj('#conversation-actions #delete-btn')).to be
|
||||
expect(fj('.inline-block')).to be
|
||||
expect(f('#conversation-actions #compose-btn')).to be
|
||||
expect(f('#conversation-actions #reply-btn')).to be
|
||||
expect(f('#conversation-actions #reply-all-btn')).to be
|
||||
expect(f('#conversation-actions #archive-btn')).to be
|
||||
expect(f('#conversation-actions #delete-btn')).to be
|
||||
expect(f('.inline-block')).to be
|
||||
end
|
||||
|
||||
it "should have a search box with address book", priority: "1", test_id: 446596 do
|
||||
# Click on the address book
|
||||
fj('.recipient-finder .icon-address-book').click
|
||||
f('.recipient-finder .icon-address-book').click
|
||||
wait_for_ajaximations
|
||||
keep_trying_until { expect(fj('.paginatedLoadingIndicator')['style']).to include_text('none') }
|
||||
keep_trying_until { expect(f('.paginatedLoadingIndicator')['style']).to include('none') }
|
||||
|
||||
# Verify the names of the course and all students and teachers appear
|
||||
expect(fj('.ac-result-contents .context .result-name')).to include_text(@course.name)
|
||||
expect(f('.ac-result-contents .context .result-name')).to include_text(@course.name)
|
||||
users = @course.users.collect(&:name)
|
||||
users.each do |u|
|
||||
expect(fj(".ac-result-contents .result-name:contains('#{u}')")).to be
|
||||
|
@ -121,8 +121,8 @@ describe "conversations new" do
|
|||
|
||||
it "should display a no messages image", priority: "1", test_id: 456175 do
|
||||
# Verify Text and Icon Class
|
||||
expect(fj('.no-messages').text).to include_text('No Conversations Selected')
|
||||
expect(fj('.no-messages .icon-email')).to be
|
||||
expect(f('.no-messages')).to include_text('No Conversations Selected')
|
||||
expect(f('.no-messages .icon-email')).to be
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -45,7 +45,7 @@ describe "course copy" do
|
|||
|
||||
keep_trying_until { Canvas::Migration::Worker::CourseCopyWorker.new.perform(ContentMigration.last)}
|
||||
|
||||
keep_trying_until { expect(f('#copy_results > h2')).to include_text('Copy Succeeded') }
|
||||
expect(f('#copy_results > h2')).to include_text('Copy Succeeded')
|
||||
|
||||
@new_course = Course.last
|
||||
get "/courses/#{@new_course.id}"
|
||||
|
|
|
@ -104,8 +104,8 @@ describe "course settings" do
|
|||
el.text != ""
|
||||
end
|
||||
message = f('.self_enrollment_message')
|
||||
expect(message.text).to include(code)
|
||||
expect(message.text).not_to include('self_enrollment_code')
|
||||
expect(message).to include_text(code)
|
||||
expect(message).not_to include_text('self_enrollment_code')
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -171,10 +171,8 @@ describe "course settings" do
|
|||
add_section('Delete Section')
|
||||
get "/courses/#{@course.id}/settings#tab-sections"
|
||||
|
||||
keep_trying_until do
|
||||
body = f('body')
|
||||
expect(body).to include_text('Delete Section')
|
||||
end
|
||||
body = f('body')
|
||||
expect(body).to include_text('Delete Section')
|
||||
|
||||
f('.delete_section_link').click
|
||||
keep_trying_until do
|
||||
|
@ -191,10 +189,8 @@ describe "course settings" do
|
|||
add_section('Edit Section')
|
||||
get "/courses/#{@course.id}/settings#tab-sections"
|
||||
|
||||
keep_trying_until do
|
||||
body = f('body')
|
||||
expect(body).to include_text('Edit Section')
|
||||
end
|
||||
body = f('body')
|
||||
expect(body).to include_text('Edit Section')
|
||||
|
||||
f('.edit_section_link').click
|
||||
section_input = f('#course_section_name_edit')
|
||||
|
@ -208,17 +204,15 @@ describe "course settings" do
|
|||
it "should move a nav item to disabled" do
|
||||
skip('fragile')
|
||||
get "/courses/#{@course.id}/settings#tab-navigation"
|
||||
keep_trying_until do
|
||||
body = f('body')
|
||||
expect(body).to include_text('Drag and drop items to reorder them in the course navigation.')
|
||||
end
|
||||
body = f('body')
|
||||
expect(body).to include_text('Drag and drop items to reorder them in the course navigation.')
|
||||
disabled_div = f('#nav_disabled_list')
|
||||
announcements_nav = f('#nav_edit_tab_id_14')
|
||||
driver.action.click_and_hold(announcements_nav).
|
||||
move_to(disabled_div).
|
||||
release(disabled_div).
|
||||
perform
|
||||
keep_trying_until { expect(f('#nav_disabled_list')).to include_text(announcements_nav.text) }
|
||||
expect(f('#nav_disabled_list')).to include_text(announcements_nav.text)
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -52,7 +52,7 @@ describe "dashboard" do
|
|||
get "/"
|
||||
|
||||
ignore_link = f('.to-do-list .disable_item_link')
|
||||
expect(ignore_link['title']).to include_text("Ignore until new submission")
|
||||
expect(ignore_link['title']).to include("Ignore until new submission")
|
||||
ignore_link.click
|
||||
wait_for_ajaximations
|
||||
expect(f("#content")).not_to contain_css('.to-do-list > li')
|
||||
|
@ -149,7 +149,7 @@ describe "dashboard" do
|
|||
get "/"
|
||||
|
||||
ff('.to-do-list .disable_item_link').each do |link|
|
||||
expect(link['title']).to include_text("Ignore until new mark")
|
||||
expect(link['title']).to include("Ignore until new mark")
|
||||
link.click
|
||||
wait_for_ajaximations
|
||||
end
|
||||
|
|
|
@ -180,12 +180,12 @@ describe 'dashcards' do
|
|||
it 'should customize color by selecting from color palet in the calendar page', priority: "1", test_id: 239994 do
|
||||
select_color_pallet_from_calendar_page
|
||||
|
||||
old_color = fj('.ColorPicker__CustomInputContainer .ColorPicker__ColorPreview').attribute(:title)
|
||||
old_color = f('.ColorPicker__CustomInputContainer .ColorPicker__ColorPreview').attribute(:title)
|
||||
|
||||
expect(f('.ColorPicker__Container')).to be_displayed
|
||||
f('.ColorPicker__Container .ColorPicker__ColorBlock:nth-of-type(7)').click
|
||||
wait_for_ajaximations
|
||||
new_color = fj('.ColorPicker__CustomInputContainer .ColorPicker__ColorPreview').attribute(:title)
|
||||
new_color = f('.ColorPicker__CustomInputContainer .ColorPicker__ColorPreview').attribute(:title)
|
||||
|
||||
# make sure that we choose a new color for background
|
||||
if old_color == new_color
|
||||
|
@ -197,9 +197,9 @@ describe 'dashcards' do
|
|||
rgb = convert_hex_to_rgb_color(new_color)
|
||||
get '/'
|
||||
keep_trying_until(5) do
|
||||
expect(fj('.ic-DashboardCard__header_hero').attribute(:style)).to include_text(rgb)
|
||||
expect(f('.ic-DashboardCard__header_hero').attribute(:style)).to include(rgb)
|
||||
refresh_page
|
||||
expect(fj('.ic-DashboardCard__header_hero').attribute(:style)).to include_text(rgb)
|
||||
expect(f('.ic-DashboardCard__header_hero').attribute(:style)).to include(rgb)
|
||||
expect(f('.ic-DashboardCard__header-title').text).to include(@course1.name)
|
||||
end
|
||||
end
|
||||
|
@ -208,16 +208,16 @@ describe 'dashcards' do
|
|||
select_color_pallet_from_calendar_page
|
||||
|
||||
hex = random_hex_color
|
||||
replace_content(fj("#ColorPickerCustomInput-#{@course1.asset_string}"), hex)
|
||||
replace_content(f("#ColorPickerCustomInput-#{@course1.asset_string}"), hex)
|
||||
f('.ColorPicker__Container .Button--primary').click
|
||||
wait_for_ajaximations
|
||||
get '/'
|
||||
keep_trying_until(5) do
|
||||
if fj('.ic-DashboardCard__header_hero').attribute(:style).include?('rgb')
|
||||
if f('.ic-DashboardCard__header_hero').attribute(:style).include?('rgb')
|
||||
rgb = convert_hex_to_rgb_color(hex)
|
||||
expect(fj('.ic-DashboardCard__header_hero').attribute(:style)).to include_text(rgb)
|
||||
expect(f('.ic-DashboardCard__header_hero').attribute(:style)).to include(rgb)
|
||||
else
|
||||
expect(fj('.ic-DashboardCard__header_hero').attribute(:style)).to include_text(hex)
|
||||
expect(f('.ic-DashboardCard__header_hero').attribute(:style)).to include(hex)
|
||||
end
|
||||
expect(f('.ic-DashboardCard__header-title').text).to include(@course1.name)
|
||||
end
|
||||
|
@ -233,12 +233,12 @@ describe 'dashcards' do
|
|||
|
||||
it 'should customize dashcard color by selecting from color palet', priority: "1", test_id: 238196 do
|
||||
# gets the default background color
|
||||
old_color = fj('.ColorPicker__CustomInputContainer .ColorPicker__ColorPreview').attribute(:title)
|
||||
old_color = f('.ColorPicker__CustomInputContainer .ColorPicker__ColorPreview').attribute(:title)
|
||||
|
||||
expect(f('.ColorPicker__Container')).to be_displayed
|
||||
f('.ColorPicker__Container .ColorPicker__ColorBlock:nth-of-type(7)').click
|
||||
wait_for_ajaximations
|
||||
new_color = fj('.ColorPicker__CustomInputContainer .ColorPicker__ColorPreview').attribute(:title)
|
||||
new_color = f('.ColorPicker__CustomInputContainer .ColorPicker__ColorPreview').attribute(:title)
|
||||
|
||||
# make sure that we choose a new color for background
|
||||
if old_color == new_color
|
||||
|
@ -249,9 +249,9 @@ describe 'dashcards' do
|
|||
f('.ColorPicker__Container .Button--primary').click
|
||||
rgb = convert_hex_to_rgb_color(new_color)
|
||||
keep_trying_until(5) do
|
||||
expect(fj('.ic-DashboardCard__header_hero').attribute(:style)).to include_text(rgb)
|
||||
expect(f('.ic-DashboardCard__header_hero').attribute(:style)).to include(rgb)
|
||||
refresh_page
|
||||
expect(fj('.ic-DashboardCard__header_hero').attribute(:style)).to include_text(rgb)
|
||||
expect(f('.ic-DashboardCard__header_hero').attribute(:style)).to include(rgb)
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -262,14 +262,14 @@ describe 'dashcards' do
|
|||
it 'should customize dashcard color', priority: "1", test_id: 239991 do
|
||||
hex = random_hex_color
|
||||
expect(f('.ColorPicker__Container')).to be_displayed
|
||||
replace_content(fj("#ColorPickerCustomInput-#{@course.asset_string}"), hex)
|
||||
replace_content(f("#ColorPickerCustomInput-#{@course.asset_string}"), hex)
|
||||
f('.ColorPicker__Container .Button--primary').click
|
||||
keep_trying_until(5) do
|
||||
if fj('.ic-DashboardCard__header_hero').attribute(:style).include?('rgb')
|
||||
if f('.ic-DashboardCard__header_hero').attribute(:style).include?('rgb')
|
||||
rgb = convert_hex_to_rgb_color(hex)
|
||||
expect(fj('.ic-DashboardCard__header_hero').attribute(:style)).to include_text(rgb)
|
||||
expect(f('.ic-DashboardCard__header_hero').attribute(:style)).to include(rgb)
|
||||
else
|
||||
expect(fj('.ic-DashboardCard__header_hero').attribute(:style)).to include_text(hex)
|
||||
expect(f('.ic-DashboardCard__header_hero').attribute(:style)).to include(hex)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -35,7 +35,7 @@ describe "interaction with differentiated assignments" do
|
|||
it "should redirect back to assignment index from inaccessible assignments" do
|
||||
create_section_override_for_assignment(@da_assignment, course_section: @section1)
|
||||
get "/courses/#{@course.id}/assignments/#{@da_assignment.id}"
|
||||
keep_trying_until { expect(f("#flash_message_holder")).to include_text("The assignment you requested is not available to your course section.") }
|
||||
expect(f("#flash_message_holder")).to include_text("The assignment you requested is not available to your course section.")
|
||||
expect(driver.current_url).to match %r{/courses/\d+/assignments}
|
||||
end
|
||||
it "should show the assignment page with an override" do
|
||||
|
@ -56,7 +56,7 @@ describe "interaction with differentiated assignments" do
|
|||
get "/courses/#{@course.id}/assignments/#{@da_assignment.id}/submissions/#{@student.id}"
|
||||
# check the preview frame for the success banner and for your submission text
|
||||
in_frame('preview_frame') do
|
||||
keep_trying_until { expect(f("#flash_message_holder")).to include_text("This assignment will no longer count towards your grade.") }
|
||||
expect(f("#flash_message_holder")).to include_text("This assignment will no longer count towards your grade.")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -109,7 +109,7 @@ describe "interaction with differentiated assignments" do
|
|||
it "should redirect back to assignment index from inaccessible assignments" do
|
||||
create_section_override_for_assignment(@da_assignment, course_section: @section1)
|
||||
get "/courses/#{@course.id}/assignments/#{@da_assignment.id}"
|
||||
keep_trying_until { expect(f("#flash_message_holder")).to include_text("The assignment you requested is not available to your course section.") }
|
||||
expect(f("#flash_message_holder")).to include_text("The assignment you requested is not available to your course section.")
|
||||
expect(driver.current_url).to match %r{/courses/\d+/assignments}
|
||||
end
|
||||
it "should show the assignment page with an override" do
|
||||
|
@ -130,7 +130,7 @@ describe "interaction with differentiated assignments" do
|
|||
get "/courses/#{@course.id}/assignments/#{@da_assignment.id}/submissions/#{@student.id}"
|
||||
# check the preview frame for the success banner and for your submission text
|
||||
in_frame('preview_frame') do
|
||||
keep_trying_until { expect(f("#flash_message_holder")).to include_text("This assignment will no longer count towards your grade.") }
|
||||
expect(f("#flash_message_holder")).to include_text("This assignment will no longer count towards your grade.")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -44,7 +44,7 @@ describe "interaction with differentiated discussions" do
|
|||
@da_discussion.assignment.assignment_overrides.each(&:destroy_permanently!)
|
||||
create_section_override_for_assignment(@da_discussion.assignment, course_section: @section1)
|
||||
get "/courses/#{@course.id}/discussion_topics/#{@da_discussion.id}"
|
||||
keep_trying_until { expect(f("#flash_message_holder")).to include_text("You do not have access to the requested resource.") }
|
||||
expect(f("#flash_message_holder")).to include_text("You do not have access to the requested resource.")
|
||||
expect(driver.current_url).to match %r{/courses/\d+/discussion_topics}
|
||||
end
|
||||
it "should show the discussion page with an override" do
|
||||
|
@ -116,7 +116,7 @@ describe "interaction with differentiated discussions" do
|
|||
@da_discussion.assignment.assignment_overrides.each(&:destroy_permanently!)
|
||||
create_section_override_for_assignment(@da_discussion.assignment, course_section: @section1)
|
||||
get "/courses/#{@course.id}/discussion_topics/#{@da_discussion.id}"
|
||||
keep_trying_until { expect(f("#flash_message_holder")).to include_text("You do not have access to the requested resource.") }
|
||||
expect(f("#flash_message_holder")).to include_text("You do not have access to the requested resource.")
|
||||
expect(driver.current_url).to match %r{/courses/\d+/discussion_topics}
|
||||
end
|
||||
it "should show the discussion page with an override" do
|
||||
|
@ -149,4 +149,4 @@ describe "interaction with differentiated discussions" do
|
|||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -49,11 +49,11 @@ describe "interaction with differentiated assignments/quizzes/discusssions in mo
|
|||
@tag_quiz.id => {:type => 'must_view'}
|
||||
}
|
||||
@module.save
|
||||
expect(@module.evaluate_for(@student).workflow_state).to include_text("unlocked")
|
||||
expect(@module.evaluate_for(@student).workflow_state).to include("unlocked")
|
||||
get "/courses/#{@course.id}/modules/items/#{@tag_discussion.id}"
|
||||
get "/courses/#{@course.id}/modules/items/#{@tag_quiz.id}"
|
||||
#confirm canvas believes this module is now completed despite the invisible assignment not having been viewed
|
||||
expect(@module.evaluate_for(@student).workflow_state).to include_text("completed")
|
||||
expect(@module.evaluate_for(@student).workflow_state).to include("completed")
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -95,4 +95,4 @@ describe "interaction with differentiated assignments/quizzes/discusssions in mo
|
|||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -41,7 +41,7 @@ describe "interaction with differentiated quizzes" do
|
|||
it "should redirect back to quizzes index from inaccessible quizzes" do
|
||||
create_section_override_for_assignment(@da_quiz.assignment, course_section: @section1)
|
||||
get "/courses/#{@course.id}/quizzes/#{@da_quiz.id}"
|
||||
keep_trying_until { expect(f("#flash_message_holder")).to include_text("You do not have access to the requested quiz.") }
|
||||
expect(f("#flash_message_holder")).to include_text("You do not have access to the requested quiz.")
|
||||
expect(driver.current_url).to match %r{/courses/\d+/quizzes}
|
||||
end
|
||||
it "should show the quiz page with an override" do
|
||||
|
@ -63,10 +63,10 @@ describe "interaction with differentiated quizzes" do
|
|||
create_section_override_for_assignment(@da_quiz, course_section: @section1)
|
||||
# assure we get the no longer counted banner on the quiz page
|
||||
get "/courses/#{@course.id}/quizzes/#{@da_quiz.id}"
|
||||
keep_trying_until { expect(f("#flash_message_holder")).to include_text("This quiz will no longer count towards your grade.") }
|
||||
expect(f("#flash_message_holder")).to include_text("This quiz will no longer count towards your grade.")
|
||||
# assure we get the no longer counted banner on the quiz submission page
|
||||
get "/courses/#{@course.id}/quizzes/#{@da_quiz.id}/submissions/#{@da_quiz.quiz_submissions.first!.id}"
|
||||
keep_trying_until { expect(f("#flash_message_holder")).to include_text("This quiz will no longer count towards your grade.") }
|
||||
expect(f("#flash_message_holder")).to include_text("This quiz will no longer count towards your grade.")
|
||||
end
|
||||
it "should not allow you the quiz to be taken if visibility has been revoked" do
|
||||
create_section_override_for_assignment(@da_quiz)
|
||||
|
@ -132,7 +132,7 @@ describe "interaction with differentiated quizzes" do
|
|||
it "should redirect back to quizzes index from inaccessible quizzes" do
|
||||
create_section_override_for_assignment(@da_quiz.assignment, course_section: @section1)
|
||||
get "/courses/#{@course.id}/quizzes/#{@da_quiz.id}"
|
||||
keep_trying_until { expect(f("#flash_message_holder")).to include_text("You do not have access to the requested quiz.") }
|
||||
expect(f("#flash_message_holder")).to include_text("You do not have access to the requested quiz.")
|
||||
expect(driver.current_url).to match %r{/courses/\d+/quizzes}
|
||||
end
|
||||
it "should show the quiz page with an override" do
|
||||
|
@ -154,10 +154,10 @@ describe "interaction with differentiated quizzes" do
|
|||
create_section_override_for_assignment(@da_quiz, course_section: @section1)
|
||||
# assure we get the no longer counted banner on the quiz page
|
||||
get "/courses/#{@course.id}/quizzes/#{@da_quiz.id}"
|
||||
keep_trying_until { expect(f("#flash_message_holder")).to include_text("You do not have access to the requested quiz.") }
|
||||
expect(f("#flash_message_holder")).to include_text("You do not have access to the requested quiz.")
|
||||
# assure we get the no longer counted banner on the quiz submission page
|
||||
get "/courses/#{@course.id}/quizzes/#{@da_quiz.id}/submissions/#{@da_quiz.quiz_submissions.first!.id}"
|
||||
keep_trying_until { expect(f("#flash_message_holder")).to include_text("This quiz will no longer count towards your grade.") }
|
||||
expect(f("#flash_message_holder")).to include_text("This quiz will no longer count towards your grade.")
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -320,10 +320,8 @@ describe "discussions" do
|
|||
|
||||
last_entry = DiscussionEntry.last
|
||||
expect(last_entry.depth).to eq 2
|
||||
expect(last_entry.message).to include_text(side_comment_text)
|
||||
keep_trying_until do
|
||||
expect(f("#entry-#{last_entry.id}")).to include_text(side_comment_text)
|
||||
end
|
||||
expect(last_entry.message).to include(side_comment_text)
|
||||
expect(f("#entry-#{last_entry.id}")).to include_text(side_comment_text)
|
||||
end
|
||||
|
||||
it "should create multiple side comments but only show 10 and expand the rest", priority: "1", test_id: 345489 do
|
||||
|
|
|
@ -118,13 +118,4 @@ describe "add content box" do
|
|||
expect(PageComment.count).to eq 0
|
||||
end
|
||||
end
|
||||
|
||||
it "should add a course submission" do
|
||||
skip('fragile')
|
||||
f(".add_submission_link").click
|
||||
wait_for_ajaximations
|
||||
keep_trying_until { expect(f(".submission_list")).to include_text(@assignment.title) }
|
||||
f(".select_submission_button").click
|
||||
submit_form(".form_content")
|
||||
end
|
||||
end
|
||||
|
|
|
@ -86,7 +86,7 @@ describe "eportfolios" do
|
|||
submit_form('#edit_eportfolio_form')
|
||||
wait_for_ajax_requests
|
||||
@eportfolio.reload
|
||||
expect(@eportfolio.name).to include_text("new ePortfolio name1")
|
||||
expect(@eportfolio.name).to include("new ePortfolio name1")
|
||||
end
|
||||
|
||||
it "should validate time stamp on ePortfolio", priority: "2" do
|
||||
|
@ -165,8 +165,7 @@ describe "eportfolios" do
|
|||
'.publish_step' => "Ready to get started?"}
|
||||
options_text.each do |option, text|
|
||||
f(option).click
|
||||
wait_for_animations
|
||||
expect(f('.wizard_details .details').text).to include_text text
|
||||
expect(f('.wizard_details .details')).to include_text text
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -46,10 +46,9 @@ describe "gradebook2" do
|
|||
# now verify that you can set it back
|
||||
|
||||
fj('.section-select-button:visible').click
|
||||
wait_for_ajaximations
|
||||
keep_trying_until { expect(fj('.section-select-menu:visible')).to be_displayed }
|
||||
fj("label[for='section_option_#{''}']").click
|
||||
keep_trying_until { expect(fj('.section-select-button:visible')).to include_text "All Sections" }
|
||||
f("label[for='section_option_']").click
|
||||
expect(fj('.section-select-button:visible')).to include_text "All Sections"
|
||||
|
||||
# validate all grades (i.e. submissions) were loaded
|
||||
expect(f('#gradebook_grid .container_1 .slick-row:nth-child(1) .l2').text).to eq '0'
|
||||
|
|
|
@ -249,9 +249,9 @@ describe "Screenreader Gradebook" do
|
|||
it "switches to srgb", priority: "1", test_id: 615682 do
|
||||
get "/courses/#{@course.id}/gradebook"
|
||||
f("#change_gradebook_version_link_holder").click
|
||||
keep_trying_until { expect(f("#not_right_side")).to include_text("Gradebook: Individual View") }
|
||||
expect(f("#not_right_side")).to include_text("Gradebook: Individual View")
|
||||
refresh_page
|
||||
keep_trying_until { expect(f("#not_right_side")).to include_text("Gradebook: Individual View") }
|
||||
expect(f("#not_right_side")).to include_text("Gradebook: Individual View")
|
||||
f(".span12 a").click
|
||||
expect(f("#change_gradebook_version_link_holder")).to be_displayed
|
||||
end
|
||||
|
|
|
@ -75,7 +75,7 @@ describe "groups" do
|
|||
wait_for_ajaximations
|
||||
get announcements_page
|
||||
expect(ff('.discussion-topic').size).to eq 1
|
||||
expect(f('.discussion-summary').text).to include_text('Rey is Yodas daughter')
|
||||
expect(f('.discussion-summary')).to include_text('Rey is Yodas daughter')
|
||||
end
|
||||
|
||||
it "should not allow group members to edit someone else's announcement", priority: "1", test_id: 327111 do
|
||||
|
@ -186,7 +186,7 @@ describe "groups" do
|
|||
type_in_tiny('textarea[name=message]','The slopes are ready,')
|
||||
f('.btn-primary').click
|
||||
wait_for_ajaximations
|
||||
expect(f('.user_content').text).to include_text('The slopes are ready,')
|
||||
expect(f('.user_content')).to include_text('The slopes are ready,')
|
||||
end
|
||||
|
||||
it "should not allow group member to edit discussions by other creators", priority: "1", test_id: 323327 do
|
||||
|
|
|
@ -58,9 +58,9 @@ describe "student groups" do
|
|||
|
||||
# verify each student is in the group
|
||||
expected_students = ["Test Student 1","Test Student 2","Test Student 3","Test Student 4"]
|
||||
users = fj("[data-view=groupUsers]")
|
||||
users = f("[data-view=groupUsers]")
|
||||
expected_students.each do |student|
|
||||
keep_trying_until(2) { expect(users).to include_text(student.to_s) }
|
||||
expect(users).to include_text(student.to_s)
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -27,14 +27,12 @@ describe "student groups" do
|
|||
|
||||
get "/groups/#{g1.id}"
|
||||
|
||||
keep_trying_until do
|
||||
f('#edit_group').click
|
||||
set_value f('#group_name'), "new group name"
|
||||
f('#ui-id-2').find_element(:css, 'button[type=submit]').click
|
||||
wait_for_ajaximations
|
||||
end
|
||||
f('#edit_group').click
|
||||
set_value f('#group_name'), "new group name"
|
||||
f('#ui-id-2').find_element(:css, 'button[type=submit]').click
|
||||
wait_for_ajaximations
|
||||
|
||||
expect(g1.reload.name).to include_text("new group name")
|
||||
expect(g1.reload.name).to include("new group name")
|
||||
end
|
||||
|
||||
it "should show locked student organized, invite only groups", priority: "1", test_id: 180671 do
|
||||
|
@ -169,16 +167,14 @@ describe "student groups" do
|
|||
expect(f(".student-group-students")).to include_text("1 student")
|
||||
|
||||
f(".student-group-join a").click
|
||||
wait_for_ajaximations
|
||||
|
||||
keep_trying_until {expect(f(".student-group-students")).to include_text("0 students") }
|
||||
expect(f(".student-group-students")).to include_text("0 students")
|
||||
end
|
||||
|
||||
it "leaving the group should change the dialog to join", priority:"2", test_id: 180683 do
|
||||
f(".student-group-join a").click
|
||||
wait_for_ajaximations
|
||||
|
||||
keep_trying_until { expect(f(".student-group-join a")).to include_text("JOIN") }
|
||||
expect(f(".student-group-join a")).to include_text("JOIN")
|
||||
end
|
||||
|
||||
it "student should be able to leave a group and rejoin", priority: "1", test_id: 180679 do
|
||||
|
@ -187,13 +183,11 @@ describe "student groups" do
|
|||
|
||||
# leave group and verify leaving
|
||||
f(".student-group-join a").click
|
||||
wait_for_ajaximations
|
||||
keep_trying_until { expect(f(".student-group-join a")).to include_text("JOIN") }
|
||||
expect(f(".student-group-join a")).to include_text("JOIN")
|
||||
|
||||
# rejoin group
|
||||
f(".student-group-join a").click
|
||||
wait_for_ajaximations
|
||||
keep_trying_until { expect(f(".student-group-join a")).to include_text("LEAVE") }
|
||||
expect(f(".student-group-join a")).to include_text("LEAVE")
|
||||
end
|
||||
|
||||
it "should visit the group", priority: "1", test_id: 180680 do
|
||||
|
@ -218,8 +212,7 @@ describe "student groups" do
|
|||
|
||||
# join group
|
||||
f(".student-group-join a").click
|
||||
wait_for_ajaximations
|
||||
keep_trying_until { expect(f(".student-group-join a")).to include_text("LEAVE") }
|
||||
expect(f(".student-group-join a")).to include_text("LEAVE")
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -243,11 +236,10 @@ describe "student groups" do
|
|||
addition = "CRIT"
|
||||
f("#group_name").send_keys(addition.to_s)
|
||||
wait_for_ajaximations
|
||||
fj('button.confirm-dialog-confirm-btn').click
|
||||
wait_for_ajaximations
|
||||
f('button.confirm-dialog-confirm-btn').click
|
||||
|
||||
new_group_name = group_name.to_s + addition.to_s
|
||||
keep_trying_until(3) {expect(fj(".student-group-title")).to include_text(new_group_name.to_s) }
|
||||
expect(f(".student-group-title")).to include_text(new_group_name.to_s)
|
||||
end
|
||||
|
||||
it "should add users to group", priority: "1", test_id: 180718 do
|
||||
|
@ -295,21 +287,15 @@ describe "student groups" do
|
|||
second_student_checkbox.click
|
||||
wait_for_animations
|
||||
|
||||
fj('button.confirm-dialog-confirm-btn').click
|
||||
wait_for_ajaximations
|
||||
f('button.confirm-dialog-confirm-btn').click
|
||||
|
||||
# expect plural of the word 'student'
|
||||
keep_trying_until(2) do
|
||||
expect(f(".student-group-students")).to include_text("students")
|
||||
end
|
||||
expect(f(".student-group-students")).to include_text("students")
|
||||
|
||||
# leave the group
|
||||
fj(".student-group-join a").click
|
||||
wait_for_ajaximations
|
||||
f(".student-group-join a").click
|
||||
|
||||
keep_trying_until(2) do
|
||||
expect(fj(".student-group-students")).to include_text("1 student")
|
||||
end
|
||||
expect(f(".student-group-students")).to include_text("1 student")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -304,7 +304,7 @@ module AssignmentOverridesSeleniumHelper
|
|||
end
|
||||
|
||||
def validate_quiz_show_page(message)
|
||||
expect(f('#quiz_show').text).to include_text("#{message}")
|
||||
expect(f('#quiz_show')).to include_text("#{message}")
|
||||
end
|
||||
|
||||
def validate_vdd_quiz_tooltip_dates(context_selector, message)
|
||||
|
|
|
@ -6,7 +6,7 @@ shared_examples_for "statistics basic tests" do
|
|||
end
|
||||
|
||||
def validate_item_list(css, header_text)
|
||||
expect(f(css).text).to include_text(header_text)
|
||||
expect(f(css)).to include_text(header_text)
|
||||
end
|
||||
|
||||
context "with admin initially logged in" do
|
||||
|
|
|
@ -151,7 +151,7 @@ module Calendar2Common
|
|||
publish_toggle = edit_assignment_form.find('#assignment_published')
|
||||
move_to_click('label[for=assignment_published]') if publish
|
||||
submit_form(edit_assignment_form)
|
||||
keep_trying_until { expect(f('.fc-month-view .fc-title')).to include_text(assignment_title) }
|
||||
expect(f('.fc-month-view .fc-title')).to include_text(assignment_title)
|
||||
end
|
||||
|
||||
# Creates event from clicking on the mini calendar
|
||||
|
@ -180,14 +180,12 @@ module Calendar2Common
|
|||
|
||||
submit_form(edit_event_form)
|
||||
wait_for_ajax_requests
|
||||
keep_trying_until do
|
||||
if should_duplicate
|
||||
4.times do |i|
|
||||
expect(ff('.fc-month-view .fc-title')[i]).to include_text("#{event_title} #{i + 1}")
|
||||
end
|
||||
else
|
||||
expect(f('.fc-month-view .fc-title')).to include_text(event_title)
|
||||
if should_duplicate
|
||||
4.times do |i|
|
||||
expect(ff('.fc-month-view .fc-title')[i]).to include_text("#{event_title} #{i + 1}")
|
||||
end
|
||||
else
|
||||
expect(f('.fc-month-view .fc-title')).to include_text(event_title)
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -157,7 +157,7 @@ module DiscussionsCommon
|
|||
replace_content(f('input[name=title]'), title)
|
||||
type_in_tiny('textarea[name=message]', message)
|
||||
expect_new_page_load { submit_form('.form-actions') }
|
||||
expect(f('#discussion_topic .discussion-title').text).to include_text(title)
|
||||
expect(f('#discussion_topic .discussion-title')).to include_text(title)
|
||||
end
|
||||
|
||||
def topic_index_element(topic)
|
||||
|
|
|
@ -21,7 +21,7 @@ module EportfoliosCommon
|
|||
end
|
||||
|
||||
if opts[:content]
|
||||
expect(entry.content.first[:content]).to include_text(opts[:content])
|
||||
expect(entry.content.first[:content]).to include(opts[:content])
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -36,7 +36,7 @@ module GradingSchemesCommon
|
|||
replace_content(f('.scheme_name'), edit_name)
|
||||
save_and_reload_changes(grading_standard)
|
||||
expect(grading_standard.title).to eq edit_name
|
||||
expect(fj(".title span:eq(1)").text).to include_text(edit_name) # fj to avoid selenium caching
|
||||
expect(fj(".title span:eq(1)")).to include_text(edit_name)
|
||||
end
|
||||
|
||||
def should_delete_a_grading_scheme(context, url)
|
||||
|
|
|
@ -385,12 +385,7 @@ module QuizzesCommon
|
|||
end
|
||||
|
||||
def wait_for_quiz_publish_button_to_populate
|
||||
wait = Selenium::WebDriver::Wait.new(timeout: 5)
|
||||
wait.until do
|
||||
f('#quiz-publish-link').present? &&
|
||||
f('#quiz-publish-link').text.present? &&
|
||||
f('#quiz-publish-link').text.strip!.split("\n") != []
|
||||
end
|
||||
keep_trying_until { f('#quiz-publish-link').text.present? }
|
||||
end
|
||||
|
||||
# @argument answer_chooser [#call]
|
||||
|
|
|
@ -60,8 +60,8 @@ describe "outcome gradebook" do
|
|||
fj('.section-select-button:visible').click
|
||||
wait_for_ajaximations
|
||||
keep_trying_until { expect(fj('.section-select-menu:visible')).to be_displayed }
|
||||
fj("label[for='section_option_#{''}']").click
|
||||
keep_trying_until { expect(fj('.section-select-button:visible')).to include_text "All Sections" }
|
||||
f("label[for='section_option_']").click
|
||||
expect(fj('.section-select-button:visible')).to include_text "All Sections"
|
||||
|
||||
expect(ff('.outcome-student-cell-content').length).to eq 3
|
||||
end
|
||||
|
|
|
@ -236,8 +236,8 @@ describe "course people" do
|
|||
go_to_people_page
|
||||
|
||||
observer_row = ff("#user_#{obs.id}").map(&:text).join(',')
|
||||
expect(observer_row).to include_text students[0].name
|
||||
expect(observer_row).to include_text students[1].name
|
||||
expect(observer_row).to include students[0].name
|
||||
expect(observer_row).to include students[1].name
|
||||
# remove an observer
|
||||
use_link_dialog(obs) do
|
||||
fj("#link_students input:visible").send_keys(:backspace)
|
||||
|
|
|
@ -427,7 +427,7 @@ describe "people" do
|
|||
wait_for_ajaximations
|
||||
ff('.ui-button-text')[1].click
|
||||
wait_for_ajaximations
|
||||
expect(ff(".StudentEnrollment")[0].text).to include_text("section2")
|
||||
expect(ff(".StudentEnrollment")[0]).to include_text("section2")
|
||||
end
|
||||
|
||||
it "should remove a student from a section", priority: "1", test_id: 296461 do
|
||||
|
@ -440,7 +440,7 @@ describe "people" do
|
|||
fln("Remove user from section2").click
|
||||
ff('.ui-button-text')[1].click
|
||||
wait_for_ajaximations
|
||||
expect(ff(".StudentEnrollment")[0].text).not_to include_text("section2")
|
||||
expect(ff(".StudentEnrollment")[0]).not_to include_text("section2")
|
||||
end
|
||||
|
||||
it "should gray out sections the user doesn't have permission to remove" do
|
||||
|
|
|
@ -184,7 +184,7 @@ describe "profile" do
|
|||
submit_form(register_form)
|
||||
wait_for_ajaximations
|
||||
close_visible_dialog
|
||||
keep_trying_until { expect(f('.other_channels .path')).to include_text(test_cell_number) }
|
||||
expect(f('.other_channels .path')).to include_text(test_cell_number)
|
||||
end
|
||||
|
||||
it "should register a service" do
|
||||
|
|
|
@ -19,7 +19,7 @@ describe 'Taking a quiz as a student' do
|
|||
it 'prevents taking the quiz', priority: 1, test_id: 140615 do
|
||||
get "/courses/#{@course.id}/quizzes/#{@quiz.id}"
|
||||
expect(f("#content")).not_to contain_css('#take_quiz_link')
|
||||
expect(f('.lock_explanation').text).to include_text "This quiz is locked " \
|
||||
expect(f('.lock_explanation')).to include_text "This quiz is locked " \
|
||||
"until #{format_time_for_view(@quiz.unlock_at)}"
|
||||
end
|
||||
end
|
||||
|
@ -34,7 +34,7 @@ describe 'Taking a quiz as a student' do
|
|||
it 'prevents taking the quiz', priority: 1, test_id: 140616 do
|
||||
get "/courses/#{@course.id}/quizzes/#{@quiz.id}"
|
||||
expect(f("#content")).not_to contain_css('#take_quiz_link')
|
||||
expect(f('.lock_explanation').text).to include_text "This quiz was locked " \
|
||||
expect(f('.lock_explanation')).to include_text "This quiz was locked " \
|
||||
"#{format_time_for_view(@quiz.lock_at)}"
|
||||
end
|
||||
end
|
||||
|
|
|
@ -42,8 +42,7 @@ describe 'editing a quiz' do
|
|||
it 'remains published after saving changes', priority: "1", test_id: 210059 do
|
||||
type_in_tiny('#quiz_description', 'changed description')
|
||||
click_save_settings_button
|
||||
wait_for_ajax_requests
|
||||
expect(f('#quiz-publish-link .publish-text').text.strip!).to eq 'Published'
|
||||
expect(f('#quiz-publish-link')).to include_text 'Published'
|
||||
end
|
||||
|
||||
it 'deletes the quiz', priority: "1", test_id: 351921 do
|
||||
|
@ -78,7 +77,7 @@ describe 'editing a quiz' do
|
|||
# verify the student sees the changes
|
||||
user_session(@student)
|
||||
take_quiz do
|
||||
expect(fj('.display_question.question.multiple_choice_question').text).to \
|
||||
expect(f('.display_question.question.multiple_choice_question')).to \
|
||||
include_text question_description
|
||||
end
|
||||
end
|
||||
|
@ -115,9 +114,8 @@ describe 'editing a quiz' do
|
|||
expect_new_page_load do
|
||||
click_save_settings_button
|
||||
end
|
||||
f('#quiz-publish-link').click
|
||||
wait_for_ajax_requests
|
||||
expect(f('#quiz-publish-link .publish-text').text.strip!).to eq 'Unpublish'
|
||||
f('#quiz-publish-link.btn-publish').click
|
||||
expect(f('#quiz-publish-link')).to include_text 'Unpublish'
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -191,7 +189,7 @@ describe 'editing a quiz' do
|
|||
|
||||
it 'flashes a warning message', priority: "1", test_id: 140609 do
|
||||
message = 'Keep in mind, some students have already taken or started taking this quiz'
|
||||
keep_trying_until(3) { expect(f('#flash_message_holder')).to include_text message }
|
||||
expect(f('#flash_message_holder')).to include_text message
|
||||
end
|
||||
|
||||
it 'deletes the quiz', priority: "1", test_id: 210073 do
|
||||
|
|
|
@ -84,8 +84,8 @@ describe "quizzes log auditing" do
|
|||
user_session(@teacher)
|
||||
|
||||
get "/courses/#{@course.id}/quizzes/#{@quiz.id}/submissions/#{sub.id}/log"
|
||||
keep_trying_until { expect(f('#ic-EventStream')).to include_text('Session started') }
|
||||
keep_trying_until { expect(f('#ic-EventStream')).to include_text('Viewed (and possibly read)') }
|
||||
expect(f('#ic-EventStream')).to include_text('Session started')
|
||||
expect(f('#ic-EventStream')).to include_text('Viewed (and possibly read)')
|
||||
end
|
||||
|
||||
it 'should show that a question had been answered', priority: "2", test_id:605109 do
|
||||
|
@ -95,7 +95,7 @@ describe "quizzes log auditing" do
|
|||
user_session(@teacher)
|
||||
|
||||
get "/courses/#{@course.id}/quizzes/#{@quiz.id}/submissions/#{sub.id}/log"
|
||||
keep_trying_until { expect(f('#ic-EventStream')).to include_text('Answered question') }
|
||||
expect(f('#ic-EventStream')).to include_text('Answered question')
|
||||
end
|
||||
|
||||
it 'should take you to a question when you click on the question number', priority: "2", test_id:605111 do
|
||||
|
@ -104,11 +104,10 @@ describe "quizzes log auditing" do
|
|||
user_session(@teacher)
|
||||
|
||||
get "/courses/#{@course.id}/quizzes/#{@quiz.id}/submissions/#{sub.id}/log"
|
||||
keep_trying_until { expect(f('#ic-EventStream')).to include_text('#1') }
|
||||
expect(f('#ic-EventStream')).to include_text('#1')
|
||||
fln('#1').click
|
||||
wait_for_ajaximations
|
||||
expect(f('.ic-QuestionInspector__QuestionHeader')).to include_text('Question #1')
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -20,19 +20,18 @@ describe 'publishing a quiz' do
|
|||
|
||||
context 'after the ajax calls finish' do
|
||||
before(:each) do
|
||||
f('#quiz-publish-link').click
|
||||
wait_for_ajaximations
|
||||
wait_for_quiz_publish_button_to_populate
|
||||
f('#quiz-publish-link').click
|
||||
end
|
||||
|
||||
it 'changes the button\'s text to \'Published\'', priority: "1", test_id: 140649 do
|
||||
driver.mouse.move_to f('#footer')
|
||||
expect(f('#quiz-publish-link').text.strip!.split("\n")[0]).to eq 'Published'
|
||||
expect(f('#quiz-publish-link')).to include_text 'Published'
|
||||
end
|
||||
|
||||
it 'changes the button text on hover to |Unpublish|', priority: "1", test_id: 398936 do
|
||||
driver.mouse.move_to f('#quiz-publish-link')
|
||||
expect(f('#quiz-publish-link').text.strip!.split("\n")[0]).to eq 'Unpublish'
|
||||
expect(f('#quiz-publish-link')).to include_text 'Unpublish'
|
||||
end
|
||||
|
||||
it 'removes the \'This quiz is unpublished\' message', priority: "1", test_id: 398937 do
|
||||
|
@ -40,14 +39,10 @@ describe 'publishing a quiz' do
|
|||
end
|
||||
|
||||
it 'adds links to the right sidebar', priority: "1", test_id: 398938 do
|
||||
links_text = []
|
||||
ff('ul.page-action-list li').each do |link|
|
||||
# also remove the trademark (TM) unicode character
|
||||
links_text << link.text.split("\n")[0].delete("^\u{0000}-\u{007F}")
|
||||
end
|
||||
links = ff('ul.page-action-list li')
|
||||
|
||||
expect(links_text).to include 'Moderate This Quiz'
|
||||
expect(links_text).to include 'SpeedGrader'
|
||||
expect(links[0]).to include_text 'Moderate This Quiz'
|
||||
expect(links[1]).to include_text 'SpeedGrader'
|
||||
end
|
||||
|
||||
it 'displays both |Preview| buttons', priority: "1", test_id: 398939 do
|
||||
|
@ -56,12 +51,13 @@ describe 'publishing a quiz' do
|
|||
|
||||
context 'when clicking the cog menu tool' do
|
||||
before(:each) do
|
||||
fj('a.al-trigger', '.header-group-right').click
|
||||
wait_for_ajaximations
|
||||
f('.header-group-right a.al-trigger').click
|
||||
wait_for_ajaximations
|
||||
end
|
||||
|
||||
it 'shows updated options', priority: "1", test_id: 398940 do
|
||||
items = ffj('li.ui-menu-item', 'ul#toolbar-1')
|
||||
items = ff('ul#toolbar-1 li.ui-menu-item')
|
||||
items_text = []
|
||||
items.each { |i| items_text << i.text.split("\n")[0] }
|
||||
|
||||
|
|
|
@ -49,7 +49,7 @@ describe 'quiz restrictions as a student' do
|
|||
|
||||
it 'should not be accessible from invalid ip address', priority: "1", test_id: 338081 do
|
||||
begin_taking_quiz
|
||||
expect(f('#content').text).to include_text 'This quiz is protected and is only available from certain locations.'\
|
||||
expect(f('#content')).to include_text 'This quiz is protected and is only available from certain locations.'\
|
||||
' The computer you are currently using does not appear to be at a valid location for taking this quiz.'
|
||||
expect(f("#content")).not_to contain_css('#submit_quiz_form')
|
||||
end
|
||||
|
|
|
@ -28,9 +28,9 @@ describe 'quiz restrictions as a teacher' do
|
|||
|
||||
it 'should show a password field when checking the checkbox', priority: "1", test_id: 474274 do
|
||||
get "/courses/#{@course.id}/quizzes/new"
|
||||
expect(f('#quiz_access_code').attribute('tabindex')).to include_text('-1')
|
||||
expect(f('#quiz_access_code').attribute('tabindex')).to include('-1')
|
||||
f('#enable_quiz_access_code').click
|
||||
expect(f('#quiz_access_code').attribute('tabindex')).to include_text('0')
|
||||
expect(f('#quiz_access_code').attribute('tabindex')).to include('0')
|
||||
end
|
||||
|
||||
it 'should not allow a blank restrict access code password', priority: "1", test_id: 474275 do
|
||||
|
@ -78,9 +78,9 @@ describe 'quiz restrictions as a teacher' do
|
|||
|
||||
it 'should show a password field when checking the checkbox', priority: "1", test_id: 474279 do
|
||||
get "/courses/#{@course.id}/quizzes/new"
|
||||
expect(f('#quiz_ip_filter').attribute('tabindex')).to include_text('-1')
|
||||
expect(f('#quiz_ip_filter').attribute('tabindex')).to include('-1')
|
||||
f('#enable_quiz_ip_filter').click
|
||||
expect(f('#quiz_ip_filter').attribute('tabindex')).to include_text('0')
|
||||
expect(f('#quiz_ip_filter').attribute('tabindex')).to include('0')
|
||||
end
|
||||
|
||||
it 'should not allow a blank ip address', priority: "1", test_id: 474280 do
|
||||
|
|
|
@ -46,7 +46,7 @@ describe "quizzes questions" do
|
|||
|
||||
submit_form(question)
|
||||
question = f("#question_#{quest1.id}")
|
||||
expect(question.find_element(:css, ".question_name").text).to include_text('edited question')
|
||||
expect(question.find_element(:css, ".question_name")).to include_text('edited question')
|
||||
f('#show_question_details').click
|
||||
expect(question.find_elements(:css, '.answers .answer').length).to eq 3
|
||||
end
|
||||
|
|
|
@ -7,9 +7,8 @@ describe 'unpublishing a quiz on the quiz show page' do
|
|||
|
||||
def unpublish_quiz_via_ui
|
||||
get "/courses/#{@course.id}/quizzes/#{@quiz.id}"
|
||||
f('#quiz-publish-link').click
|
||||
wait_for_ajaximations
|
||||
wait_for_quiz_publish_button_to_populate
|
||||
f('#quiz-publish-link').click
|
||||
end
|
||||
|
||||
context 'as a teacher' do
|
||||
|
@ -23,10 +22,11 @@ describe 'unpublishing a quiz on the quiz show page' do
|
|||
|
||||
# changes the button's text to |Unpublished|
|
||||
driver.mouse.move_to f('#footer')
|
||||
expect(f('#quiz-publish-link').text.strip!.split("\n")[1].split('.')[0]).to eq 'Unpublished'
|
||||
expect(f('#quiz-publish-link')).to include_text 'Unpublished'
|
||||
|
||||
# changes the button text on hover to |Publish|
|
||||
expect(f('#quiz-publish-link').text.strip!.split("\n")[0]).to eq 'Publish'
|
||||
driver.mouse.move_to f('#quiz-publish-link')
|
||||
expect(f('#quiz-publish-link')).to include_text 'Publish'
|
||||
|
||||
# displays the 'This quiz is unpublished' message
|
||||
expect(f('.alert .unpublished_warning')).to be_displayed
|
||||
|
|
|
@ -136,17 +136,17 @@ describe 'Speedgrader' do
|
|||
end
|
||||
|
||||
it 'should display needs review alert on non-autograde questions', priority: "1", test_id: 441360 do
|
||||
expect(ff('#update_history_form .alert')[0].text).to include_text('The following questions need review:')
|
||||
expect(ff('#update_history_form .alert')[0]).to include_text('The following questions need review:')
|
||||
end
|
||||
|
||||
it 'should only display needs review for file_upload and essay questions', priority: "2", test_id: 452539 do
|
||||
questions_to_grade = ff('#questions_needing_review li a')
|
||||
expect(questions_to_grade[0].text).to include_text('Question 2')
|
||||
expect(questions_to_grade[1].text).to include_text('Question 3')
|
||||
expect(questions_to_grade[0]).to include_text('Question 2')
|
||||
expect(questions_to_grade[1]).to include_text('Question 3')
|
||||
end
|
||||
|
||||
it 'should not display review warning on text only quiz questions', priority: "1", test_id: 377664 do
|
||||
expect(ff('#update_history_form .alert')[0].text).not_to include_text('Question 4')
|
||||
expect(ff('#update_history_form .alert')[0]).not_to include_text('Question 4')
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -161,7 +161,7 @@ describe 'Speedgrader' do
|
|||
get "/courses/#{@course.id}/gradebook/speed_grader?assignment_id=#{@assignment.id}#"
|
||||
let_speedgrader_load
|
||||
expect(f('#grading-box-extended')['value']).to eq('complete')
|
||||
expect(fj('#grade_container label').text()).to include_text('(0 / 0)')
|
||||
expect(f('#grade_container label')).to include_text('(0 / 0)')
|
||||
end
|
||||
|
||||
it 'should display pass/fail correctly when total points possible is changed', priority: "1", test_id: 419289 do
|
||||
|
@ -169,7 +169,7 @@ describe 'Speedgrader' do
|
|||
get "/courses/#{@course.id}/gradebook/speed_grader?assignment_id=#{@assignment.id}#"
|
||||
let_speedgrader_load
|
||||
expect(f('#grading-box-extended')['value']).to eq('complete')
|
||||
expect(fj('#grade_container label').text()).to include_text('(1 / 1)')
|
||||
expect(f('#grade_container label')).to include_text('(1 / 1)')
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -118,6 +118,7 @@ module CustomWaitMethods
|
|||
end
|
||||
|
||||
def keep_trying_until(seconds = SECONDS_UNTIL_GIVING_UP)
|
||||
@__in_keep_trying_until = true
|
||||
frd_error = nil
|
||||
Selenium::WebDriver::Wait.new(timeout: seconds).until do
|
||||
begin
|
||||
|
@ -130,6 +131,8 @@ module CustomWaitMethods
|
|||
end
|
||||
rescue Selenium::WebDriver::Error::TimeOutError
|
||||
raise frd_error || $ERROR_INFO
|
||||
ensure
|
||||
@__in_keep_trying_until = false
|
||||
end
|
||||
|
||||
# pass in an Element pointing to the textarea that is tinified.
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
require_relative "common_helper_methods/custom_wait_methods"
|
||||
|
||||
module CustomSeleniumRspecMatchers
|
||||
|
||||
class HasClass
|
||||
|
@ -23,16 +25,31 @@ module CustomSeleniumRspecMatchers
|
|||
HasClass.new(class_name)
|
||||
end
|
||||
|
||||
|
||||
class IncludeText
|
||||
include CustomWaitMethods
|
||||
|
||||
def initialize(text)
|
||||
@text = text
|
||||
end
|
||||
|
||||
def matches?(element)
|
||||
raise "`include_text` can only be used on an element; use `include` if you're checking if one string includes another" if element.is_a?(String)
|
||||
raise "`include_text` will wait for you; don't nest it in `keep_trying_until`" if @__in_keep_trying_until
|
||||
@element = element
|
||||
@element_text = @element.instance_of?(String) ? @element : @element.text
|
||||
@element_text.include?(@text)
|
||||
keep_trying_until do
|
||||
@element_text = @element.text
|
||||
@element_text.include?(@text)
|
||||
end
|
||||
end
|
||||
|
||||
def does_not_match?(element)
|
||||
raise "`include_text` can only be used on an element; use `include` if you're checking if one string includes another" if element.is_a?(String)
|
||||
raise "`include_text` will wait for you; don't nest it in `keep_trying_until`" if @__in_keep_trying_until
|
||||
@element = element
|
||||
keep_trying_until do
|
||||
@element_text = @element.text
|
||||
!@element_text.include?(@text)
|
||||
end
|
||||
end
|
||||
|
||||
def failure_message
|
||||
|
|
|
@ -15,46 +15,45 @@ describe 'Theme Editor' do
|
|||
it 'should open theme editor from the admin page', priority: "1", test_id: 244225 do
|
||||
get "/accounts/#{Account.default.id}"
|
||||
|
||||
fj('#right-side > div:nth-of-type(4) > a.btn.button-sidebar-wide').click
|
||||
wait_for_ajaximations
|
||||
expect(fj('.Theme__editor-header_title').text).to include_text 'Theme Editor'
|
||||
f('#right-side > div:nth-of-type(4) > a.btn.button-sidebar-wide').click
|
||||
expect(f('.Theme__editor-header_title')).to include_text 'Theme Editor'
|
||||
end
|
||||
|
||||
it 'should open theme editor', priority: "1", test_id: 239980 do
|
||||
open_theme_editor(Account.default.id)
|
||||
|
||||
expect(fj('.Theme__editor-header_title').text).to include_text 'Theme Editor'
|
||||
expect(f('.Theme__editor-header_title')).to include_text 'Theme Editor'
|
||||
end
|
||||
|
||||
it 'should close theme editor on cancel and redirect to account settings page', priority: "1", test_id: 239981 do
|
||||
open_theme_editor(Account.default.id)
|
||||
|
||||
# verifies theme editor is open
|
||||
expect(fj('.Theme__editor-header_title').text).to include_text 'Theme Editor'
|
||||
expect(f('.Theme__editor-header_title')).to include_text 'Theme Editor'
|
||||
|
||||
fj('button:contains("Cancel")').click
|
||||
# validations
|
||||
assert_flash_notice_message /Theme editor changes have been cancelled/
|
||||
expect(f('#breadcrumbs')).to include_text('Courses')
|
||||
expect(fj('.btn.button-sidebar-wide').text).to include_text 'Open Theme Editor'
|
||||
expect(f('.btn.button-sidebar-wide')).to include_text 'Open Theme Editor'
|
||||
end
|
||||
|
||||
it 'should display the preview button when valid change is made', priority: "1", test_id: 239984 do
|
||||
open_theme_editor(Account.default.id)
|
||||
|
||||
# verifies theme editor is open
|
||||
expect(fj('.Theme__editor-header_title').text).to include_text 'Theme Editor'
|
||||
expect(f('.Theme__editor-header_title')).to include_text 'Theme Editor'
|
||||
|
||||
fj('.Theme__editor-color-block_input-text').send_keys('#dc6969')
|
||||
f('.Theme__editor-color-block_input-text').send_keys('#dc6969')
|
||||
# validations
|
||||
expect(fj('.Theme__preview-button-text').text).to include_text 'Preview Your Changes'
|
||||
expect(f('.Theme__preview-button-text')).to include_text 'Preview Your Changes'
|
||||
end
|
||||
|
||||
it 'should accept valid Hex IDs', priority: "1", test_id: 239986 do
|
||||
open_theme_editor(Account.default.id)
|
||||
|
||||
# verifies theme editor is open
|
||||
expect(fj('.Theme__editor-header_title').text).to include_text 'Theme Editor'
|
||||
expect(f('.Theme__editor-header_title')).to include_text 'Theme Editor'
|
||||
|
||||
all_colors(all_global_branding)
|
||||
|
||||
|
@ -66,36 +65,36 @@ describe 'Theme Editor' do
|
|||
open_theme_editor(Account.default.id)
|
||||
|
||||
# verifies theme editor is open
|
||||
expect(fj('.Theme__editor-header_title').text).to include_text 'Theme Editor'
|
||||
expect(f('.Theme__editor-header_title')).to include_text 'Theme Editor'
|
||||
|
||||
fj('.Theme__editor-color-block_input-text').send_keys('#fff')
|
||||
f('.Theme__editor-color-block_input-text').send_keys('#fff')
|
||||
# validations
|
||||
expect(fj('.Theme__preview-button-text').text).to include_text 'Preview Your Changes'
|
||||
expect(f('.Theme__preview-button-text')).to include_text 'Preview Your Changes'
|
||||
end
|
||||
|
||||
it 'should accept valid color names', priority: "2", test_id: 240233 do
|
||||
open_theme_editor(Account.default.id)
|
||||
|
||||
# verifies theme editor is open
|
||||
expect(fj('.Theme__editor-header_title').text).to include_text 'Theme Editor'
|
||||
expect(f('.Theme__editor-header_title')).to include_text 'Theme Editor'
|
||||
|
||||
fj('.Theme__editor-color-block_input-text').send_keys('orange')
|
||||
f('.Theme__editor-color-block_input-text').send_keys('orange')
|
||||
# validations
|
||||
expect(fj('.Theme__preview-button-text').text).to include_text 'Preview Your Changes'
|
||||
expect(f('.Theme__preview-button-text')).to include_text 'Preview Your Changes'
|
||||
end
|
||||
|
||||
it 'should not accept invalid hex IDs', priority: "1", test_id: 239987 do
|
||||
open_theme_editor(Account.default.id)
|
||||
|
||||
# verifies theme editor is open
|
||||
expect(fj('.Theme__editor-header_title').text).to include_text 'Theme Editor'
|
||||
expect(f('.Theme__editor-header_title')).to include_text 'Theme Editor'
|
||||
|
||||
# enters invalid ID and presses tab
|
||||
fj('.Theme__editor-color-block_input-text').send_keys('#xxxxx!')
|
||||
fj('.Theme__editor-color-block_input-text').send_keys(:tab)
|
||||
f('.Theme__editor-color-block_input-text').send_keys('#xxxxx!')
|
||||
f('.Theme__editor-color-block_input-text').send_keys(:tab)
|
||||
|
||||
# validations
|
||||
expect(fj('.ic-Form-message--error').text).to include_text "'#xxxxx!' is not a valid color."
|
||||
expect(f('.ic-Form-message--error')).to include_text "'#xxxxx!' is not a valid color."
|
||||
end
|
||||
|
||||
it 'K12 Theme should be automatically set when K12 Feature Flag is turned on', priority: "1", test_id: 240001 do
|
||||
|
|
|
@ -71,7 +71,7 @@ describe "Wiki pages and Tiny WYSIWYG editor Files" do
|
|||
f('li.folder span.plus').click
|
||||
wait_for_ajaximations
|
||||
expect(ff('li.folder li.folder').count).to eq 1
|
||||
expect(f('li.folder li.folder .name').text).to include_text("visible subfolder")
|
||||
expect(f('li.folder li.folder .name')).to include_text("visible subfolder")
|
||||
end
|
||||
|
||||
it "should not show sub-folder in the sidebar if it is hidden" do
|
||||
|
@ -83,7 +83,7 @@ describe "Wiki pages and Tiny WYSIWYG editor Files" do
|
|||
f('li.folder span.plus').click
|
||||
wait_for_ajaximations
|
||||
expect(ff('li.folder li.folder').count).to eq 1
|
||||
expect(f('li.folder li.folder .name').text).to include_text("visible subfolder")
|
||||
expect(f('li.folder li.folder .name')).to include_text("visible subfolder")
|
||||
end
|
||||
|
||||
it "should not show file in the sidebar if it is hidden" do
|
||||
|
@ -98,7 +98,7 @@ describe "Wiki pages and Tiny WYSIWYG editor Files" do
|
|||
f('li.folder span.plus').click
|
||||
wait_for_ajaximations
|
||||
expect(ff('li.folder li.file').count).to eq 1
|
||||
expect(f('li.folder li.file .name').text).to include_text("foo.txt")
|
||||
expect(f('li.folder li.file .name')).to include_text("foo.txt")
|
||||
end
|
||||
|
||||
it "should not show file in the sidebar if it is locked" do
|
||||
|
@ -115,7 +115,7 @@ describe "Wiki pages and Tiny WYSIWYG editor Files" do
|
|||
wait_for_ajaximations
|
||||
expect(ff('li.folder li.file').count).to eq 1
|
||||
end
|
||||
expect(f('li.folder li.file .name').text).to include_text("foo.txt")
|
||||
expect(f('li.folder li.file .name')).to include_text("foo.txt")
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -115,25 +115,25 @@ describe "Wiki pages and Tiny WYSIWYG editor Files" do
|
|||
|
||||
root_folders = @tree1.find_elements(:css, 'li.folder')
|
||||
expect(root_folders.length).to eq 1
|
||||
expect(root_folders.first.find_element(:css, '.name').text).to include_text('course files')
|
||||
expect(root_folders.first.find_element(:css, '.name')).to include_text('course files')
|
||||
|
||||
root_folders.first.find_element(:css, '.sign.plus').click
|
||||
wait_for_ajaximations
|
||||
|
||||
sub_folders = root_folders.first.find_elements(:css, 'li.folder')
|
||||
expect(sub_folders.length).to eq 1
|
||||
expect(sub_folders.first.find_element(:css, '.name').text).to include_text('subfolder')
|
||||
expect(sub_folders.first.find_element(:css, '.name')).to include_text('subfolder')
|
||||
|
||||
text_file = root_folders.first.find_elements(:css, 'li.file.text')
|
||||
expect(text_file.length).to eq 1
|
||||
expect(text_file.first.find_element(:css, '.name').text).to include_text('text_file.txt')
|
||||
expect(text_file.first.find_element(:css, '.name')).to include_text('text_file.txt')
|
||||
|
||||
sub_folders.first.find_element(:css, '.sign.plus').click
|
||||
wait_for_ajaximations
|
||||
|
||||
sub_sub_folders = sub_folders.first.find_elements(:css, 'li.folder')
|
||||
expect(sub_sub_folders.length).to eq 1
|
||||
expect(sub_sub_folders.first.find_element(:css, '.name').text).to include_text('subsubfolder')
|
||||
expect(sub_sub_folders.first.find_element(:css, '.name')).to include_text('subsubfolder')
|
||||
|
||||
end
|
||||
|
||||
|
@ -176,8 +176,7 @@ describe "Wiki pages and Tiny WYSIWYG editor Files" do
|
|||
end
|
||||
end
|
||||
wiki_page_tools_upload_file('#sidebar_upload_file_form', :text)
|
||||
wait_for_ajaximations
|
||||
keep_trying_until { expect(f('.file_list')).to include_text('testfile') }
|
||||
expect(f('.file_list')).to include_text('testfile')
|
||||
end
|
||||
|
||||
it "should show uploaded files in file tree and add them to the rce" do
|
||||
|
@ -292,7 +291,7 @@ describe "Wiki pages and Tiny WYSIWYG editor Files" do
|
|||
expand_root_folder
|
||||
wait_for_ajaximations
|
||||
expect(ff('li.folder li.folder').count).to eq 2
|
||||
expect(f('li.folder li.folder .name').text).to include_text("visible subfolder")
|
||||
expect(f('li.folder li.folder .name')).to include_text("visible subfolder")
|
||||
end
|
||||
|
||||
it "should show sub-folder in the sidebar if it is hidden" do
|
||||
|
|
|
@ -327,7 +327,7 @@ describe "Wiki pages and Tiny WYSIWYG editor features" do
|
|||
submit_form("#new_page_drop_down")
|
||||
|
||||
in_frame wiki_page_body_ifr_id do
|
||||
expect(f('#tinymce p a').attribute('href')).to include_text title
|
||||
expect(f('#tinymce p a').attribute('href')).to include title
|
||||
end
|
||||
|
||||
select_all_wiki
|
||||
|
|
|
@ -94,7 +94,7 @@ describe "Wiki Pages" do
|
|||
driver.switch_to.window(driver.window_handles.first)
|
||||
get "/courses/#{@course.id}/pages/Page1/edit"
|
||||
switch_editor_views(wiki_page_body)
|
||||
expect(f('textarea').text).to include_text('test')
|
||||
expect(f('textarea')).to include_text('test')
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -109,12 +109,11 @@ describe "Wiki Pages" do
|
|||
get "/courses/#{@course.id}/pages"
|
||||
f('.al-trigger').click
|
||||
f('.edit-menu-item').click
|
||||
expect(f('.edit-control-text').attribute(:value)).to include_text('B-Team')
|
||||
expect(f('.edit-control-text').attribute(:value)).to include('B-Team')
|
||||
f('.edit-control-text').clear()
|
||||
f('.edit-control-text').send_keys('A-Team')
|
||||
fj('button:contains("Save")').click
|
||||
wait_for_ajaximations
|
||||
expect(f('.collectionViewItems').text).to include('A-Team')
|
||||
expect(f('.collectionViewItems')).to include_text('A-Team')
|
||||
end
|
||||
|
||||
it "should display a warning alert when accessing a deleted page", priority: "1", test_id: 126840 do
|
||||
|
|
Loading…
Reference in New Issue