itemengine-cypress-automation 1.0.197 → 1.0.198

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/cypress/e2e/ILC/ImageHighlight/editTabScoring.js +355 -0
  2. package/cypress/e2e/ILC/ImageHighlight/headerSection.js +83 -0
  3. package/cypress/e2e/ILC/ImageHighlight/minimumScoringPenaltyPointsAndRoundingDropdown.js +205 -0
  4. package/cypress/e2e/ILC/ImageHighlight/specifyCorrectAnswerSection.js +92 -0
  5. package/cypress/e2e/ILC/ImageHighlight/studentViewSettings.js +404 -0
  6. package/cypress/e2e/ILC/ImageHighlight/supportedFileTypes.js +42 -0
  7. package/cypress/e2e/ILC/ImageHighlight/toolSettings.js +73 -0
  8. package/cypress/e2e/ILC/ListOrderingNew/HorizontalOrientation/editTabScoring.js +253 -0
  9. package/cypress/e2e/ILC/ListOrderingNew/HorizontalOrientation/partialDifferentWeightsBasic.js +114 -0
  10. package/cypress/e2e/ILC/ListOrderingNew/HorizontalOrientation/partialDifferentWeightsCorrectPointsGreaterThanAlternativePoints.js +288 -0
  11. package/cypress/e2e/ILC/ListOrderingNew/HorizontalOrientation/partialEqualWeightsBasic.js +164 -0
  12. package/cypress/e2e/ILC/ListOrderingNew/HorizontalOrientation/previewContentsForAllViews.smoke.js +168 -0
  13. package/cypress/e2e/ILC/ListOrderingNew/HorizontalOrientation/setPointsPopup.js +83 -0
  14. package/cypress/e2e/ILC/ListOrderingNew/HorizontalOrientation/specifyCorrectAnswerSection.js +114 -0
  15. package/cypress/e2e/ILC/ListOrderingNew/HorizontalOrientation/studentViewSettings.js +179 -0
  16. package/cypress/e2e/ILC/ListOrderingNew/horizontalOrientationAllOrNothingForAllViews.smoke.js +214 -0
  17. package/cypress/e2e/ILC/ListOrderingNew/studentViewSettings.js +5 -21
  18. package/cypress/e2e/ILC/TextSelection/studentViewSettings.js +3 -37
  19. package/cypress/e2e/ILC/VideoResponseNew/previewContentsForAllViews.smoke.js +1 -1
  20. package/cypress/fixtures/uploads/sampleVirus.zip +0 -0
  21. package/cypress/pages/components/draggableOptionContainer.js +1 -1
  22. package/cypress/pages/components/enableOuterBorderComponent.js +16 -2
  23. package/cypress/pages/components/index.js +3 -1
  24. package/cypress/pages/components/scoringSectionBase.js +1 -1
  25. package/cypress/pages/components/setPointsPopupBase.js +7 -10
  26. package/cypress/pages/components/showAvailableOptionsToStudents.js +76 -0
  27. package/cypress/pages/components/showStudentMaximumNumberOfPossibleSelections.js +56 -0
  28. package/cypress/pages/imageHighlightPage.js +434 -4
  29. package/cypress/pages/listOrderingPage.js +287 -43
  30. package/cypress/pages/textSelectionPage.js +6 -71
  31. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  import utilities from "../support/helpers/utilities";
2
- import { autoScoredScoringPreviewTab, autoScoredScoringSectionMultiResponseType, autoScoredSpecifyCorrectAnswerSection, autoScoredStudentViewSettings, backgroundImageUploadComponent, commonComponents, createQuestionBasePage, enableOuterBorderComponent, imageCanvasComponent, questionInstructionsComponent, scoringSectionBaseEditTab, singleMultipleSelectionModeComponent } from "./components"
2
+ import { additionalSettingsAccessibilitySectionComponent, additionalSettingsPanel, autoScoredScoringPreviewTab, autoScoredScoringSectionMultiResponseType, autoScoredSpecifyCorrectAnswerSection, autoScoredStudentViewSettings, backgroundImageUploadComponent, commonComponents, createQuestionBasePage, enableOuterBorderComponent, gradingViewEnumerationComponent, imageActionsComponent, imageCanvasComponent, questionInstructionsComponent, scoringSectionBaseEditTab, showAvailableOptionsToStudents, showStudentMaximumNumberOfPossibleSelections, singleMultipleSelectionModeComponent } from "./components"
3
3
  const css = Cypress.env('css');
4
4
  let imageWidth = 768;
5
5
  let imageHeight = 432;
@@ -10,7 +10,13 @@ const selectors = {
10
10
  ...autoScoredSpecifyCorrectAnswerSection,
11
11
  ...commonComponents,
12
12
  ...enableOuterBorderComponent,
13
+ ...showAvailableOptionsToStudents,
14
+ ...showStudentMaximumNumberOfPossibleSelections,
13
15
  ...autoScoredScoringPreviewTab,
16
+ ...imageCanvasComponent,
17
+ ...imageActionsComponent,
18
+ ...additionalSettingsPanel,
19
+ ...gradingViewEnumerationComponent,
14
20
 
15
21
  //Specify possible options
16
22
  specifyPossibleOptionsImageWrapper: () => cy.get('.drawing-tool__wrapper .drawing-tool__canvas'),
@@ -22,6 +28,11 @@ const selectors = {
22
28
  redoTool: () => cy.get('.drawing-tool__button-redo'),
23
29
  clearAllTool: () => cy.get('.drawing-tool__button-clearAll'),
24
30
  optionCount: () => cy.get('[class*="HighlightImagestyles__HighlightCountWrapper"]'),
31
+ specifyPossibleOptionsLabel: () => cy.get('[class*="HighlightImagestyles__HighlightImageLabel"]'),
32
+ clearAllPopupHeading: () => cy.get('.drawing-tool__delete-popup__heading'),
33
+ clearAllPopupDescription: () => cy.get('.drawing-tool__delete-popup__body'),
34
+ cancelButton: () => cy.get('.cancel-button'),
35
+ clearAllButton: () => cy.get('.clear-button'),
25
36
  //Specify correct answer section
26
37
  specifyCorrectAnswerSectionImage: () => cy.get('.highlight-svg-responseive image'),
27
38
  specifyCorrectAnswerSectionHighlight: () => cy.get('.ngie-accordion [class*="HighlightImageControlstyles__ShapeWrapper"] a'),
@@ -41,7 +52,16 @@ const selectors = {
41
52
  correctAnswerNumeration: () => cy.get('[class*="CellIndexWrapper"]'),
42
53
  correctIncorrectAnswerTextWrapper: () => cy.get('[class*="_CorrectIncorrectWrapper"]'),
43
54
  incorrectIcon: () => cy.get('[data-icon="Incorrect"]'),
44
- correctIcon: () => cy.get('[data-icon="CorrectAnswer"]')
55
+ correctIcon: () => cy.get('[data-icon="CorrectAnswer"]'),
56
+ //Additional settings
57
+ descriptorsAccordion: () => cy.get('.descriptor-wrapper .MuiAccordionSummary-root'),
58
+ descriptorsHeading: () => cy.get('[class*="Descriptorsstyles__AddToolsHeading"]'),
59
+ descriptorsInfoIcon: () => cy.get('[class*="Descriptorsstyles__InfoIconWrapper"]'),
60
+ descriptorsInputField: () => cy.get('.option-without-ckeditor input'),
61
+ descriptorsInputFieldNumeration: () => cy.get('.descriptor-wrapper .MuiInputAdornment-positionStart'),
62
+ ariaLabelInputField: () => cy.get('input[placeholder*="Enter ARIA label"]'),
63
+ inputFieldNumeration: () => cy.get('.MuiInputAdornment-root'),
64
+ ariaLabelSectionLabel: () => cy.get('[class*="styles__LabelWrapper"]').contains('ARIA'),
45
65
  }
46
66
 
47
67
  const steps = {
@@ -56,6 +76,10 @@ const steps = {
56
76
  ...autoScoredSpecifyCorrectAnswerSection.steps,
57
77
  ...autoScoredScoringSectionMultiResponseType.steps,
58
78
  ...enableOuterBorderComponent.steps,
79
+ ...showAvailableOptionsToStudents.steps,
80
+ ...showStudentMaximumNumberOfPossibleSelections.steps,
81
+ ...additionalSettingsPanel.steps,
82
+ ...gradingViewEnumerationComponent.steps,
59
83
 
60
84
  //Specify possible options
61
85
  clickOnFreeformTool: () => {
@@ -79,7 +103,16 @@ const steps = {
79
103
  clickOnClearAllTool: () => {
80
104
  imageHighlightPage.clearAllTool()
81
105
  .click()
82
- .blur();
106
+ },
107
+
108
+ clickOnClearAllButton: () => {
109
+ imageHighlightPage.clearAllButton()
110
+ .click();
111
+ },
112
+
113
+ clickOnCancelAllButton: () => {
114
+ imageHighlightPage.cancelButton()
115
+ .click();
83
116
  },
84
117
 
85
118
  verifyImageUploadedInSpecifyPossibleOptionsSection: () => {
@@ -157,7 +190,233 @@ const steps = {
157
190
  .should('not.have.class', 'drawing-tool__button--active');
158
191
  },
159
192
 
193
+ verifyCanvasImageTopLeftAligned: () => {
194
+ imageHighlightPage.specifyPossibleOptionsImageCanvas()
195
+ .should('have.css', 'top', '0px')
196
+ .and('have.css', 'left', '0px');
197
+ },
198
+
199
+ verifyCanvasImageCenterAligned: () => {
200
+ imageHighlightPage.specifyPossibleOptionsImageCanvas()
201
+ .should('not.have.css', 'top', '0px')
202
+ .and('not.have.css', 'left', '0px');
203
+ },
204
+
205
+ verifyCanvasImageTopRightAligned: () => {
206
+ imageHighlightPage.specifyPossibleOptionsImageCanvas()
207
+ .should('have.css', 'top', '0px')
208
+ .and('not.have.css', 'left', '0px');
209
+ },
210
+
211
+ /**
212
+ * @param {number} value holds opacity value for image
213
+ * @description function verifies opacity value for image
214
+ */
215
+ verifyOpacityValueForCanvasImage: (value) => {
216
+ imageHighlightPage.specifyPossibleOptionsImageCanvas()
217
+ .should('have.attr', 'opacity', value / 100);
218
+ },
219
+
220
+ verifyImageFitsToCanvas: () => {
221
+ imageHighlightPage.canvasWidthInputField()
222
+ .invoke('attr', 'value')
223
+ .then((value) => {
224
+ imageHighlightPage.specifyPossibleOptionsImageCanvas()
225
+ .should('have.css', 'width', `${value}px`);
226
+ });
227
+ },
228
+
229
+ verifyImageDoesNotFitToCanvas: () => {
230
+ imageHighlightPage.canvasWidthInputField()
231
+ .invoke('attr', 'value')
232
+ .then(($element) => {
233
+ imageHighlightPage.specifyPossibleOptionsImageCanvas()
234
+ .should('not.have.css', 'width', `${$element}px`);
235
+ });
236
+ },
237
+
238
+ /**
239
+ * @param {*} width width of canvas
240
+ * @description this function verifies width of canvas
241
+ */
242
+ verifyCanvasWidth: (width) => {
243
+ const tolerance = 2
244
+ imageHighlightPage.specifyPossibleOptionsImageCanvas()
245
+ .should('have.attr', 'width', width - tolerance);
246
+ },
247
+
248
+ /**
249
+ * @param {*} height height of canvas
250
+ * @description this function verifies height of canvas
251
+ */
252
+ verifyCanvasHeight: (height) => {
253
+ const tolerance = 2
254
+ imageHighlightPage.specifyPossibleOptionsImageCanvas()
255
+ .should('have.css', 'height')
256
+ .then(($cssHeight) => {
257
+ const actualHeight = parseFloat($cssHeight);
258
+ expect(actualHeight).to.be.closeTo(height, tolerance);
259
+ });
260
+ },
261
+
262
+ /**
263
+ * @param {string} text alternative text for canvas image
264
+ * @description this function verifies text for canvas image
265
+ */
266
+ verifyImageAltTextSpecifyPossibleOptionsImageCanvas: (text) => {
267
+ imageHighlightPage.specifyPossibleOptionsImageCanvas()
268
+ .parents('.drawing-tool__wrapper')
269
+ .find('.lower-canvas')
270
+ .should('have.attr', 'aria-label', text);
271
+ },
272
+
273
+ verifyNoImageAltTextSpecifyPossibleOptionsImageCanvas: () => {
274
+ imageHighlightPage.specifyPossibleOptionsImageCanvas()
275
+ .parents('.drawing-tool__wrapper')
276
+ .find('.lower-canvas')
277
+ .should('have.attr', 'aria-label', 'Image');
278
+ },
279
+
160
280
  //Specify correct answer section
281
+ /**
282
+ * @param {string} text alternative text for canvas image
283
+ * @description this function verifies text for canvas image
284
+ */
285
+ verifyImageAltTextSpecifyCorrectAnswerImageCanvas: (text) => {
286
+ imageHighlightPage.specifyCorrectAnswerSectionImage()
287
+ .should('have.attr', 'alt', text);
288
+ },
289
+
290
+ verifyNoImageAltTextSpecifyCorrectAnswerImageCanvas: () => {
291
+ imageHighlightPage.specifyCorrectAnswerSectionImage()
292
+ .should('have.attr', 'alt', '');
293
+ },
294
+
295
+ verifyCanvasImageTopLeftAlignedSpecifyCorrectAnswer: () => {
296
+ imageHighlightPage.specifyCorrectAnswerSectionImage()
297
+ .should('have.css', 'top', '0px')
298
+ .and('have.css', 'left', '0px');
299
+ },
300
+
301
+ verifyCanvasImageCenterAlignedSpecifyCorrectAnswer: () => {
302
+ imageHighlightPage.specifyCorrectAnswerSectionImage()
303
+ .should('not.have.css', 'top', '0px')
304
+ .and('not.have.css', 'left', '0px');
305
+ },
306
+
307
+ verifyCanvasImageTopRightAlignedSpecifyCorrectAnswer: () => {
308
+ imageHighlightPage.specifyCorrectAnswerSectionImage()
309
+ .should('have.css', 'top', '0px')
310
+ .and('not.have.css', 'left', '0px');
311
+ },
312
+
313
+ /**
314
+ * @param {number} value holds opacity value for image
315
+ * @description function verifies opacity value for image
316
+ */
317
+ verifyOpacityValueForCanvasImageSpecifyCorrectAnswer: (value) => {
318
+ imageHighlightPage.specifyCorrectAnswerSectionImage()
319
+ .should('have.attr', 'opacity', value / 100);
320
+ },
321
+
322
+ verifyImageFitsToCanvasSpecifyCorrectAnswer: () => {
323
+ imageHighlightPage.canvasWidthInputField()
324
+ .invoke('attr', 'value')
325
+ .then((value) => {
326
+ imageHighlightPage.specifyCorrectAnswerSectionImage()
327
+ .should('have.css', 'width', `${value}px`);
328
+ });
329
+ },
330
+
331
+ verifyImageDoesNotFitToCanvasSpecifyCorrectAnswer: () => {
332
+ imageHighlightPage.canvasWidthInputField()
333
+ .invoke('attr', 'value')
334
+ .then(($element) => {
335
+ imageHighlightPage.specifyCorrectAnswerSectionImage()
336
+ .should('not.have.css', 'width', `${$element}px`);
337
+ });
338
+ },
339
+
340
+ /**
341
+ * @param {*} width width of canvas
342
+ * @description this function verifies width of canvas
343
+ */
344
+ verifyCanvasWidthSpecifyCorrectAnswer: (width) => {
345
+ imageHighlightPage.specifyCorrectAnswerSectionImage()
346
+ .should('have.attr', 'width', width);
347
+ },
348
+
349
+ /**
350
+ * @param {*} height height of canvas
351
+ * @description this function verifies height of canvas
352
+ */
353
+ verifyCanvasHeightSpecifyCorrectAnswer: (height) => {
354
+ imageHighlightPage.specifyCorrectAnswerSectionImage()
355
+ .should('have.css', 'height', `${height}px`);
356
+ },
357
+
358
+ /**
359
+ * @param {string} text alternative text for canvas image
360
+ * @description this function verifies text for canvas image
361
+ */
362
+ verifyImageAlternativeTextPresentInSpecifyCorrectAnswer: (text) => {
363
+ imageHighlightPage.specifyCorrectAnswerSectionImage()
364
+ .should('have.attr', 'alt', text);
365
+ },
366
+
367
+ verifyNoImageAlternativeTextPresentInSpecifyCorrectAnswer: () => {
368
+ imageHighlightPage.specifyCorrectAnswerSectionImage()
369
+ .should('not.have.attr', 'alt');
370
+ },
371
+
372
+ /**
373
+ * This function verifies highlight region aria label
374
+ * @param {number} index for the highlight region
375
+ * @param {string} ariaLabel for the highlight region
376
+ */
377
+ verifyHighlightRegionAriaLabelSpecifyCorrectAnswer: (index, ariaLabel) => {
378
+ imageHighlightPage.specifyCorrectAnswerSectionHighlight()
379
+ .eq(index)
380
+ .should('have.attr', 'aria-label', ariaLabel);
381
+ },
382
+
383
+ /**
384
+ * Verifies the ARIA label text input fields.
385
+ * @param {number} inputFieldIndex - The index of the input field to verify.
386
+ */
387
+ verifyAriaLabelTextInputFields: (inputFieldIndex) => {
388
+ imageHighlightPage.ariaLabelInputField()
389
+ .eq(inputFieldIndex)
390
+ .parents('.input-editable')
391
+ .within(() => {
392
+ utilities.verifyInnerText(imageHighlightPage.inputFieldNumeration(), `${inputFieldIndex + 1}`)
393
+ utilities.verifyInputFieldValue(imageHighlightPage.ariaLabelInputField(), '');
394
+ });
395
+ },
396
+
397
+ /**
398
+ * Enters text in the ARIA label input field.
399
+ * @param {number} inputFieldIndex - The index of the input field to enter text into.
400
+ * @param {string} text - The text to enter into the input field.
401
+ */
402
+ enterTextInAriaLabelInputField: (inputFieldIndex, text) => {
403
+ imageHighlightPage.ariaLabelInputField()
404
+ .eq(inputFieldIndex)
405
+ .type(text)
406
+ .should('have.value', text)
407
+ .blur();
408
+ },
409
+
410
+ /**
411
+ * Clears text in the ARIA label input field.
412
+ * @param {number} inputFieldIndex - The index of the input field to clear.
413
+ */
414
+ clearTextInAriaLabelInputField: (inputFieldIndex) => {
415
+ imageHighlightPage.ariaLabelInputField()
416
+ .eq(inputFieldIndex)
417
+ .clear();
418
+ },
419
+
161
420
  verifyImageUploadedSpecifyCorrectAnswer: () => {
162
421
  utilities.verifyElementVisibilityState(imageHighlightPage.specifyCorrectAnswerSectionImage(), 'visible')
163
422
  },
@@ -331,6 +590,103 @@ const steps = {
331
590
  utilities.verifyElementVisibilityState(imageHighlightPage.imagePreviewTab(), 'visible')
332
591
  },
333
592
 
593
+ verifyImageNotUploadedPreviewTab: () => {
594
+ imageHighlightPage.imagePreviewTab()
595
+ .should('have.attr', 'href', '');
596
+ },
597
+
598
+ verifyCanvasImageTopLeftAlignedInPreviewTab: () => {
599
+ imageHighlightPage.imagePreviewTab()
600
+ .should('have.css', 'top', '0px')
601
+ .and('have.css', 'left', '0px');
602
+ },
603
+
604
+ verifyCanvasImageCenterAlignedInPreviewTab: () => {
605
+ imageHighlightPage.imagePreviewTab()
606
+ .should('not.have.css', 'top', '0px')
607
+ .and('not.have.css', 'left', '0px');
608
+ },
609
+
610
+ verifyCanvasImageTopRightAlignedInPreviewTab: () => {
611
+ imageHighlightPage.imagePreviewTab()
612
+ .should('have.css', 'top', '0px')
613
+ .and('not.have.css', 'left', '0px');
614
+ },
615
+
616
+ /**
617
+ * @param {number} value holds opacity value for image
618
+ * @description function verifies opacity value for image
619
+ */
620
+ verifyOpacityValueForCanvasImageInPreviewTab: (value) => {
621
+ imageHighlightPage.imagePreviewTab()
622
+ .should('have.attr', 'opacity', value / 100);
623
+ },
624
+
625
+ /**
626
+ * @param {*} width width of canvas
627
+ * @description this function verifies width of canvas
628
+ */
629
+ verifyCanvasWidthInPreviewTab: (width) => {
630
+ imageHighlightPage.imagePreviewTab()
631
+ .should('have.attr', 'width', width);
632
+ },
633
+
634
+ /**
635
+ * @param {*} height height of canvas
636
+ * @description this function verifies height of canvas
637
+ */
638
+ verifyCanvasHeightInPreviewTab: (height) => {
639
+ imageHighlightPage.imagePreviewTab()
640
+ .should('have.css', 'height', `${height}px`);
641
+ },
642
+
643
+ /**
644
+ * @param {string} text alternative text for canvas image
645
+ * @description this function verifies text for canvas image
646
+ */
647
+ verifyImageAlternativeTextInPreviewTab: (text) => {
648
+ imageHighlightPage.imagePreviewTab()
649
+ .should('have.attr', 'alt', text);
650
+ },
651
+
652
+ verifyNoImageAlternativeTextPresentInPreviewTab: () => {
653
+ imageHighlightPage.imagePreviewTab()
654
+ .should('have.attr', 'alt', '');
655
+ },
656
+
657
+ verifyImageFitsToCanvasInPreviewTab: () => {
658
+ createQuestionBasePage.steps.switchToEditTab();
659
+ imageCanvasComponent.canvasWidthInputField()
660
+ .invoke('attr', 'value')
661
+ .then((value) => {
662
+ createQuestionBasePage.steps.switchToPreviewTab();
663
+ imageHighlightPage.imagePreviewTab()
664
+ .should('have.css', 'width', `${value}px`);
665
+ });
666
+ },
667
+
668
+ verifyImageDoesNotFitToCanvasInPreviewTab: () => {
669
+ createQuestionBasePage.steps.switchToEditTab();
670
+ imageHighlightPage.canvasWidthInputField()
671
+ .invoke('attr', 'value')
672
+ .then(($element) => {
673
+ createQuestionBasePage.steps.switchToPreviewTab();
674
+ imageHighlightPage.imagePreviewTab()
675
+ .should('not.have.css', 'width', `${$element}px`);
676
+ });
677
+ },
678
+
679
+ /**
680
+ * This function verifies highlight region aria label
681
+ * @param {number} index for the highlight region
682
+ * @param {string} ariaLabel for the highlight region
683
+ */
684
+ verifyHighlightRegionAriaLabelPreviewTab: (index, ariaLabel) => {
685
+ imageHighlightPage.highlightPreviewTab()
686
+ .eq(index)
687
+ .should('have.attr', 'aria-label', ariaLabel);
688
+ },
689
+
334
690
  /**
335
691
  * This function verifies the alt text of the image
336
692
  * @param {string} altText for the image in preview tab
@@ -474,7 +830,7 @@ const steps = {
474
830
  },
475
831
 
476
832
  /**
477
- * @param {*} index of highlight region
833
+ * @param {number} index of highlight region
478
834
  * @description this function verifies the highlight region is correct
479
835
  */
480
836
  verifyCorrectHighlightRegion: (index) => {
@@ -517,6 +873,23 @@ const steps = {
517
873
  });
518
874
  },
519
875
 
876
+ verifyHighlightNumerationNotExist: () => {
877
+ imageHighlightPage.highlightNumerationPreviewTab()
878
+ .should('not.exist');
879
+ },
880
+
881
+ /**
882
+ * This function checks numeration array for highlights
883
+ * @param {string[]} numerationArray array of numeration to be checked for highlight options
884
+ */
885
+ verifyHighlightEnumeration: (numerationArray) => {
886
+ numerationArray.forEach((numeration, index) => {
887
+ imageHighlightPage.highlightNumerationPreviewTab()
888
+ .eq(index)
889
+ .should('have.text', numeration);
890
+ });
891
+ },
892
+
520
893
  /**
521
894
  * @param {string[]} numerationArray array of numeration numbers, lowercase, uppercase
522
895
  * @description this function verifies the numeration of Correct Answer Container
@@ -575,6 +948,56 @@ const steps = {
575
948
  .should('have.css', 'border')
576
949
  .and('match', /0px none/);
577
950
  },
951
+
952
+ verifyDescriptorsAccordionIsCollapsed: () => {
953
+ imageHighlightPage.descriptorsAccordion()
954
+ .should('have.attr', 'aria-expanded', 'false');
955
+ },
956
+
957
+ expandDescriptorsAccordion: () => {
958
+ imageHighlightPage.descriptorsAccordion()
959
+ .click()
960
+ .should('have.attr', 'aria-expanded', 'true');
961
+ },
962
+
963
+ /**
964
+ * Verifies that the descriptors input fields are visible and correctly numbered.
965
+ * @param {number} countOfDescriptors - The total number of descriptor input fields to verify.
966
+ */
967
+ verifyDescriptorsInputFieldContents: (countOfDescriptors) => {
968
+ for (let i = 0; i < countOfDescriptors; i++) {
969
+ imageHighlightPage.descriptorsInputField()
970
+ .eq(i)
971
+ .should('be.visible')
972
+ imageHighlightPage.descriptorsInputFieldNumeration()
973
+ .eq(i)
974
+ .should('have.text', `${i + 1}`);
975
+ }
976
+ },
977
+
978
+ /**
979
+ * Verifies that a specific descriptor input field contains the expected text.
980
+ * @param {number} index - The index of the descriptor input field to verify.
981
+ * @param {string} inputText - The expected text to be found in the input field.
982
+ */
983
+ verifyDescriptorsInputField: (index, inputText) => {
984
+ imageHighlightPage.descriptorsInputField()
985
+ .eq(index)
986
+ .should('have.value', inputText)
987
+ },
988
+
989
+ /**
990
+ * Enters text into a specific descriptor input field and verifies the input.
991
+ * @param {number} index - The index of the descriptor input field where the text will be entered.
992
+ * @param {string} inputText - The text to enter into the input field.
993
+ */
994
+ enterTextInDescriptorsInputField: (index, inputText) => {
995
+ imageHighlightPage.descriptorsInputField()
996
+ .eq(index)
997
+ .type(inputText)
998
+ .blur();
999
+ steps.verifyDescriptorsInputField(index, inputText);
1000
+ }
578
1001
  }
579
1002
 
580
1003
  const tests = {
@@ -586,6 +1009,13 @@ const tests = {
586
1009
  ...commonComponents.tests,
587
1010
  ...enableOuterBorderComponent.tests,
588
1011
  ...autoScoredStudentViewSettings.tests,
1012
+ ...showAvailableOptionsToStudents.tests,
1013
+ ...questionInstructionsComponent.tests,
1014
+ ...backgroundImageUploadComponent.tests,
1015
+ ...imageCanvasComponent.tests,
1016
+ ...additionalSettingsPanel.tests,
1017
+ ...gradingViewEnumerationComponent.tests,
1018
+ ...additionalSettingsAccessibilitySectionComponent.tests,
589
1019
 
590
1020
  /**
591
1021
  * @param {string} scoringType scoring type 'All or nothing| Partial equal weights| Partial different weights'