itemengine-cypress-automation 1.0.197 → 1.0.198

Sign up to get free protection for your applications and to get access to all the features.
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'