itemengine-cypress-automation 1.0.189-e2e-execution-crash-83cdbd4.0 → 1.0.189
Sign up to get free protection for your applications and to get access to all the features.
- package/cypress/e2e/ILC/AudioPlayerNew/allSupportedFileTypes.js +79 -0
- package/cypress/e2e/ILC/AudioPlayerNew/barAudioPlayerStyle.js +647 -0
- package/cypress/e2e/ILC/AudioPlayerNew/compactAudioPlayerStyle.js +429 -0
- package/cypress/e2e/ILC/AudioPlayerNew/customizePlayerLayoutSettings.js +596 -0
- package/cypress/e2e/ILC/AudioPlayerNew/previewContents.smoke.js +162 -0
- package/cypress/e2e/ILC/AudioPlayerNew/standardAudioPlayerStyle.js +792 -0
- package/cypress/e2e/ILC/AudioPlayerNew/studentViewSettings.js +253 -0
- package/cypress/e2e/ILC/AudioPlayerNew/uploadAndAddAudioFile.js +313 -0
- package/cypress/e2e/ILC/AudioResponseNew/additionalSettingsBasic.js +1 -22
- package/cypress/e2e/ILC/AudioResponseNew/barRecorderStyle.smoke.js +1 -1
- package/cypress/e2e/ILC/AudioResponseNew/compactRecorderStyle.smoke.js +1 -1
- package/cypress/e2e/ILC/AudioResponseNew/standardRecorderStyle.smoke.js +1 -1
- package/cypress/e2e/ILC/AudioResponseNew/studentViewSettings.js +2 -11
- package/cypress/e2e/ILC/ChartsBar/previewContentsForAllViews.smoke.js +359 -0
- package/cypress/e2e/ILC/DragAndDropIntoCategoriesNew/clickAndDrop.js +1 -1
- package/cypress/e2e/ILC/DrawingResponse/drawingResponseGradingViewAndCorrectAnswerViewContents.smoke.js +6 -8
- package/cypress/e2e/ILC/EditTabSettingPage/itemPreviewSettingsTabFunctionality.js +417 -28
- package/cypress/e2e/ILC/EssayResponse/editCategoryFlyout.js +1 -1
- package/cypress/e2e/ILC/FeedbackScaleNew/headerSection.js +29 -1
- package/cypress/e2e/ILC/FillInTheGapsDragAndDropNew/previewContentsForAllViews.smoke.js +2 -2
- package/cypress/e2e/ILC/FillInTheGapsDragAndDropNew/studentViewSettings.js +1 -1
- package/cypress/e2e/ILC/FillInTheGapsDropdownNew/studentViewSettings.js +1 -1
- package/cypress/e2e/ILC/FillInTheGapsOverImageDragAndDrop/editTabScoring.js +1 -0
- package/cypress/e2e/ILC/FillInTheGapsOverImageDragAndDrop/previewContentsForAllViews.smoke.js +2 -2
- package/cypress/e2e/ILC/FillInTheGapsOverImageDragAndDrop/studentViewSettings.js +1 -1
- package/cypress/e2e/ILC/FillInTheGapsOverImageDropdownNew/studentViewSettings.js +1 -1
- package/cypress/e2e/ILC/FillInTheGapsOverImageTextNew/Scoring/partialDifferentWeightsWithCorrectPointsEqualToAlternativePoints.js +4 -4
- package/cypress/e2e/ILC/FillInTheGapsOverImageTextNew/Scoring/partialEqualWeightsWithAlternativePointsGreaterThanCorrectPoints.js +1 -1
- package/cypress/e2e/ILC/FillInTheGapsOverImageTextNew/studentViewSettings.js +1 -1
- package/cypress/e2e/ILC/FillInTheGapsTextNew/Scoring/partialDifferentWeightsAlternativePointsGreaterThanCorrectPoints.js +5 -5
- package/cypress/e2e/ILC/FillInTheGapsTextNew/Scoring/partialDifferentWeightsWithCorrectPointsEqualToAlternativePoints.js +3 -4
- package/cypress/e2e/ILC/FillInTheGapsTextNew/Scoring/partialEqualWeightsWithAlternativePointsGreaterThanCorrectPoints.js +1 -1
- package/cypress/e2e/ILC/FillInTheGapsTextNew/headerSection.js +1 -0
- package/cypress/e2e/ILC/FillInTheGapsTextNew/studentViewSettings.js +1 -1
- package/cypress/e2e/ILC/Graphing/Scoring/allOrNothingWithAlternativePointsGreaterThanCorrectPoints.js +2 -2
- package/cypress/e2e/ILC/Graphing/Scoring/allOrNothingWithCorrectPointsEqualToAlternatePoints.js +2 -2
- package/cypress/e2e/ILC/Graphing/Scoring/allOrNothingWithCorrectPointsGreaterThanAlternativePoints.js +2 -2
- package/cypress/e2e/ILC/Graphing/addBackgroundShapesSection.js +2 -2
- package/cypress/e2e/ILC/Graphing/studentViewSettings.js +1 -1
- package/cypress/e2e/ILC/GridFill/checkAnswerFunctionalityForAllViews.smoke.js +3 -2
- package/cypress/e2e/ILC/GridFill/gridLayoutContents.js +11 -3
- package/cypress/e2e/ILC/GridFill/previewContentsForAllViews.smoke.js +3 -3
- package/cypress/e2e/ILC/GridFill/scoring/allOrNothingScoringCellShadeCount.js +2 -2
- package/cypress/e2e/ILC/GridFill/scoring/cellShadeCountAllOrNothingCorrectPointsGreaterThanAlternativePoints.js +143 -0
- package/cypress/e2e/ILC/GridFill/scoring/cellShadeCountPartialEqualWeightsWithAlternativePointsGreaterThanCorrectPoints.js +132 -0
- package/cypress/e2e/ILC/GridFill/scoring/cellShadeCountPartialEqualWeightsWithCorrectPointsEqualToAlternativePoints.js +143 -0
- package/cypress/e2e/ILC/GridFill/scoring/cellShadeCountPartialEqualWeightsWithCorrectPointsGreaterThanAlternativePoints.js +144 -0
- package/cypress/e2e/ILC/GridFill/scoring/cellShadeCountallOrNothingCorrectPointsEqualToAlternativePoints.js +143 -0
- package/cypress/e2e/ILC/GridFill/scoring/cellshadeCountAllOrNothingAlternativePointsGreaterThanCorrectPoints.js +131 -0
- package/cypress/e2e/ILC/GridFill/scoring/matchExactAndCellShadeCountCombinedScoring.js +87 -0
- package/cypress/e2e/ILC/GridFill/scoring/partialEqualWeightsCellShadeCountBasics.js +446 -0
- package/cypress/e2e/ILC/GridFill/studentViewSettingsSection.js +1 -1
- package/cypress/e2e/ILC/ListOrderingDropdown/Scoring/allOrNothingAlternativePointsGreaterThanCorrectPoints.js +194 -0
- package/cypress/e2e/ILC/ListOrderingDropdown/Scoring/allOrNothingCorrectPointsEqualToAlternativePoints.js +195 -0
- package/cypress/e2e/ILC/ListOrderingDropdown/Scoring/allOrNothingCorrectPointsGreaterThanAlternativePoints.js +274 -0
- package/cypress/e2e/ILC/ListOrderingDropdown/Scoring/allOrNothingPenaltyScoring.js +48 -0
- package/cypress/e2e/ILC/ListOrderingDropdown/Scoring/manuallyAndNonScored.js +144 -0
- package/cypress/e2e/ILC/ListOrderingDropdown/Scoring/partialDifferentWeightsAlternativePointsGreaterThanCorrectPoints.js +252 -0
- package/cypress/e2e/ILC/ListOrderingDropdown/Scoring/partialDifferentWeightsBasic.js +102 -0
- package/cypress/e2e/ILC/ListOrderingDropdown/Scoring/partialDifferentWeightsCorrectPointsEqualToAlternativePoints.js +256 -0
- package/cypress/e2e/ILC/ListOrderingDropdown/Scoring/partialDifferentWeightsCorrectPointsGreaterThanAlternativePoints.js +253 -0
- package/cypress/e2e/ILC/ListOrderingDropdown/Scoring/partialDifferentWeightsMinimumAndPenaltyScoring.js +308 -0
- package/cypress/e2e/ILC/ListOrderingDropdown/Scoring/partialEqualWeightsAlternativePointsGreaterThanCorrectPoints.js +225 -0
- package/cypress/e2e/ILC/ListOrderingDropdown/Scoring/partialEqualWeightsBasic.js +151 -0
- package/cypress/e2e/ILC/ListOrderingDropdown/Scoring/partialEqualWeightsCorrectPointsEqualToAlternativePoints.js +196 -0
- package/cypress/e2e/ILC/ListOrderingDropdown/Scoring/partialEqualWeightsCorrectPointsGreaterThanAlternativePoints.js +227 -0
- package/cypress/e2e/ILC/ListOrderingDropdown/additionalSettings.js +91 -0
- package/cypress/e2e/ILC/ListOrderingDropdown/allOrNothingForAllViews.smoke.js +230 -0
- package/cypress/e2e/ILC/ListOrderingDropdown/checkAnswerFunctionalityForAllViews.smoke.js +124 -0
- package/cypress/e2e/ILC/ListOrderingDropdown/editTabBasicSection.js +221 -0
- package/cypress/e2e/ILC/ListOrderingDropdown/editTabScoring.js +203 -0
- package/cypress/e2e/ILC/ListOrderingDropdown/manuallyAndNonScoredEditTab.js +71 -0
- package/cypress/e2e/ILC/ListOrderingDropdown/minimumScoringPenaltyPointsAndRoundingDropdown.js +197 -0
- package/cypress/e2e/ILC/ListOrderingDropdown/previewContentsForAllViews.smoke.js +201 -0
- package/cypress/e2e/ILC/ListOrderingDropdown/specifyCorrectAnswerSection.js +115 -0
- package/cypress/e2e/ILC/ListOrderingDropdown/studentViewSettings.js +183 -0
- package/cypress/e2e/ILC/ListOrderingNew/Scoring/allOrNothingAlternativePointsGreaterThanCorrectPoints.js +216 -0
- package/cypress/e2e/ILC/ListOrderingNew/Scoring/allOrNothingCorrectPointsEqualToAlternativePoints.js +214 -0
- package/cypress/e2e/ILC/ListOrderingNew/Scoring/allOrNothingCorrectPointsGreaterThanAlternativePoints.js +273 -0
- package/cypress/e2e/ILC/ListOrderingNew/Scoring/allOrNothingPenaltyScoring.js +52 -0
- package/cypress/e2e/ILC/ListOrderingNew/Scoring/manuallyAndNonScored.js +128 -0
- package/cypress/e2e/ILC/ListOrderingNew/Scoring/partialDifferentWeightsAlternativePointsGreaterThanCorrectPoints.js +279 -0
- package/cypress/e2e/ILC/ListOrderingNew/Scoring/partialDifferentWeightsBasic.js +109 -0
- package/cypress/e2e/ILC/ListOrderingNew/Scoring/partialDifferentWeightsCorrectPointsEqualToAlternativePoints.js +278 -0
- package/cypress/e2e/ILC/ListOrderingNew/Scoring/partialDifferentWeightsCorrectPointsGreaterThanAlternativePoints.js +278 -0
- package/cypress/e2e/ILC/ListOrderingNew/Scoring/partialDifferentWeightsMinimumAndPenaltyScoring.js +335 -0
- package/cypress/e2e/ILC/ListOrderingNew/Scoring/partialEqualWeightsAlternativePointsGreaterThanCorrectPoints.js +250 -0
- package/cypress/e2e/ILC/ListOrderingNew/Scoring/partialEqualWeightsBasic.js +161 -0
- package/cypress/e2e/ILC/ListOrderingNew/Scoring/partialEqualWeightsCorrectPointsEqualToAlternativePoints.js +216 -0
- package/cypress/e2e/ILC/ListOrderingNew/Scoring/partialEqualWeightsCorrectPointsGreaterThanAlternativePoints.js +252 -0
- package/cypress/e2e/ILC/ListOrderingNew/additionalSettings.js +118 -0
- package/cypress/e2e/ILC/ListOrderingNew/allOrNothingForAllViews.smoke.js +243 -0
- package/cypress/e2e/ILC/ListOrderingNew/checkAnswerFunctionalityForAllViews.smoke.js +128 -0
- package/cypress/e2e/ILC/ListOrderingNew/editTabBasicSection.js +155 -0
- package/cypress/e2e/ILC/ListOrderingNew/editTabScoring.js +195 -0
- package/cypress/e2e/ILC/ListOrderingNew/headerSection.js +78 -0
- package/cypress/e2e/ILC/ListOrderingNew/manuallyAndNonScoredEditTab.js +69 -0
- package/cypress/e2e/ILC/ListOrderingNew/minimumScoringPenaltyPointsAndRoundingDropdown.js +194 -0
- package/cypress/e2e/ILC/ListOrderingNew/previewContentsForAllViews.smoke.js +176 -0
- package/cypress/e2e/ILC/ListOrderingNew/specifyCorrectAnswerSection.js +112 -0
- package/cypress/e2e/ILC/ListOrderingNew/studentViewSettings.js +244 -0
- package/cypress/e2e/ILC/Matching/studentViewSettings.js +1 -1
- package/cypress/e2e/ILC/MultipleSelection/allOrNothingWithAlternativeAnswer.js +1 -0
- package/cypress/e2e/ILC/MultipleSelectionGridNew/studentViewSettings.js +1 -1
- package/cypress/e2e/ILC/NumberLine/LayoutSection.js +209 -0
- package/cypress/e2e/ILC/NumberLine/Scoring/allOrNothingWithAlternatePointsGreaterThanCorrectPoints.js +1 -1
- package/cypress/e2e/ILC/NumberLine/Scoring/allOrNothingWithCorrectPointsEqualToAlternatePoints.js +1 -1
- package/cypress/e2e/ILC/NumberLine/Scoring/allOrNothingWithCorrectPointsGreaterThanAlternativePoints.js +4 -4
- package/cypress/e2e/ILC/NumberLine/Scoring/manualAndNonScoredScoring.js +1 -1
- package/cypress/e2e/ILC/NumberLine/Scoring/partialEqualWeightsBasic.js +1 -1
- package/cypress/e2e/ILC/NumberLine/Scoring/partialEqualWeightsWithAlternatePointsGreaterThanCorrectPoints.js +1 -1
- package/cypress/e2e/ILC/NumberLine/Scoring/partialEqualWeightsWithCorrectPointsGreaterThanAlternatePoints.js +1 -1
- package/cypress/e2e/ILC/NumberLine/Scoring/partialEqualWeigtsWithCorrectPointsEqualToAlternatePoints.js +1 -1
- package/cypress/e2e/ILC/NumberLine/allOrNothingScoringForAllViews.smoke.js +58 -2
- package/cypress/e2e/ILC/NumberLine/checkAnswerFunctionalityForAllViews.smoke.js +1 -1
- package/cypress/e2e/ILC/NumberLine/editTabScoringSection.js +1 -1
- package/cypress/e2e/ILC/NumberLine/gradingViewAndCorrectAnswerView.smoke.js +2 -2
- package/cypress/e2e/ILC/NumberLine/headerSection.js +1 -1
- package/cypress/e2e/ILC/NumberLine/lineSettingsSection.js +33 -0
- package/cypress/e2e/ILC/NumberLine/numberLineSection.js +50 -0
- package/cypress/e2e/ILC/NumberLine/previewTabContentsForAllViews.smoke.js +2 -2
- package/cypress/e2e/ILC/NumberLine/specifyCorrectAnswerSection.js +1 -1
- package/cypress/e2e/ILC/NumberLine/studentViewSettings.js +2 -2
- package/cypress/e2e/ILC/NumberLine/toolSettings.js +2 -1
- package/cypress/e2e/ILC/NumberLine/toolsAndControls.js +1 -1
- package/cypress/e2e/ILC/NumberLine/verticalNumberLine/allOrNothingScoringForAllViews.smoke.js +696 -0
- package/cypress/e2e/ILC/NumberLine/verticalNumberLine/gradingViewAndCorrectAnswerView.smoke.js +173 -0
- package/cypress/e2e/ILC/NumberLine/verticalNumberLine/layoutSection.js +211 -0
- package/cypress/e2e/ILC/NumberLine/verticalNumberLine/numberLineSection.js +75 -0
- package/cypress/e2e/ILC/NumberLine/verticalNumberLine/previewTabContentsForAllViews.smoke.js +204 -0
- package/cypress/e2e/ILC/NumberLineLabel/Scoring/allOrNothingAlternativePointsGreaterThanCorrectPoints.js +229 -0
- package/cypress/e2e/ILC/NumberLineLabel/Scoring/allOrNothingCorrectPointsEqualToAlternativePoints.js +229 -0
- package/cypress/e2e/ILC/NumberLineLabel/Scoring/allOrNothingCorrectPointsGreaterThanAlternativePoints.js +229 -0
- package/cypress/e2e/ILC/NumberLineLabel/Scoring/manualAndNonScoredScoring.js +169 -0
- package/cypress/e2e/ILC/NumberLineLabel/Scoring/partialDifferentWeightsAlternativePointsGreaterThanCorrectPoints.js +274 -0
- package/cypress/e2e/ILC/NumberLineLabel/Scoring/partialDifferentWeightsBasic.js +433 -0
- package/cypress/e2e/ILC/NumberLineLabel/Scoring/partialDifferentWeightsCorrectPointsEqualToAlternativePoints.js +274 -0
- package/cypress/e2e/ILC/NumberLineLabel/Scoring/partialDifferentWeightsCorrectPointsGreaterThanAlternativePoints.js +274 -0
- package/cypress/e2e/ILC/NumberLineLabel/Scoring/partialEqualWeightsAlternativePointsGreaterThanCorrectPoints.js +249 -0
- package/cypress/e2e/ILC/NumberLineLabel/Scoring/partialEqualWeightsBasic.js +135 -0
- package/cypress/e2e/ILC/NumberLineLabel/Scoring/partialEqualWeightsCorrectPointsEqualToAlternativePoints.js +210 -0
- package/cypress/e2e/ILC/NumberLineLabel/Scoring/partialEqualWeightsCorrectPointsGreaterThanAlternativePoints.js +248 -0
- package/cypress/e2e/ILC/NumberLineLabel/additionalSettingsBasic.js +115 -0
- package/cypress/e2e/ILC/NumberLineLabel/allOrNothingForAllViews.smoke.js +288 -0
- package/cypress/e2e/ILC/NumberLineLabel/checkAnswerFunctionalityForAllViews.smoke.js +153 -0
- package/cypress/e2e/ILC/NumberLineLabel/editTabBasicSection.js +326 -0
- package/cypress/e2e/ILC/NumberLineLabel/editTabScoring.js +234 -0
- package/cypress/e2e/ILC/NumberLineLabel/gradingViewAndCorrectAnswerView.smoke.js +164 -0
- package/cypress/e2e/ILC/NumberLineLabel/headerSection.js +80 -0
- package/cypress/e2e/ILC/NumberLineLabel/layoutSection.js +204 -0
- package/cypress/e2e/ILC/NumberLineLabel/manuallyAndNonScoredEditTab.js +79 -0
- package/cypress/e2e/ILC/NumberLineLabel/minimumScoringPenaltyPointsAndRoundingDropdown.js +85 -0
- package/cypress/e2e/ILC/NumberLineLabel/numberLineSection.js +51 -0
- package/cypress/e2e/ILC/NumberLineLabel/previewContentsForAllViews.smoke.js +120 -0
- package/cypress/e2e/ILC/NumberLineLabel/specifyCorrectAnswerSection.js +74 -0
- package/cypress/e2e/ILC/NumberLineLabel/studentViewSettings.js +183 -0
- package/cypress/e2e/ILC/NumberLineLabel/toolSettings.js +76 -0
- package/cypress/e2e/ILC/NumberLineLabel/verticalNumberLine/allOrNothingForAllViews.smoke.js +292 -0
- package/cypress/e2e/ILC/NumberLineLabel/verticalNumberLine/checkAnswerFunctionalityForAllViews.smoke.js +155 -0
- package/cypress/e2e/ILC/NumberLineLabel/verticalNumberLine/gradingViewAndCorrectAnswerView.smoke.js +166 -0
- package/cypress/e2e/ILC/NumberLineLabel/verticalNumberLine/layoutSection.js +360 -0
- package/cypress/e2e/ILC/NumberLineLabel/verticalNumberLine/numberLineSection.js +80 -0
- package/cypress/e2e/ILC/NumberLineLabel/verticalNumberLine/previewContentsForAllViews.smoke.js +111 -0
- package/cypress/e2e/ILC/Protractor/protractorPreviewContents.smoke.js +1 -1
- package/cypress/e2e/ILC/ReadingRuler/readingRulerEditTabBasicsSection.js +49 -1
- package/cypress/e2e/ILC/ShortTextResponseNew/studentViewSettings.js +1 -1
- package/cypress/e2e/ILC/SingleSelectionGridNew/studentViewSettings.js +1 -1
- package/cypress/e2e/ILC/TextEntryMath/responseEvaluationMethodsAndCustomSettings.js +2 -2
- package/cypress/e2e/ILC/TextSelection/Scoring/allOrNothingAlternatePointsMoreThanCorrectPoints.js +0 -1
- package/cypress/e2e/ILC/TextSelection/Scoring/allOrNothingCorrectPointsEqualToAlternatePoints.js +0 -1
- package/cypress/e2e/ILC/TextSelection/Scoring/allOrNothingCorrectPointsMoreThanAlternatePoints.js +0 -1
- package/cypress/e2e/ILC/TextSelection/Scoring/basicScoringForAllTextSelectionTypes.smoke.js +0 -1
- package/cypress/e2e/ILC/TextSelection/additionalSettings.js +125 -0
- package/cypress/e2e/ILC/TextSelection/allOrNothingScoringForAllViews.smoke.js +0 -1
- package/cypress/e2e/ILC/TextSelection/checkAnswerFunctionalityForAllViews.smoke.js +2 -2
- package/cypress/e2e/ILC/TextSelection/editTabScoringSection.js +5 -4
- package/cypress/e2e/ILC/TextSelection/headerSection.js +73 -0
- package/cypress/e2e/ILC/TextSelection/previewContentsForAllViews.smoke.js +6 -7
- package/cypress/e2e/ILC/TextSelection/questionInstructionsAndQuestion.js +179 -0
- package/cypress/e2e/ILC/TextSelection/specifyCorrectAnswerSection.js +89 -0
- package/cypress/e2e/ILC/TextSelection/studentViewSettings.js +436 -0
- package/cypress/e2e/ILC/TextSelection/styleAndLayoutCustomizationAccordion.js +277 -0
- package/cypress/e2e/ILC/TextSelection/textSelectionModesInPreviewTab.js +222 -0
- package/cypress/e2e/ILC/TextSelection/textSelectionModesInSpecifyCorrectAnswerSection.js +260 -0
- package/cypress/e2e/ILC/TextSelection/textSelectionModesInSpecifyPossibleOptionsSection.js +380 -0
- package/cypress/e2e/ILC/ToolSettings/toolSettingsContent.js +5 -5
- package/cypress/e2e/ILC/ToolSettings/toolSettingsPreviewContents.smoke.js +3 -3
- package/cypress/e2e/ILC/VideoResponseNew/additionalSettingsBasic.js +77 -0
- package/cypress/e2e/ILC/VideoResponseNew/customizePlaybackControls.js +313 -0
- package/cypress/e2e/ILC/VideoResponseNew/editAndPreviewTabScoringSection.js +99 -0
- package/cypress/e2e/ILC/VideoResponseNew/editTabBasicSection.js +171 -0
- package/cypress/e2e/ILC/VideoResponseNew/gradingViewAndCorrectAnswerViewContents.smoke.js +179 -0
- package/cypress/e2e/ILC/VideoResponseNew/headerSection.js +79 -0
- package/cypress/e2e/ILC/VideoResponseNew/previewContentsForAllViews.smoke.js +201 -0
- package/cypress/e2e/ILC/VideoResponseNew/standardRecorderStyle.js +567 -0
- package/cypress/e2e/ILC/VideoResponseNew/studentViewSettings.js +194 -0
- package/cypress/fixtures/constants.js +1 -1
- package/cypress/fixtures/drawingToolbarOptionsAdditionalOptionsAndSpecialAndMathCharacters.js +1 -1
- package/cypress/fixtures/equationEditorCategoriesAndSymbols .js +20 -20
- package/cypress/fixtures/theme/ilc.json +22 -18
- package/cypress/pages/audioPlayerPage.js +668 -446
- package/cypress/pages/audioResponsePage.js +8 -80
- package/cypress/pages/brainingCampManipulativePage.js +1 -1
- package/cypress/pages/chartsBarPage.js +231 -0
- package/cypress/pages/chartsDotPlotPage.js +8 -0
- package/cypress/pages/chartsLinePage.js +42 -0
- package/cypress/pages/components/allowTeachersToDownloadStudentResponseComponent.js +58 -0
- package/cypress/pages/components/autoScoredSpecifyCorrectAnswerSection.js +13 -23
- package/cypress/pages/components/autoScoredStudentViewSettings.js +6 -6
- package/cypress/pages/components/barAndLineChartComponent.js +120 -0
- package/cypress/pages/components/chartsCommonComponent.js +105 -0
- package/cypress/pages/components/commonComponents.js +1 -0
- package/cypress/pages/components/draggableOptionContainer.js +2 -1
- package/cypress/pages/components/equationEditorFlyout.js +3 -2
- package/cypress/pages/components/essayResponseCommonComponents.js +8 -2
- package/cypress/pages/components/fillInTheGapsDropdownCommonComponent.js +1 -0
- package/cypress/pages/components/imageCanvasComponent.js +2 -1
- package/cypress/pages/components/index.js +7 -0
- package/cypress/pages/components/layoutSectionComponent.js +1156 -0
- package/cypress/pages/components/limitNumberOfRetakeComponent.js +90 -0
- package/cypress/pages/components/numberLineCommonComponent.js +685 -0
- package/cypress/pages/components/optionsWrapperComponent.js +13 -2
- package/cypress/pages/components/playbackControlsBaseComponent.js +20 -13
- package/cypress/pages/components/questionInstructionsComponent.js +3 -19
- package/cypress/pages/components/styleAndLayoutCustomizationAccordionComponent.js +46 -0
- package/cypress/pages/components/toolSettingsComponent.js +6 -0
- package/cypress/pages/contentBlocksPage.js +18 -2
- package/cypress/pages/createItemPage.js +75 -8
- package/cypress/pages/dialogBoxBase.js +2 -2
- package/cypress/pages/drawingResponsePage.js +24 -4
- package/cypress/pages/feedbackScalePage.js +3 -0
- package/cypress/pages/graphingPage.js +19 -1
- package/cypress/pages/gridFillPage.js +47 -59
- package/cypress/pages/index.js +5 -1
- package/cypress/pages/itemPreviewSettingsPage.js +4 -0
- package/cypress/pages/listOrderingPage.js +561 -555
- package/cypress/pages/matchingPage.js +1 -1
- package/cypress/pages/multipleSelectionPage.js +23 -1
- package/cypress/pages/numberLineLabelPage.js +1086 -0
- package/cypress/pages/numberLinePage.js +696 -78
- package/cypress/pages/rulerPage.js +6 -2
- package/cypress/pages/textSelectionPage.js +461 -23
- package/cypress/pages/videoResponsePage.js +393 -81
- package/package.json +1 -1
@@ -0,0 +1,171 @@
|
|
1
|
+
import { videoResponsePage } from "../../../pages";
|
2
|
+
import abortEarlySetup from "../../../support/helpers/abortEarly";
|
3
|
+
import utilities from "../../../support/helpers/utilities";
|
4
|
+
const css = Cypress.env('css');
|
5
|
+
|
6
|
+
describe('Create item page - Video response: Question instructions, Maximum recording duration: Edit and preview tab', () => {
|
7
|
+
before(() => {
|
8
|
+
cy.loginAs('admin');
|
9
|
+
});
|
10
|
+
|
11
|
+
describe('Question instructions input field: Edit tab', () => {
|
12
|
+
abortEarlySetup();
|
13
|
+
before(() => {
|
14
|
+
videoResponsePage.steps.navigateToCreateQuestion('video response');
|
15
|
+
});
|
16
|
+
|
17
|
+
videoResponsePage.tests.verifyQuestionInstructionsInputFieldEditTab();
|
18
|
+
});
|
19
|
+
|
20
|
+
describe('Question instructions input field: Preview tab', () => {
|
21
|
+
abortEarlySetup();
|
22
|
+
before(() => {
|
23
|
+
videoResponsePage.steps.navigateToCreateQuestion('video response');
|
24
|
+
});
|
25
|
+
|
26
|
+
videoResponsePage.tests.verifyQuestionInstructionsInputFieldPreviewTab();
|
27
|
+
});
|
28
|
+
|
29
|
+
//Failing due to https://redmine.zeuslearning.com/issues/570772, https://redmine.zeuslearning.com/issues/570761
|
30
|
+
describe('Maximum recording duration: Edit tab', () => {
|
31
|
+
abortEarlySetup();
|
32
|
+
before(() => {
|
33
|
+
videoResponsePage.steps.navigateToCreateQuestion('video response');
|
34
|
+
});
|
35
|
+
|
36
|
+
it('\'Maximum recording duration\' label, input field, "Secs" and "Mins" toggle buttons should be displayed. By default "Secs" toggle button should be in selected state. "300" should be displayed in \'Maximum recording duration\' field', () => {
|
37
|
+
utilities.verifyInnerText(videoResponsePage.maxRecordingDurationLabel(), 'Maximum recording duration');
|
38
|
+
utilities.verifyElementVisibilityState(videoResponsePage.maxRecordingDurationLabel(), 'visible');
|
39
|
+
utilities.verifyElementVisibilityState(videoResponsePage.maxRecordingDurationInputField(), 'visible');
|
40
|
+
videoResponsePage.steps.verifySecsToggleButtonSelectedState();
|
41
|
+
videoResponsePage.steps.verifyMaximumRecordingDuration(300);
|
42
|
+
utilities.verifyInnerText(videoResponsePage.maxRecordingDurationSecsToggleButton(), 'Secs');
|
43
|
+
utilities.verifyInnerText(videoResponsePage.maxRecordingDurationMinsToggleButton(), 'Mins');
|
44
|
+
});
|
45
|
+
|
46
|
+
it('CSS of \'Maximum recording duration\' section', { tags: 'css' }, () => {
|
47
|
+
utilities.verifyCSS(videoResponsePage.maxRecordingDurationLabel(), {
|
48
|
+
'color': css.color.labels,
|
49
|
+
'font-size': css.fontSize.normal,
|
50
|
+
'font-weight': css.fontWeight.semibold
|
51
|
+
});
|
52
|
+
utilities.verifyCSS(videoResponsePage.maxRecordingDurationSecsToggleButton(), {
|
53
|
+
'color': css.color.defaultBackground,
|
54
|
+
'background-color': css.color.activeButtons,
|
55
|
+
'font-size': css.fontSize.default,
|
56
|
+
'font-weight': css.fontWeight.regular
|
57
|
+
});
|
58
|
+
utilities.verifyCSS(videoResponsePage.maxRecordingDurationMinsToggleButton(), {
|
59
|
+
'color': css.color.secondaryBtn,
|
60
|
+
'background-color': css.color.secondaryBtnBg,
|
61
|
+
'font-size': css.fontSize.default,
|
62
|
+
'font-weight': css.fontWeight.regular
|
63
|
+
});
|
64
|
+
utilities.verifyCSS(videoResponsePage.maxRecordingDurationInputField(), {
|
65
|
+
'color': css.color.text,
|
66
|
+
'font-size': css.fontSize.default,
|
67
|
+
'font-weight': css.fontWeight.regular
|
68
|
+
});
|
69
|
+
});
|
70
|
+
|
71
|
+
it('When the user focuses in and out of the empty \'Maximum recording duration\' input field, \'Error: Maximum recording duration is required.\' validation error should be displayed below the \'Maximum recording duration\' input field', () => {
|
72
|
+
videoResponsePage.steps.clearMaximumRecordingDurationInputField();
|
73
|
+
utilities.verifyInnerText(videoResponsePage.errorMessage(), 'Error: Maximum recording duration is required.');
|
74
|
+
utilities.verifyElementVisibilityState(videoResponsePage.errorMessage(), 'visible');
|
75
|
+
});
|
76
|
+
|
77
|
+
videoResponsePage.tests.verifyErrorMessageCSSAndA11y();
|
78
|
+
|
79
|
+
it('When the user updates the \'Maximum recording duration\' value, then the validation message \'Error: Maximum recording duration is required.\' should disappear.', () => {
|
80
|
+
videoResponsePage.steps.setMaximumRecordingDuration(1000);
|
81
|
+
videoResponsePage.steps.verifyErrorMessageIsNotDisplayed();
|
82
|
+
});
|
83
|
+
|
84
|
+
it('When the user has set \'Maximum recording duration\' to \'0\' (zero), a validation message \'Error: Value must be greater than 0 secs.\' should be displayed', () => {
|
85
|
+
videoResponsePage.steps.setMaximumRecordingDuration(0);
|
86
|
+
videoResponsePage.steps.verifyMaximumRecordingDuration(0);
|
87
|
+
utilities.verifyInnerText(videoResponsePage.errorMessage(), 'Error: Value must be greater than 0 secs.');
|
88
|
+
utilities.verifyElementVisibilityState(videoResponsePage.errorMessage(), 'visible');
|
89
|
+
});
|
90
|
+
|
91
|
+
videoResponsePage.tests.verifyErrorMessageCSSAndA11y();
|
92
|
+
|
93
|
+
it('When the user updates the \'Maximum recording duration\' value, then the validation message \'Error: Value must be greater than 0 secs.\' should disappear', () => {
|
94
|
+
videoResponsePage.steps.setMaximumRecordingDuration(1000);
|
95
|
+
videoResponsePage.steps.verifyErrorMessageIsNotDisplayed();
|
96
|
+
});
|
97
|
+
|
98
|
+
it('When user adds decimal values or alphanumeric values then only numeric values should be displayed in the maximum recording length input field', () => {
|
99
|
+
videoResponsePage.steps.setMaximumRecordingDuration('.100.0');
|
100
|
+
videoResponsePage.steps.verifyMaximumRecordingDuration(1000);
|
101
|
+
videoResponsePage.steps.setMaximumRecordingDuration('!@#abcde584');
|
102
|
+
videoResponsePage.steps.verifyMaximumRecordingDuration(584);
|
103
|
+
});
|
104
|
+
|
105
|
+
it('When user tries to add a value greater than 600 it should be automatically set back to 600 and should not allow to add greater than set value', () => {
|
106
|
+
videoResponsePage.steps.setMaximumRecordingDuration(9999);
|
107
|
+
videoResponsePage.steps.verifyMaximumRecordingDuration(600);
|
108
|
+
});
|
109
|
+
|
110
|
+
it('When the user toggles to "Mins", "5" should be displayed in \'Maximum recording duration\' field', () => {
|
111
|
+
videoResponsePage.steps.toggleMaximumRecordingDurationInputField('Mins');
|
112
|
+
videoResponsePage.steps.verifyMaximumRecordingDuration(5);
|
113
|
+
});
|
114
|
+
|
115
|
+
it('When the user focuses in and out of the empty \'Maximum recording duration\' input field, \'Error: Maximum recording duration is required.\' validation error should be displayed below the \'Maximum recording duration\' input field', () => {
|
116
|
+
videoResponsePage.steps.clearMaximumRecordingDurationInputField();
|
117
|
+
utilities.verifyInnerText(videoResponsePage.errorMessage(), 'Error: Maximum recording duration is required.');
|
118
|
+
utilities.verifyElementVisibilityState(videoResponsePage.errorMessage(), 'visible');
|
119
|
+
});
|
120
|
+
|
121
|
+
videoResponsePage.tests.verifyErrorMessageCSSAndA11y();
|
122
|
+
|
123
|
+
it('When the user updates the \'Maximum recording duration\' value, then the validation message \'Error: Maximum recording duration is required.\' should disappear.', () => {
|
124
|
+
videoResponsePage.steps.setMaximumRecordingDuration(5);
|
125
|
+
videoResponsePage.steps.verifyErrorMessageIsNotDisplayed();
|
126
|
+
});
|
127
|
+
|
128
|
+
it('When the user has set \'Maximum recording duration\' to \'0\' (zero), a validation message \'Error: Value must be greater than 0 mins.\' should be displayed', () => {
|
129
|
+
videoResponsePage.steps.setMaximumRecordingDuration(0);
|
130
|
+
videoResponsePage.steps.verifyMaximumRecordingDuration(0);
|
131
|
+
utilities.verifyInnerText(videoResponsePage.errorMessage(), 'Error: Value must be greater than 0 mins.');
|
132
|
+
utilities.verifyElementVisibilityState(videoResponsePage.errorMessage(), 'visible');
|
133
|
+
});
|
134
|
+
|
135
|
+
videoResponsePage.tests.verifyErrorMessageCSSAndA11y();
|
136
|
+
|
137
|
+
it('When the user updates the \'Maximum recording duration\' value, then the validation message \'Error: Value must be greater than 0 mins.\' should disappear', () => {
|
138
|
+
videoResponsePage.steps.setMaximumRecordingDuration(5);
|
139
|
+
videoResponsePage.steps.verifyErrorMessageIsNotDisplayed();
|
140
|
+
});
|
141
|
+
|
142
|
+
it('When user tries to add a value greater than 10 it should be automatically set back to 10 and should not allow to add greater than set value', () => {
|
143
|
+
videoResponsePage.steps.setMaximumRecordingDuration(20);
|
144
|
+
videoResponsePage.steps.verifyMaximumRecordingDuration(10);
|
145
|
+
});
|
146
|
+
});
|
147
|
+
|
148
|
+
describe('Maximum recording duration: Preview tab', () => {
|
149
|
+
abortEarlySetup();
|
150
|
+
before(() => {
|
151
|
+
videoResponsePage.steps.navigateToCreateQuestion('video response');
|
152
|
+
videoResponsePage.steps.switchToPreviewTab();
|
153
|
+
});
|
154
|
+
|
155
|
+
it('By default, maximum recording duration (5 minutes) should be displayed in minutes(mm:ss) format', () => {
|
156
|
+
utilities.verifyInnerText(videoResponsePage.recordingTimer(), '05:00');
|
157
|
+
utilities.verifyElementVisibilityState(videoResponsePage.recordingTimer(), 'visible');
|
158
|
+
});
|
159
|
+
|
160
|
+
it('When the user has updated maximum recording duration value, then the updated value should get reflected in the preview tab and when user starts recording a video, the recorded video time should not go beyond the maximum recording duration value', () => {
|
161
|
+
videoResponsePage.steps.switchToEditTab();
|
162
|
+
videoResponsePage.steps.setMaximumRecordingDuration(30);
|
163
|
+
videoResponsePage.steps.switchToPreviewTab();
|
164
|
+
utilities.verifyInnerText(videoResponsePage.recordingTimer(), '00:30');
|
165
|
+
videoResponsePage.steps.startRecording();
|
166
|
+
videoResponsePage.steps.waitForRecordingToStart();
|
167
|
+
videoResponsePage.steps.addWaitToRecord(29000);
|
168
|
+
videoResponsePage.steps.verifyVideoPlaybackTimer('00:00', '00:30');
|
169
|
+
})
|
170
|
+
});
|
171
|
+
});
|
@@ -0,0 +1,179 @@
|
|
1
|
+
import { correctAnswerViewPage, videoResponsePage, itemPreviewPage, studentViewPage } from "../../../pages";
|
2
|
+
import { gradingViewPage } from "../../../pages";
|
3
|
+
import abortEarlySetup from "../../../support/helpers/abortEarly";
|
4
|
+
import utilities from "../../../support/helpers/utilities";
|
5
|
+
const css = Cypress.env('css');
|
6
|
+
let gradingAndCorrectAnsView = ['Grading view', 'Correct answer view']
|
7
|
+
const views = utilities.getViews(gradingAndCorrectAnsView);
|
8
|
+
var itemReferenceID = "";
|
9
|
+
const playbackSpeedOptions = ['1x', '1.25x', '1.5x', '2x'];
|
10
|
+
const playbackSpeedMultiplier = [1, 1.25, 1.5, 2];
|
11
|
+
|
12
|
+
describe('Create item page - Video response: Grading view, Correct answer view contents', () => {
|
13
|
+
before(() => {
|
14
|
+
cy.loginAs('admin');
|
15
|
+
});
|
16
|
+
|
17
|
+
if (views.includes('Grading view')) {
|
18
|
+
describe('Grading view contents', { tags: 'smoke' }, () => {
|
19
|
+
let actualVideoSeekedInPercent = 50
|
20
|
+
abortEarlySetup();
|
21
|
+
before(() => {
|
22
|
+
videoResponsePage.steps.navigateToCreateQuestion('video response');
|
23
|
+
cy.barsPreLoaderWait();
|
24
|
+
videoResponsePage.steps.addTextInQuestionInstructionsInputField('Record a video');
|
25
|
+
videoResponsePage.steps.allotPoints(10);
|
26
|
+
videoResponsePage.steps.clickOnSaveQuestionButton();
|
27
|
+
utilities.verifyElementVisibilityState(itemPreviewPage.referenceID(), 'visible');
|
28
|
+
//Global variable issue, not working inside before
|
29
|
+
itemPreviewPage.referenceID()
|
30
|
+
.invoke('text')
|
31
|
+
.then(($refID) => {
|
32
|
+
itemReferenceID = $refID;
|
33
|
+
cy.visit(`/item-engine/demo/render-item/student-view/${utilities.base64Encoding(itemReferenceID)}`);
|
34
|
+
videoResponsePage.steps.recordAndSaveVideo(12000);
|
35
|
+
utilities.verifyElementVisibilityState(videoResponsePage.standardPreviewPlaybackWrapper(), 'visible');
|
36
|
+
studentViewPage.steps.submitResponse();
|
37
|
+
studentViewPage.steps.clickOnGoToGradingViewButton();
|
38
|
+
});
|
39
|
+
});
|
40
|
+
|
41
|
+
it('Question instructions should be visible', () => {
|
42
|
+
utilities.verifyInnerText(videoResponsePage.questionInstructionsText(), 'Record a video');
|
43
|
+
utilities.verifyElementVisibilityState(videoResponsePage.questionInstructionsText(), 'visible');
|
44
|
+
});
|
45
|
+
|
46
|
+
it('The response submitted by the student should be visible in the playback player of the grading view.', () => {
|
47
|
+
utilities.verifyElementVisibilityState(videoResponsePage.standardPreviewPlaybackWrapper(), 'visible');
|
48
|
+
videoResponsePage.steps.verifyVideoPlaybackTimer('00:00', '00:12');
|
49
|
+
});
|
50
|
+
|
51
|
+
it('When the user clicks on \'Play\' button, then the video should start playing. Timer should display the amount of video that has been played and the total video length in (mm:ss)/(mm:ss) format.', () => {
|
52
|
+
videoResponsePage.steps.startPlayback();
|
53
|
+
videoResponsePage.steps.waitForPlaybackToBegin();
|
54
|
+
videoResponsePage.steps.verifyVideoPlaybackTimer('00:03', '00:12');
|
55
|
+
});
|
56
|
+
|
57
|
+
it('When the video player is in playback state and the user clicks on \'Pause\' button, then playback should get paused. Progress bar and timer should not update further and the \'Pause\' button should get replaced with \'Play\' button', () => {
|
58
|
+
videoResponsePage.steps.verifyVideoPlaybackTimer('00:05', '00:12');
|
59
|
+
videoResponsePage.steps.pauseAndVerifyProgressBarSliderPosition();
|
60
|
+
videoResponsePage.steps.verifyVideoPlaybackTimer('00:05', '00:12');
|
61
|
+
utilities.verifyElementVisibilityState(videoResponsePage.playbackPlayButton(), 'visible');
|
62
|
+
utilities.verifyElementVisibilityState(videoResponsePage.playbackPauseButton(), 'notExist');
|
63
|
+
});
|
64
|
+
|
65
|
+
it('When the user seeks the progress bar slider while the video is playing, then the video should continue to play from the position where the slider is seeked', () => {
|
66
|
+
videoResponsePage.steps.seekProgressBarSliderToCenter();
|
67
|
+
videoResponsePage.steps.addWaitToPlayVideo(1000);
|
68
|
+
videoResponsePage.steps.verifyProgressBarSliderPosition(actualVideoSeekedInPercent);
|
69
|
+
});
|
70
|
+
|
71
|
+
it('When the video playback is completed, the \'Pause\' button should get replaced with \'Play\' button', () => {
|
72
|
+
videoResponsePage.steps.startPlayback();
|
73
|
+
videoResponsePage.steps.verifyVideoPlaybackTimer('00:10', '00:12');
|
74
|
+
utilities.verifyElementVisibilityState(videoResponsePage.playbackPlayButton(), 'visible');
|
75
|
+
utilities.verifyElementVisibilityState(videoResponsePage.playbackPauseButton(), 'notExist');
|
76
|
+
videoResponsePage.steps.verifyProgressBarSliderPosition(99);
|
77
|
+
});
|
78
|
+
|
79
|
+
it('When the user hovers over \'Volume control\' button, volume control settings should open and by default it should be set to full volume and on hovering away from the button, the volume sliders should disappear', () => {
|
80
|
+
videoResponsePage.steps.hoverOnVolumeControlButton();
|
81
|
+
utilities.verifyElementVisibilityState(videoResponsePage.volumeControlSlider(), 'visible');
|
82
|
+
videoResponsePage.steps.verifyVolumeOfPlaybackPlayer('100');
|
83
|
+
utilities.hoverAwayFromElement();
|
84
|
+
utilities.verifyElementVisibilityState(videoResponsePage.volumeControlSlider(), 'notExist');
|
85
|
+
});
|
86
|
+
|
87
|
+
it('When volume is not set as 0 and user clicks on volume control button, then the video should be muted and the volume control button should change to a muted state', () => {
|
88
|
+
videoResponsePage.steps.clickOnVolumeButton();
|
89
|
+
videoResponsePage.steps.hoverOnVolumeControlButton();
|
90
|
+
videoResponsePage.steps.verifyVolumeOfPlaybackPlayer('0');
|
91
|
+
utilities.hoverAwayFromElement();
|
92
|
+
utilities.verifyElementVisibilityState(videoResponsePage.volumeControlSlider(), 'notExist');
|
93
|
+
utilities.verifyElementVisibilityState(videoResponsePage.muteVolumeIcon(), 'visible');
|
94
|
+
});
|
95
|
+
|
96
|
+
it('When the user clicks on the muted volume control button then the volume setting slider should return to full volume and the volume control button should change to an unmuted state', () => {
|
97
|
+
videoResponsePage.steps.clickOnVolumeButton();
|
98
|
+
videoResponsePage.steps.hoverOnVolumeControlButton();
|
99
|
+
videoResponsePage.steps.verifyVolumeOfPlaybackPlayer('100');
|
100
|
+
utilities.verifyElementVisibilityState(videoResponsePage.unmutedVolumeIcon(), 'visible');
|
101
|
+
});
|
102
|
+
|
103
|
+
it('User should be able to unmute the video by dragging the volume control higher again', () => {
|
104
|
+
videoResponsePage.steps.setVolumeSliderForPlayback(99);
|
105
|
+
videoResponsePage.steps.verifyVolumeOfPlaybackPlayer('100');
|
106
|
+
utilities.verifyElementVisibilityState(videoResponsePage.unmutedVolumeIcon(), 'visible');
|
107
|
+
utilities.hoverAwayFromElement();
|
108
|
+
});
|
109
|
+
|
110
|
+
for (let index = 0; index < playbackSpeedOptions.length; index++) {
|
111
|
+
it(`When the user selects playback speed option ${playbackSpeedOptions[index]}, the video playback speed should be changed accordingly`, () => {
|
112
|
+
videoResponsePage.steps.hoverOnPlaybackSpeedButton();
|
113
|
+
videoResponsePage.steps.selectPlaybackSpeed(playbackSpeedOptions[index])
|
114
|
+
videoResponsePage.steps.startPlayback();
|
115
|
+
videoResponsePage.steps.waitForPlaybackToBegin();
|
116
|
+
videoResponsePage.steps.addWaitToPlayVideo(4000);
|
117
|
+
videoResponsePage.steps.pausePlayback();
|
118
|
+
videoResponsePage.steps.verifyPlaybackElapsedTime(1 + (4 * playbackSpeedMultiplier[index]));
|
119
|
+
videoResponsePage.steps.startPlayback();
|
120
|
+
videoResponsePage.steps.verifyVideoPlaybackTimer('00:12', '00:12');
|
121
|
+
});
|
122
|
+
}
|
123
|
+
|
124
|
+
it('A download button should be displayed in the playback player', () => {
|
125
|
+
utilities.verifyElementVisibilityState(videoResponsePage.downloadVideoButton(), 'visible');
|
126
|
+
});
|
127
|
+
|
128
|
+
it('Empty score input field and total score should be displayed', () => {
|
129
|
+
gradingViewPage.steps.verifyGradingViewScore('', 10);
|
130
|
+
});
|
131
|
+
|
132
|
+
it('CSS of download video button', { tags: 'css' }, () => {
|
133
|
+
utilities.verifyCSS(videoResponsePage.downloadVideoButton(), {
|
134
|
+
'background-color': css.color.secondaryBtnBg,
|
135
|
+
'border': `1px solid ${css.color.playerButtonBorder}`
|
136
|
+
});
|
137
|
+
utilities.verifyCSS(videoResponsePage.downloadVideoButton().find('svg path'), {
|
138
|
+
'stroke': css.color.secondaryBtnActive
|
139
|
+
});
|
140
|
+
});
|
141
|
+
|
142
|
+
it('Accessibility of playback player', { tags: 'a11y' }, () => {
|
143
|
+
cy.checkAccessibility(videoResponsePage.standardPreviewPlaybackWrapper());
|
144
|
+
});
|
145
|
+
});
|
146
|
+
}
|
147
|
+
|
148
|
+
if (views.includes('Correct answer view')) {
|
149
|
+
describe('Correct answer view contents', { tags: 'smoke' }, () => {
|
150
|
+
abortEarlySetup();
|
151
|
+
before(() => {
|
152
|
+
videoResponsePage.steps.navigateToCreateQuestion('video response');
|
153
|
+
cy.barsPreLoaderWait();
|
154
|
+
videoResponsePage.steps.addTextInQuestionInstructionsInputField('Record a video');
|
155
|
+
videoResponsePage.steps.allotPoints(10);
|
156
|
+
videoResponsePage.steps.clickOnSaveQuestionButton();
|
157
|
+
utilities.verifyElementVisibilityState(itemPreviewPage.referenceID(), 'visible');
|
158
|
+
//Global variable issue, not working inside before
|
159
|
+
itemPreviewPage.referenceID()
|
160
|
+
.invoke('text')
|
161
|
+
.then(($refID) => {
|
162
|
+
itemReferenceID = $refID
|
163
|
+
cy.visit(`/item-engine/demo/render-item/correct-answer-view/${utilities.base64Encoding(itemReferenceID)}`);
|
164
|
+
});
|
165
|
+
});
|
166
|
+
|
167
|
+
it('Question instructions should be visible', () => {
|
168
|
+
utilities.verifyTextContent(correctAnswerViewPage.correctAnswerViewQuestionInstructions(), 'Record a video');
|
169
|
+
utilities.verifyElementVisibilityState(correctAnswerViewPage.correctAnswerViewQuestionInstructions(), 'visible');
|
170
|
+
});
|
171
|
+
|
172
|
+
correctAnswerViewPage.tests.verifyManualScoredQuestionHelpTextCorrectAnswerPage();
|
173
|
+
|
174
|
+
it('The points alloted to the question should be displayed', () => {
|
175
|
+
correctAnswerViewPage.steps.verifyAvailablePoints(10);
|
176
|
+
});
|
177
|
+
});
|
178
|
+
}
|
179
|
+
});
|
@@ -0,0 +1,79 @@
|
|
1
|
+
import { dialogBoxBase } from "../../../pages";
|
2
|
+
import { videoResponsePage } from "../../../pages/videoResponsePage";
|
3
|
+
import abortEarlySetup from "../../../support/helpers/abortEarly";
|
4
|
+
import utilities from "../../../support/helpers/utilities";
|
5
|
+
|
6
|
+
describe('Create question page - Video response: Header section and Saving question', () => {
|
7
|
+
before(() => {
|
8
|
+
cy.loginAs('admin');
|
9
|
+
});
|
10
|
+
|
11
|
+
describe('Header section contents', () => {
|
12
|
+
abortEarlySetup();
|
13
|
+
before(() => {
|
14
|
+
videoResponsePage.steps.navigateToCreateQuestion('video response')
|
15
|
+
});
|
16
|
+
|
17
|
+
videoResponsePage.tests.verifyCreateQuestionPageQuestionTypeHeader('video response');
|
18
|
+
});
|
19
|
+
|
20
|
+
describe('Tabs section', () => {
|
21
|
+
abortEarlySetup();
|
22
|
+
before(() => {
|
23
|
+
videoResponsePage.steps.navigateToCreateQuestion('video response')
|
24
|
+
});
|
25
|
+
|
26
|
+
videoResponsePage.tests.verifyTabsSection();
|
27
|
+
});
|
28
|
+
|
29
|
+
describe('Cancel button', () => {
|
30
|
+
abortEarlySetup();
|
31
|
+
before(() => {
|
32
|
+
videoResponsePage.steps.navigateToCreateQuestion('video response')
|
33
|
+
});
|
34
|
+
|
35
|
+
it('When user has made no edits and clicks on Cancel button, the user should be directed back to the \'Select a Question\' page', () => {
|
36
|
+
videoResponsePage.steps.clickOnCancelButton();
|
37
|
+
utilities.verifyElementVisibilityState(videoResponsePage.selectAQuestionHeaderText(), 'visible');
|
38
|
+
utilities.verifyElementVisibilityState(videoResponsePage.questionTypeOptionTitle(), 'visible');
|
39
|
+
});
|
40
|
+
|
41
|
+
it('When user has made some edits/changes and clicks on Cancel button, a popup should be displayed', () => {
|
42
|
+
videoResponsePage.steps.selectQuestionType('video response');
|
43
|
+
videoResponsePage.steps.addTextInQuestionInstructionsInputField('video response');
|
44
|
+
videoResponsePage.steps.clickOnCancelButton();
|
45
|
+
utilities.verifyElementVisibilityState(dialogBoxBase.dialogBox(), 'visible');
|
46
|
+
});
|
47
|
+
|
48
|
+
dialogBoxBase.tests.verifyContentsOfLeavePagePopupWithCSSAnda11y();
|
49
|
+
|
50
|
+
it(`Clicking on \'No, I'd like to go back\' button should close the popup and user should remain on the edit interface of the question`, () => {
|
51
|
+
dialogBoxBase.steps.clickOnRejectButtonInDialogBox();
|
52
|
+
videoResponsePage.steps.verifyEditTabSelectedState();
|
53
|
+
utilities.verifyTextContent(videoResponsePage.questionInstructionsInputField(), 'video response');
|
54
|
+
});
|
55
|
+
|
56
|
+
it(`Clicking on \'Yes, I want to leave this page\' button should discard all changes and direct the user to the \'Select a question\' page.`, () => {
|
57
|
+
videoResponsePage.steps.clickOnCancelButton();
|
58
|
+
dialogBoxBase.steps.clickOnAcceptButtonInDialogBox();
|
59
|
+
utilities.verifyElementVisibilityState(videoResponsePage.selectAQuestionHeaderText(), 'visible');
|
60
|
+
utilities.verifyElementVisibilityState(videoResponsePage.questionTypeOptionTitle(), 'visible');
|
61
|
+
});
|
62
|
+
});
|
63
|
+
|
64
|
+
describe('Saving a question', () => {
|
65
|
+
abortEarlySetup();
|
66
|
+
before(() => {
|
67
|
+
videoResponsePage.steps.navigateToCreateQuestion('video response')
|
68
|
+
cy.barsPreLoaderWait();
|
69
|
+
});
|
70
|
+
|
71
|
+
videoResponsePage.tests.verifyCreateItemWrapperContentsA11y();
|
72
|
+
|
73
|
+
it('When user clicks on "Save question" button, then the question should get saved and a snackbar with text \'Saved successfully!\' should be displayed', () => {
|
74
|
+
videoResponsePage.steps.saveAQuestionAndVerifySnackbar();
|
75
|
+
});
|
76
|
+
|
77
|
+
videoResponsePage.tests.verifySavedSuccessfullySnackbarCSSAndA11y();
|
78
|
+
});
|
79
|
+
});
|
@@ -0,0 +1,201 @@
|
|
1
|
+
import { videoResponsePage, itemPreviewPage } from "../../../pages";
|
2
|
+
import abortEarlySetup from "../../../support/helpers/abortEarly";
|
3
|
+
import utilities from "../../../support/helpers/utilities";
|
4
|
+
const css = Cypress.env('css');
|
5
|
+
let previewContentViews = ['Question preview', 'Item view', 'Item preview', 'Student view'];
|
6
|
+
const views = utilities.getViews(previewContentViews);
|
7
|
+
var itemReferenceID = "";
|
8
|
+
let actualVideoSeekedInPercent = 50
|
9
|
+
|
10
|
+
//Note: Visit again for cases of student view, once https://redmine.zeuslearning.com/issues/570579 gets resolved
|
11
|
+
describe('Create item page - Video response: Preview contents', () => {
|
12
|
+
before(() => {
|
13
|
+
cy.loginAs('admin');
|
14
|
+
});
|
15
|
+
|
16
|
+
views.forEach((view) => {
|
17
|
+
describe(`Preview tab contents - ${view}`, { tags: 'smoke' }, () => {
|
18
|
+
abortEarlySetup();
|
19
|
+
before(() => {
|
20
|
+
switch (view) {
|
21
|
+
case 'Question preview':
|
22
|
+
videoResponsePage.steps.navigateToCreateQuestion('video response');
|
23
|
+
cy.barsPreLoaderWait();
|
24
|
+
videoResponsePage.steps.addTextInQuestionInstructionsInputField('Record a video');
|
25
|
+
videoResponsePage.steps.allotPoints(10);
|
26
|
+
videoResponsePage.steps.switchToPreviewTab();
|
27
|
+
break;
|
28
|
+
case 'Item view':
|
29
|
+
cy.visit(`/item-engine/demo/edit-item/${utilities.base64Encoding(itemReferenceID[0])}`);
|
30
|
+
break;
|
31
|
+
case 'Item preview':
|
32
|
+
cy.visit(`/item-engine/demo/edit-item/${utilities.base64Encoding(itemReferenceID[0])}`);
|
33
|
+
itemPreviewPage.steps.switchToPreviewTab();
|
34
|
+
break;
|
35
|
+
case 'Student view':
|
36
|
+
cy.visit(`/item-engine/demo/render-item/student-view/${utilities.base64Encoding(itemReferenceID[0])}`);
|
37
|
+
break;
|
38
|
+
};
|
39
|
+
});
|
40
|
+
|
41
|
+
if (view === 'Question preview') {
|
42
|
+
after(() => {
|
43
|
+
videoResponsePage.steps.clickOnSaveQuestionButton();
|
44
|
+
utilities.verifyElementVisibilityState(itemPreviewPage.referenceID(), 'visible');
|
45
|
+
itemReferenceID = itemPreviewPage.steps.getItemReferenceID();
|
46
|
+
});
|
47
|
+
};
|
48
|
+
|
49
|
+
it('Question instructions should be visible', () => {
|
50
|
+
utilities.verifyInnerText(videoResponsePage.questionInstructionsText(), 'Record a video');
|
51
|
+
utilities.verifyElementVisibilityState(videoResponsePage.questionInstructionsText(), 'visible');
|
52
|
+
});
|
53
|
+
|
54
|
+
it('A start recording interface with a \'Rec\' button and text \'Click/tap anywhere here to start recording\' should be displayed in the preview tab', () => {
|
55
|
+
utilities.verifyElementVisibilityState(videoResponsePage.clickTapAnywhereArea(), 'visible');
|
56
|
+
utilities.verifyInnerText(videoResponsePage.recordButton(), 'REC');
|
57
|
+
utilities.verifyElementVisibilityState(videoResponsePage.recordButton(), 'visible');
|
58
|
+
utilities.verifyInnerText(videoResponsePage.startRecordingText(), 'Click/tap anywhere here to start recording');
|
59
|
+
utilities.verifyElementVisibilityState(videoResponsePage.startRecordingText(), 'visible');
|
60
|
+
});
|
61
|
+
|
62
|
+
it('When the user has not started recording, a status message: \'Allow access to your camera and microphone.\' along with a microphone icon should be displayed on the recording interface', () => {
|
63
|
+
videoResponsePage.steps.verifyRecordingStatus('Allow access to your camera and microphone.');
|
64
|
+
});
|
65
|
+
|
66
|
+
//Note: Add "Blur background" and "Mirror video" assertions when made available
|
67
|
+
it('When the user has not started recording, maximum recording length should be displayed in minutes(mm:ss) format. "Blur background" and "Mirror video" buttons should also be displayed in the video recorder', () => {
|
68
|
+
utilities.verifyInnerText(videoResponsePage.recordingTimer(), '5:00');
|
69
|
+
utilities.verifyElementVisibilityState(videoResponsePage.recordingTimer(), 'visible');
|
70
|
+
});
|
71
|
+
|
72
|
+
it('CSS of recording interface', { tags: 'css' }, () => {
|
73
|
+
utilities.verifyCSS(videoResponsePage.clickTapAnywhereArea(), {
|
74
|
+
'background-color': css.color.clickTapAnywhereAreaBg
|
75
|
+
});
|
76
|
+
utilities.verifyCSS(videoResponsePage.recordButton(), {
|
77
|
+
'color': css.color.defaultBackground,
|
78
|
+
'font-size': css.fontSize.extraLarge,
|
79
|
+
'font-weight': css.fontWeight.medium,
|
80
|
+
'border': `2px solid ${css.color.defaultBackground}`,
|
81
|
+
'background-color': css.color.recordingIcon
|
82
|
+
});
|
83
|
+
utilities.verifyCSS(videoResponsePage.startRecordingText(), {
|
84
|
+
'color': css.color.defaultBackground,
|
85
|
+
'font-size': css.fontSize.normal,
|
86
|
+
'font-weight': css.fontWeight.regular,
|
87
|
+
});
|
88
|
+
utilities.verifyCSS(videoResponsePage.recordingStatusText(), {
|
89
|
+
'color': css.color.defaultBackground,
|
90
|
+
'font-size': css.fontSize.normal,
|
91
|
+
'font-weight': css.fontWeight.regular,
|
92
|
+
});
|
93
|
+
utilities.verifyCSS(videoResponsePage.recordingTimer(), {
|
94
|
+
'color': css.color.defaultBackground,
|
95
|
+
'font-size': css.fontSize.small,
|
96
|
+
'font-weight': css.fontWeight.regular,
|
97
|
+
});
|
98
|
+
utilities.verifyCSS(utilities.getNthElement(videoResponsePage.recordingStatusIcon().find('path'), 1), {
|
99
|
+
'fill': css.color.defaultBackground,
|
100
|
+
});
|
101
|
+
});
|
102
|
+
|
103
|
+
it('Accessibility of recording interface', { tags: 'a11y' }, () => {
|
104
|
+
cy.checkAccessibility(videoResponsePage.clickTapAnywhereArea().parents('[class*="question-preview-wrapper"]'));
|
105
|
+
});
|
106
|
+
|
107
|
+
it('When the user clicks anywhere in the recording interface, then the recording should begin with a countdown and a status message: \'Preparing to record\', a disabled \'Pause\' button and an enabled \'Stop\' button should be displayed till the recording has not yet started and the recorder time should not change', () => {
|
108
|
+
videoResponsePage.steps.startRecording();
|
109
|
+
utilities.verifyElementVisibilityState(videoResponsePage.startRecordingCountDown(), 'visible');
|
110
|
+
videoResponsePage.steps.verifyRecordingStatus('Preparing to record');
|
111
|
+
utilities.verifyElementVisibilityState(videoResponsePage.pauseButton(), 'visible');
|
112
|
+
videoResponsePage.steps.verifyPauseButtonDisabledState();
|
113
|
+
utilities.verifyElementVisibilityState(videoResponsePage.stopButton(), 'visible');
|
114
|
+
utilities.verifyInnerText(videoResponsePage.recordingTimer(), '5:00');
|
115
|
+
});
|
116
|
+
|
117
|
+
it('When the recording starts, the countdown should disappear, status message should change to \'Recording...\', the \'Pause\' button should get enabled, user should be able to view the duration of their recorded video in minutes, displayed as \'(min:secs/min:sec)\'. Pause recording and Stop recording should be displayed in record player. Resume recording button should not be displayed.', () => {
|
118
|
+
utilities.verifyElementVisibilityState(videoResponsePage.startRecordingCountDown(), 'notExist');
|
119
|
+
videoResponsePage.steps.verifyRecordingStatus('Recording...');
|
120
|
+
videoResponsePage.steps.verifyPauseButtonEnabledState();
|
121
|
+
videoResponsePage.steps.verifyRecordingTime('00:04', '5:00');
|
122
|
+
utilities.verifyElementVisibilityState(videoResponsePage.pauseButton(), 'visible');
|
123
|
+
utilities.verifyElementVisibilityState(videoResponsePage.stopButton(), 'visible');
|
124
|
+
utilities.verifyElementVisibilityState(videoResponsePage.resumeButton(), 'notExist');
|
125
|
+
});
|
126
|
+
|
127
|
+
if (view !== 'Student view') {
|
128
|
+
it('When a recording is in progress and the user clicks on the \'Pause recording\' button, recording should pause and the status message should update to \'Recording paused\'. User should be able to view the duration of their recorded video in minutes, displayed as \'(min:secs/min:sec)\'. \'Pause recording\' button should get replaced with \'Resume recording\' button. \'Stop recording\' button should be displayed beside resume recording button', () => {
|
129
|
+
videoResponsePage.steps.resetQuestionPreview();
|
130
|
+
videoResponsePage.steps.startRecording();
|
131
|
+
videoResponsePage.steps.waitForRecordingToStart();
|
132
|
+
videoResponsePage.steps.addWaitToRecord(3000);
|
133
|
+
videoResponsePage.steps.pauseRecording();
|
134
|
+
videoResponsePage.steps.verifyRecordingTime('00:04', '5:00');
|
135
|
+
videoResponsePage.steps.verifyRecordingStatus('Recording paused');
|
136
|
+
utilities.verifyElementVisibilityState(videoResponsePage.pauseButton(), 'notExist');
|
137
|
+
utilities.verifyElementVisibilityState(videoResponsePage.resumeButton(), 'visible');
|
138
|
+
utilities.verifyElementVisibilityState(videoResponsePage.stopButton(), 'visible');
|
139
|
+
});
|
140
|
+
|
141
|
+
it('When the recorder is in paused state and the user clicks on the \'Resume recording\' button, recording should get resumed. the status message should update to "Recording...". User should be able to view the duration of their recorded video in minutes, displayed as \'(min:secs/min:sec)\'. Pause recording and stop recording buttons should be displayed. Start recording button should not be displayed', () => {
|
142
|
+
videoResponsePage.steps.resumeRecording();
|
143
|
+
videoResponsePage.steps.verifyRecordingStatus('Recording...');
|
144
|
+
videoResponsePage.steps.verifyRecordingTime('00:05', '5:00');
|
145
|
+
utilities.verifyElementVisibilityState(videoResponsePage.pauseButton(), 'visible');
|
146
|
+
utilities.verifyElementVisibilityState(videoResponsePage.stopButton(), 'visible');
|
147
|
+
});
|
148
|
+
|
149
|
+
it('When a recording is in progress and the user first pauses the recording and then stops recording, then the recording should stop, recorded video response should be saved. User should be able to view the duration of their recorded video in minutes, displayed as \'(min:secs)\'.', () => {
|
150
|
+
videoResponsePage.steps.resetQuestionPreview();
|
151
|
+
videoResponsePage.steps.startRecording();
|
152
|
+
videoResponsePage.steps.waitForRecordingToStart();
|
153
|
+
videoResponsePage.steps.addWaitToRecord(9000);
|
154
|
+
videoResponsePage.steps.pauseRecording();
|
155
|
+
videoResponsePage.steps.stopAndVerifySavingAndRecordingLength();
|
156
|
+
});
|
157
|
+
} else {
|
158
|
+
it('When a recording is in progress and the user clicks on the \'Pause recording\' button, recording should pause and the status message should update to \'Recording paused\'. User should be able to view the duration of their recorded video in minutes, displayed as \'(min:secs/min:sec)\'. \'Pause recording\' button should get replaced with \'Resume recording\' button. \'Stop recording\' button should be displayed beside resume recording button', () => {
|
159
|
+
videoResponsePage.steps.pauseRecording();
|
160
|
+
videoResponsePage.steps.verifyRecordingTime('00:06', '5:00');
|
161
|
+
videoResponsePage.steps.verifyRecordingStatus('Recording paused');
|
162
|
+
utilities.verifyElementVisibilityState(videoResponsePage.pauseButton(), 'notExist');
|
163
|
+
utilities.verifyElementVisibilityState(videoResponsePage.resumeButton(), 'visible');
|
164
|
+
utilities.verifyElementVisibilityState(videoResponsePage.stopButton(), 'visible');
|
165
|
+
});
|
166
|
+
|
167
|
+
it('When the recorder is in paused state and the user clicks on the \'Resume recording\' button, recording should get resumed. the status message should update to "Recording...". User should be able to view the duration of their recorded video in minutes, displayed as \'(min:secs/min:sec)\'. Pause recording and stop recording buttons should be displayed. Start recording button should not be displayed', () => {
|
168
|
+
videoResponsePage.steps.resumeRecording();
|
169
|
+
videoResponsePage.steps.verifyRecordingStatus('Recording...');
|
170
|
+
videoResponsePage.steps.verifyRecordingTime('00:08', '5:00');
|
171
|
+
utilities.verifyElementVisibilityState(videoResponsePage.pauseButton(), 'visible');
|
172
|
+
utilities.verifyElementVisibilityState(videoResponsePage.stopButton(), 'visible');
|
173
|
+
});
|
174
|
+
|
175
|
+
it('When a recording is in progress and the user stops recording, then the recording should stop, recorded video response should be saved. User should be able to view the duration of their recorded video in minutes, displayed as \'(min:secs)\'.', () => {
|
176
|
+
videoResponsePage.steps.stopAndVerifySavingAndRecordingLength();
|
177
|
+
});
|
178
|
+
}
|
179
|
+
|
180
|
+
//Cases of video playback
|
181
|
+
it('When the user clicks on \'Play\' button, then user should be able to playback the recording. Timer should display the amount of video that has been played and the total recording length in (mm:ss)/(mm:ss) format. \'Your response has been recorded\' message should be displayed below video player', () => {
|
182
|
+
videoResponsePage.steps.startPlayback();
|
183
|
+
videoResponsePage.steps.waitForPlaybackToBegin();
|
184
|
+
videoResponsePage.steps.verifyVideoPlaybackTimer('00:02', '00:10');
|
185
|
+
utilities.verifyInnerText(videoResponsePage.savedResponseText(), 'Your response has been recorded.');
|
186
|
+
});
|
187
|
+
|
188
|
+
it('When the video player is in playback state and the user clicks on \'Pause\' button, then playback should get paused. Progress bar and timer should not update further and the \'Pause\' button should get replaced with \'Play\' button', () => {
|
189
|
+
videoResponsePage.steps.pauseAndVerifyProgressBarSliderPosition();
|
190
|
+
utilities.verifyElementVisibilityState(videoResponsePage.playbackPlayButton(), 'visible');
|
191
|
+
utilities.verifyElementVisibilityState(videoResponsePage.playbackPauseButton(), 'notExist');
|
192
|
+
});
|
193
|
+
|
194
|
+
it('When the user seeks the progress bar slider while the video is playing, then the video should continue to play from the position where the slider is seeked', () => {
|
195
|
+
videoResponsePage.steps.seekProgressBarSliderToCenter();
|
196
|
+
videoResponsePage.steps.addWaitToPlayVideo(1000);
|
197
|
+
videoResponsePage.steps.verifyProgressBarSliderPosition(actualVideoSeekedInPercent);
|
198
|
+
});
|
199
|
+
});
|
200
|
+
});
|
201
|
+
});
|