From 1bf8978094e77298348e0a64cec4807db865fab5 Mon Sep 17 00:00:00 2001 From: jhuerta Date: Fri, 6 Nov 2026 12:44:21 -0800 Subject: [PATCH] Updated results excel sheet name --- alignConceptsPageResults.xlsx | Bin 100980 -> 0 bytes contentPageResults.xlsx | Bin 18456 -> 0 bytes dashboard.xlsx | Bin 36461 -> 0 bytes dashboardMyContentResults.xlsx | Bin 46301 -> 0 bytes dashboardMyStandardsResults.xlsx | Bin 86302 -> 0 bytes ...ardSemanticStandardsComparisonResults.xlsx | Bin 166256 -> 0 bytes editItemAddConceptResults.xlsx | Bin 259993 -> 0 bytes editItemResults.xlsx | Bin 70573 -> 0 bytes frameworkFrameworkSettingsDIVResults.xlsx | Bin 61869 -> 0 bytes frameworkPublishFrameworkDIVResults.xlsx | Bin 93736 -> 0 bytes loginResults.xlsx | Bin 27313 -> 0 bytes myStandardsSearchRelatedStandardsResults.xlsx | Bin 25631 -> 0 bytes results/activityReportResults.xlsx | Bin 19535 -> 0 bytes results/alignAutoAlignPageResults.xlsx | Bin 23826 -> 0 bytes results/alignContentPageResults.xlsx | Bin 20821 -> 0 bytes results/alignStandardsPageResults.xlsx | Bin 21871 -> 0 bytes .../approveApprovalHistoryPageResults.xlsx | Bin 21298 -> 0 bytes .../approveContentSubmissionsPageResults.xlsx | Bin 21304 -> 0 bytes results/approvePageResults.xlsx | Bin 19984 -> 0 bytes .../approvePendingAlignmentsPageResults.xlsx | Bin 19984 -> 0 bytes .../approveRejectionHistoryPageResults.xlsx | Bin 21456 -> 0 bytes results/exactLandingPageResults.xlsx | Bin 31556 -> 0 bytes results/frameworkManagementPageResults.xlsx | Bin 23607 -> 0 bytes results/reportBuildYourReportPageResults.xlsx | Bin 22073 -> 0 bytes .../reportSpecialtyReportsPageResults.xlsx | Bin 21343 -> 0 bytes .../reportViewQueuedReportsPageResults.xlsx | Bin 23861 -> 0 bytes .../uploadImportAlignmentsPageResults.xlsx | Bin 21459 -> 0 bytes results/uploadSubmitAResourcePageResults.xlsx | Bin 18726 -> 0 bytes tests/ActivityReport/ActivityReportPage.js | 2 +- tests/Align/alignAutoAlignPage.js | 2 +- tests/Align/alignContentPage.js | 2 +- tests/Align/alignStandardsPage.js | 2 +- tests/Approve/approveApprovalHistoryPage.js | 2 +- .../Approve/approveContentSubmissionsPage.js | 2 +- tests/Approve/approvePendingAlignmentsPage.js | 2 +- tests/Approve/approveRejectionHistoryPage.js | 2 +- tests/Frameworks/frameworkManagementPage.js | 2 +- tests/Report/reportBuildYourReportPage.js | 2 +- tests/Report/reportSpecialtyReportsPage.js | 2 +- tests/Report/reportViewQueuedReportsPage.js | 2 +- tests/Upload/uploadBatchUpload.js | 2 +- tests/Upload/uploadImportAlignmentsPage.js | 2 +- tests/Upload/uploadSubmitAResourcePage.js | 2 +- tests/dashboardMyStandards.js | 8021 ----------------- tests/exactLandingPage.js | 2 +- tests/myStandardsSearchAlignedContent.js | 31 +- 46 files changed, 33 insertions(+), 8051 deletions(-) delete mode 100644 alignConceptsPageResults.xlsx delete mode 100644 contentPageResults.xlsx delete mode 100644 dashboard.xlsx delete mode 100644 dashboardMyContentResults.xlsx delete mode 100644 dashboardMyStandardsResults.xlsx delete mode 100644 dashboardSemanticStandardsComparisonResults.xlsx delete mode 100644 editItemAddConceptResults.xlsx delete mode 100644 editItemResults.xlsx delete mode 100644 frameworkFrameworkSettingsDIVResults.xlsx delete mode 100644 frameworkPublishFrameworkDIVResults.xlsx delete mode 100644 loginResults.xlsx delete mode 100644 myStandardsSearchRelatedStandardsResults.xlsx delete mode 100644 results/activityReportResults.xlsx delete mode 100644 results/alignAutoAlignPageResults.xlsx delete mode 100644 results/alignContentPageResults.xlsx delete mode 100644 results/alignStandardsPageResults.xlsx delete mode 100644 results/approveApprovalHistoryPageResults.xlsx delete mode 100644 results/approveContentSubmissionsPageResults.xlsx delete mode 100644 results/approvePageResults.xlsx delete mode 100644 results/approvePendingAlignmentsPageResults.xlsx delete mode 100644 results/approveRejectionHistoryPageResults.xlsx delete mode 100644 results/exactLandingPageResults.xlsx delete mode 100644 results/frameworkManagementPageResults.xlsx delete mode 100644 results/reportBuildYourReportPageResults.xlsx delete mode 100644 results/reportSpecialtyReportsPageResults.xlsx delete mode 100644 results/reportViewQueuedReportsPageResults.xlsx delete mode 100644 results/uploadImportAlignmentsPageResults.xlsx delete mode 100644 results/uploadSubmitAResourcePageResults.xlsx delete mode 100644 tests/dashboardMyStandards.js diff --git a/alignConceptsPageResults.xlsx b/alignConceptsPageResults.xlsx deleted file mode 100644 index 8761f4357e5bd194a511a98992378b5735dfd90c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 100980 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 diff --git a/contentPageResults.xlsx b/contentPageResults.xlsx deleted file mode 100644 index 493eb041df3284a87f2561c5c726063712218443..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18456 zcmeHP+mB?&SsxRFB106cfD|Di9km26$xL78)|u&Ox@X2~@6PUMr@e7Z(4_jD>h801 zZaL?4&vXKk;~=oGKq43f4@f*983_TFk|-83;=h15Ue&>)-}lvbtFOMg_3_EB;H^E>Z;?`Kw4=<_S6yl|?gA$OwcxgVYl zeE)3i!gbcDX6K728B-ocw(sp$>T9)%!9CNrY;Uw%dAWbMx>Yfvn0Xd+e2?!|W<08V zvGb|tb{=wv#XyS2b`Tk$;zhfaaU2KjYBe&)+-1?4A8-$EhJNU>7?0to8Zh&Wjd-84WEGt;sFg5TO9G2 zSuAEb7j9CM@=;Zst#hn6d+pP2oc-&suB_1KGt$}1s=T?Ev$mim{kzSs;)Pbo&e3~Z zM>?R(Y_DQ?%!La-5Dseeh2c9p3Go95e&EFsRhUkALY;>z80Z?TZJpKWE1E?;Cp4za zf$!R$<)8QY1^n4zQH&S6m74e?53XiNPP_oOfOjbV61)V#I%|kF!_gpXw0_vy-rUdV z3jimchdVep=pEEEdIEr%CM1=-6lt~&x9Z)LW&ubR=V|w9>$R2&U!dQd<9WN=?XGVp zyhx$~NETaj@LRQw)?Pz_7eEqzeGb0W-Rt!>6nFt7;Wy^s4>z|rS}ME%8auXkHU~`x zJv>aPXCOo0xuXT&0{B)f0nee}4ViaQ6GPvN7x|jY9{b@T00@v`v}eQ!!b4`li+ju+ zgf^oFSevuL8(C#Wb5+!q5t*SKAmY9hF!YF=-be5K?MLr@$N1>Icb>fd-6yYq|H-$$ z_2l)xm$VebJIosu5r6#lAN}MnUNe65oxl9?TYsX5M`+6%`rz;0eE%Q+SPzIElmmYF zr|&GL&imvK}c63wQGCJ!nR{0Zp#)v z4%@qxJq%*H&U2>}tQW!k6o%-1Ht~)*dd0l=e;lDdj?k6=^AUPcU%vggoQGmWX-Y_B zt}QZecVXf^v>oS!=H&Mxk$XoNfUHAQ5}sIA;n_qi7^6r%84W0KqmT(4BlP1h+41;f z%xD3nE~b&AC?P$HjKIg5O-)p5X;Y)f{bM=XT&H=6j2sb*k9o&(42fEp7fFHX*1Irly*52 z!Yvm2&lQ!N5=a#*j8yJTj#unkj%S?jR<_q0>lMRf!ER-UnJ$WM0HZ~e3o>VfMNu;j zrPp5C7eyz{CEnJ1RUL~L3p$L_je{_X_gOTSHWaTCQ#l^BB>8Wwx5(LUM*vMQxf&PE zEx5@48W->p)wFy#i2idf|3*oLW3ibHg5~b+I z|Ib9B;Q%WLO^YmGVsSTQ2KAKPiXX;fA5kb6+vZ`2abLs^cnel&@fymG!M6zt?lzrfTI&qPm8A6qE3G&}m{~3!yTWaDW z@dbK1MivF37kQS{N_&Me_-$_|P2G@%s|>(}u~tT`If)zVDRZ#myu_%?@|ghZKnDGX z@y`xThYL5R0k!WxL~J#%{UG&cz^hj&s=F*c918Cm_|_~bI*}Z3rPt9Mh9Dj9As-sHb&<|LGEK-XBzH*C6j?wM z8aY~q*wjrLRKx_HP~~WuAvZ2Z&M-vF2-z93SWwdu!2VbgxM^w!co}4+)YQ3BO*!7v zsO$>N>s6+m`CL_Ha-z7@P&ZIne6d_*iKd{udB?*JXUH)1IuY>~gO2oc;j*Re;Ftg7 z*|%POc4dV=pOV|bk=W#>&E%VJ1PdA`v|WAmvkp-Za%PEB1?q0FI4#khB5>a9P=n>0 z$DtoYkNVh@i{PK$#65K5$T0nh2dZR1S!KvCI!m#>Q8DC6jGk{{IpEj7Hu2*xy#Ma+ zfA9xyRNsI1O?(-$ZakLXAO894vf#S%`-3-rR~Dj3e*fU@ZznjSHzaIycBoS*+)zbl zC;GbV^mVbdYWj{J8p4LjB$;-}B}5Nf1<7Ld5E~cHOjZj#>6o%Yc2M#L*@F1OssqJ? zi~;IJRMFYND1=nsJH!JGZd4`}?p8b;ZV@6#xJ#fhZq4eLHi~uy;VNOE-GLukI80MC zgskf9IDANMi>z);-?1Oy|A8OJzKeoovytyH2gPcNkrY7I+S^$bkPfJ1Brv)#ug|A@uhh_Rb| zvDfPx_i*A6d&R~vHtJQ>o{Duy5G{l2jhsPY-2)W~y)1G2=qn}$D4YNzvwkH)XFYA63dT-l<7;?fk}r#a#IlY5z+@7DddKQ_0xgRLd%Hl*nxu~ll;69*xhpd#l|WA=p!HJ~ zM9cqrq037@RgsqZ>BebliPNLmX<~^}!S^ZgeJWD#OWk-oQx%n_olRBJF0v1us*wKS zl(iihHad{jX;nn6iB%AtidtLE1tzZ3gi^n&CMV(5eS68X%1yNzN zg47oU4$PV|8&DCWYE9*#3y`7_5L%4~lX7BE0@5?864EldzGz@VwwE!g4#j15)wd#* zIq*tDP!HsaLTS5y31*Jp7H&2)3mzi-e+et&PDVF*A3)}v_6R4dxOEVQeu#{;_((G_ zOmT4_CeB%=5Yk<`fGjBtc< z;K8)7lRQFOs4ym>y<7Rlz#0s;Ov_vyvN~UFZEx^ZwzZBagV`K5Yi6ynZ8m>f7(mhj zGR)de%(F-4p_MC+gwG%375smXSn)JI0SNT&1LPNwHlryc#n<68Hbl@KHbV=O6Ar% z?X6ApQ_hY<^e>Cw7k6CxV>|j%a?LE8^rw^f#0O7k9Tf@}lYE-Uf zr9qOetd-RL(&Oj<^B%6Z(dXw8Bjx?JpOQOm7+mGDV<~c8>%Ls(h*c9K&uWl$tNb2S zx=t)0(#urEyHx2VJB+YbW$5xtcIcqov$(aKC9D%J;|LycdmO1e=la3D$kc~ZUY1@p zd-F4QKHGr9(dQT8beVn=VQxM$7lNV~4Ce+_jcce<$=haH-QW6l!yeXnG1$`e&yMKJ zFP-dEi1W zDLX<3w8WKG$YzDeXsJZInj5(hohsiwNRP0n)YO z;zi&hsAbBR8T3VjY$cKF{QP|FyeZf~7FVyna&%AZBeGT7qpQs(?fj^BO8@#_9>4a> zpIlj?58WyKjda3KE*t&k)0slhxcX?W+?dAnpVrS-NfS}3#EU3T!WRmg17Axsot@+W z02XG^vb-h^+f~xlD3WHkf&iFCgetwo5U#-+&{fz(mGgL0&suY%RephtYfW_dH6XBX zw&pV2y*lt{*9IVTp;k|Sx|A=XuZGc88A1`p#f|Yb;P1=Zy9*kS)0L$XEN{U@p5%N^ zkkN}UaD$SHa4iA%<*8nefhAKd2G#2^M)pvPLG^kJ?&>ivR_To%=X@a!z0u=54)n4- z4)`Kr#4FXQq{f!u#0wOF`bC_HSGs1F-~?7#YsGFtZ}nQhh8p_zb-XNz5tRPsKdA7z zq$57S&pU)R&Vtj}CX@7PIrF(zYo%VJOzo47OP%xz?aP6^_`?gg#|UM1g8n6Zhyw`4 z-(7eb76h?N8qANQT+hhM)h^DsENeMSR?}qSdab7}R+?;FsYSTG$giJ9vzp9yS=(^% zG*5ZzrZoF?T< zk;^LuIr5VYW!<2RSf1_Wh_7tV&;82Sx(qmS)Vnl$V!MI5keqPH0YOPrti0LX2M+eeY5XncxU#KNQl+l)zkG(byugV zdM+D-$tK9+qF{_cKL~yZBp}g+B)CZY1N;Z{i{#7Zf=0;~zX%Hc&N)?e>N)+KneKiE zC7O4c?bA;`=Q+>sTz}_Mr;cBG&+{K#%l>`+xi7!--CtN+6Mr9u@G2;OCh~%~d>KaP zy)ZoAxEco=LbCO7gq#a6iv4i1U8-(WN{%<_hXa3dwq1Jp^k}_Pa^l3D4BQ}`c-y6G zFD`w2=e;j%J@EoJL8N%(Ph$sGCh>M@lqA#5ayjmgys;Z^gi~*VUxr~cb`yM!&dO7_ zf9{@nZ%?pdL(;SP1$-bRrs$M`EC9 zxSNCXs`!Yn%Ij7&)+uh%95q+to^jmZK zN9}H_LG`85DDWrebK0UnkB(C7xympM?y>3}sCO!@Cp>ifsKxv4xEJ}ZNWk6n+`=zP)Q{&xA}uHGNB$H&?kA=$T7oQ84<-t*KWY+?RhlwUWw3oaEdR^o)TYAM$s(s znUr4|jfvvJFbwv>h|PePL|TO$KAla@_{5`GQSXWCUT|seyAx8hhqEbq&8$+Ayx$*r z#LeTtog|jQ^Couc1tc3^bZ3b>=1iWtU^|6^dEh1^&dHPO zs9)4Oj1!dfnHPl4;lPVyF3#f!cnh{)a?xM0#r`n39#hRI@y|J%58N;;Y955=`y+Qe z<#bQ{$*8D%KR!nlb)Dl7WMjUOJ`8CK5#Lb`?!;Q$ulRyV>VD()j^JhgjJTvLi1=j| zF>bx+g{1zTTn9tflf4YObkb9g{mD(;cHpDmRw?|v+ukniVi4mR&po5Fw(0#0cF_m! zY;x?ORm|7^pZCx|@1aZo=X+>dTfX~#S$D-8$N?aG>Y`T$~kzSq2Ic=6uT^Lw2v3ff-3T&$+RuxVy zoLW`7CObuvS`Jxcv7DD9%X4TD=D7)GzqT&oyM)?M}#QVXr?6W^!gA%UD@RW@`#2 z#kLhpoXhP}w^?hJoW48VE)6l$MQ}Vtp~Zp=y1^M1Mf*vlYVECUQ8rSIxXah7Di$v+ z4Td!1X%r_1Zah+DD1SfD6LsYiA0l;)7i+NG+po;vjd4W1Yi`E+sy?#2B`3s%=eZp)u&-%Wl;_nJdu^RtBgCd3ltRU0}q6GR_ z+>KmEw3O{q7$u_+z0h>z_m3is`?BvqZNUmHen#eFBSn5j-i7#7ZBE&c%^DNI+iHnLaqi17e5s3If zv!q7WD#+m1?WRes=)xicaAB-fJ=PrJS~GJFr8tim!ko`cu@2;j|6%;|qkiDYYAgoS z)9?xURtMV;D*qhR>UGhpp$3T#QiXcpJxZu5lQ5;SHYKMb*RsL-j#*Hiu94Zovqj2# z$;{446itq_#k1uEE15N`QL<(eg=m<~LuA3ojjrNeRM>lpf-@`!bA z(m*4o`XZ_tE%V5=+au>OWXkBW^T={RjWdA#v9#kBQ#W!S3K-+MlPmaC$j&=prdNKtg^;-@XP=H{8vBq z{MwrMd#~CKj^!q|*i2r1BUsuv5!=;^pLK|*k>?KNsRFtiEKf^pUZCS#?NGxY>>o$r zG=Ak2n{qMg=VUfM8Yi*S4`<6$Pk7j`|R1DVnX4qfTP%hXX7J{KjWzVe*?lc<1+j z_y=#6fAG#*_;8eLG*X{G`m;AwU_4fzKYa7|R3MJk=a0Yfl{AiQ4XGPDTcS}AZ-iiH zD}G%y`l{So?T0}aIkF7XNwU}_R~q}+Do7WrhuF9Xu9aBEQx#JQR09>YL8Tx+u<9WC zgWLhpiiBWi3!@OI{^ST>#NZ~vA`7=m6C7@l5R~36+8DR4tC%**bfw|4h=Fu_VKl&D znqomH(au)j4MnvDs~d^WB%I>^y)a3_F#-eMJqsspfM7X`kp^J4@1^YOwIQ*6H7pb` z#$S;MqO3&_4y8e5Pkj;gi`JCwXEy6x4b#Nj=`^^0G#mFkY#@tsKWW*@RFO^r41tn6 zm7aWfBqC#LDmUDl`2lDa0|Pb(S2||bDPX(DWP=ncN{^NE@haY+ae>U#s zTF3rHsD`xdk`61ahAeyCDHxql|K84jefr7Tn)v&W>V(*HMyvNnxw$**j=(2Y>y6A) zTmx)}PsDjLC-R2aW~pu-cH1JqWKW1avr80M9(J-bY2pW6xcTpy?g35+q4k89f@F#g zt}g<+I39)?hRsMwE_O~5Z|bPZw^hCnRXx?)WAqL@bs_ ztW&Cm<1fU!KIU>bFc&7dS{ZrrWX?LU3tXMp4=AMes#ZH|jzlUYbLLNT|&wR6< zQw`QZs=_+hu{qev9TcI9ord8c2uZ=gS1{z`7@(Kd0I~Af3*Bho!1IvC#8InaOxAI# zGUs@+xl!*nEIHfG9T%aCohD6wuT7HA9Z##V==o49yud+Izbub@EW`W#xlV=}VKGn@ z4nw0>Xr81VcXA9Obg|PiFyLG-m-#228}&y{0><47uV|co8i#e6s<19MnwD(u<}QoS z#ZH?hzlWijb6NEm_q<^0+@H^88j1Cps&GEzw4uf4s+ei1o=yfYb~=XF5VLMS3KJja zmE{3w&T%6i>$#!Bx?bW_B zJ#Thwp6ihkQwiaDwPLzXN2%O(-K`W_YvLzBBkKIeoY;Te`xv(J2H^0RpHQ>=NUm6z zJT$7qL2Fg5(DcYzO@~f%?1a4NLk{gI!t_b)Gm*W>TuZFHQUfy)nls+qS(yQ z6>=8aE*7&VE5f2Cd0143gVm{6Vd;Umsz&0fITSZ8s`C09S&gE-i_#SzN!ZLsyWg_&H{WU zT+}9yi|WkdYHd{N)-g$s{Z%#iSIyBMau(O_bQ*;h-iifAjq<>#4hO7SwYD_P5UPqI zR85WmISXu%)5#?|duofvLv=VjkXc$-O_K*1M2Bdy2gq4G53iklEcW1O3g^-v;7KN@ zh)WJ#Y7`UWnK6hNHd$PT4vVX4tAI7lEMyS4Olkr7ZMYH~(+wOy@y2R7%|t;h@F=Jb zhoWAw(b1Y_88V2upvf{IXHj6e4o}7TvE=TrHH8ZBF^)_eeK#DbmHOgGU9F)nbKv<{1l5`$kmWeQKU{ziaK3 z^srx3!+y;i_9188k42u#6>z5~`X_8gn3+#w^4?P&&iiJ|HmRxUF2k?B#rrbhLeIjTd>B72NYmdM$?aD6lg%ycwNER!!Y za8Ua^MykVM#0g1T)6oNbO%3ohbAX4O#YjpoZ$beMaLLJ>Y)fWkq^5W{RELGrvcakA z@m&T{8O`w>^4sC8JCCC?cjCXU77H-C&&GHnPt00BmQGv6gjMYR$oZ>*(@2BGY3Oh` zJGHi@*y?(`mqFk($9u>Z!HM-$(T6OJkXq*vQXLjy%Qh{qYc3#zSZy`A0OX4xeCSTF zroB8uYMn<&bvT6GimiL8YrY_ZKxpy>$QMEwMxJwjG7OgoNfY2fQXLj#(>A58Yf2%5 z0BKSR$QJ=AcB_`hM{V=?s1A$Ix^P|B)I$b=&!irZFM^MBINQ!H1`c=Z7Do=OmYMww zHO<4LI`i<_nAqB=NnKMD83a6&nn1n^yvTnYyYIKaqo#RyREL9Ct=I@}U2_*11U!?w zK)wPzahd{0KPLWd2&r`*A=P0Kwygt&<}h`|Vd^G_fqVsoM_8)G?$Ip;NKNzbs166O zX764!eW@$@Qa9-f9Q@)hujs{uZVduDFIM{V=?s1A$II)i9v z5+j4yku^ySJ z<}We`h$er5oQ0?stzxG)!-+a`N79JIJ5CL=j<;;Y5|_DT+rTmi$4zDeIqUe1WfRYO z>x(b!8cFalsT&;3PQ%(mYKGEKJ0=a2p+LR_%=C1*bALR4(8sXEqoJv>Xsip24b4Vm z5QS#45y*>ZPH+bZj*jA((g`j&n1acPBiy=R58T!1>)F$V1&3b&PsX2uV!e^t`+Jl_+`Q{$O9Jm(g zE{v3TwA33GZPT`X(A4xo27%V37mydx>JDF>)OW%m&i2inNi|~eo>R-L=Up2y!owRG zzmP$AZt@H9dS>|kp$YIHsm?se+D5%%n_o6H zyO2SEG}#5@EXWhja~_IyM@9b@I?H9);_=Y*SUlF{fTrdbG6*~-zkr;@V=J^OUG-n6 z*k}?wOsd1dY_x2PI=EOdubYZ>G)>k4l_g>3{YSRJu@F?63=fs+a8R4pVXLM2h76)a zO}+v7l2Ao!Tn43)0*lhnVNo`1olQ#<4;chXlXyVB6w2E2_0~v&he_RFVRmijJ6f89 z$RN&0n;Zo4C1I{qZ;fPlsMHk>YO8K*qAg8LWDrnIY6AI^P?xT^GzA_d)nQS#ZPTBY zCNnY!lqQ*hd?}Rm73wWbf`>_UIGF9KwJ>HWO%4lhlSd)4lSAzwG<_4nUo0fC7~`|Z)plVN~*)5>{^d~ zv^5)&K@_OTh9F-GWpnv@Yb3$KG;~;)ZQG(}Thk#K1Wc0-LB1r+mFlgL3=fsMG7q)B zQL!EZX=_R(gLnqZq(qP}33b_eYox%Vq+YNnt;+yy&4y$UC`~p5Ig9ehy}(8@)|%7< z0D2E);aRj{nMX%cXVF>DfV4FWl0l#|SrFtby7X*P4l$Z-y zt+|g30-VWxAZNklsIsD4chm(1OCRGgQs7ZiFF2GnEA44(+9QKNY0@6Z7e$#qtFr8w zIwJ)hCG~^C)Ih!nBkkmX6k?ODz8@2}_+M4pnARwBQ2l7QB z9^g?+`MlWDMM=}(aZ()?r*$W-t@(}&0;kD$AZKyD_TYqH`!*u*PE(_t(+%r!7Q7=P zTep%yIBn7w$XTbEzJ#{2s)JF_%~o}8I-F}H!NN3jSeRDY-O=<#1_9HgFOV+`Q#Uh( z(KrKWnBw8k5NzMYEQJM;%Q_WDuB4 zLIOF930Fb!&ButqJ57zUPFoM$bTrS9K{##l49HohZ*4xc#hVXJf`>_USeVwQU^|*| z$RJ>vj05t8Ve00iFq+MWn&RP59S%;bZkx<>G_{aHz%i)>Fn-7nP+T$@%9Tro| z+9hZr(GfvlGKmD_ET-vTXlXt)0`D}{;hb(;*-uAP0~v(VCN+SZb^6xkQ(wIK&?I=6 zRELFWeWItMnSl%frpXK-Ul^utJ_@7Re5ffN4%K1dSkGj1HD{1Pz%e-kFn-7c0 zu*YIDbT~}*<;Sij2r>vvCP9Fl#WYIr_DJ@`oe_ignp$POZrJwnyP5~cAZ{-)c>v_B z*SEHx#=`B#NP>q+-C$wbE1aeVT@eIKlNvz2FihQk6h@={7^ZkQG&v4V*Sdk))ucfN z0mmc_kS_|yY(G3EYLCZ6by!T+<)p4=2r>vvCPRRn#dJ7$Q5;-43PbV0HFMFG5s`PE z8fTsF+W0_M^8p!z^ClmFyy!fZZ zRo;(xI5BR%+c&g$e`z}N{NxwDHXuYw3ym>PFcjSoZhH5siYWy+3o73-D{bM@MARD@?1x??-s%ZM;tJM>c=fLM zQkHnj1h5nhXUQz`gqp}^1E!fHy>k&qW)5nwcv(RD6}bh0GmHG~(&u`EUa!+1^w)=O z)mv|LTi&|cX|~tv{ra$8=~rsqe*N>Z0F*66MzLERQ7k8{kHL(Fq_^(|0_m8j@Qs zn%Q|_E6-=6(VqS7)5_j+Yir^!ZM4~Ssn2$ub!O$x8tt9k9-Db~9HD&;yhrlI$)_Vf zel>k}d47{@b~9{R2T#Q1+{kcwbF8>XRy2)G9|8FmadGjn{3+`s#e2|=?Eb{l_y5NO zyfa<={R;X>_0sg8kr$X_m{u*fqNgS zp~8v3Uqz+M^EU;v`p8`96y;zzH>fgIgQ8NeFlY1r&hN0t)nh?=9p;W~%bz&eDi?)Y z_i&p&p2RzLG4x?3lx$w${S>%DUR-g7SJ#xBo*R3rfG_YM4xY~u6DFvsFESiVaaZ(? z=u1>*0P>h@DxnM(b&FxYA@49wHW8qT!hmuFKTsD>#l~s;czBH4nHi5!9ks{O2j#DF zN9KW;>rwwCWTa%+F6+WJI<5PO`X%hsZggFBq3FhE zqH1m+{z2qkqT{k8pr$J~BDgt)F?dq&QE7&U&>K&UEW*2PQTjs8$C!%O9}<^T3?b)Z zocTjGhLH0yyfGi+YF+%o$GNn|5x?+po=$lzPp6&@jQokie?uJH=FDaQI4D)r?FmmwHykjLF7ADWdj1bKx?~_NKH^!84xn%tABX>Se)(y;v=4?+#{MPTz&;88UCYRT--}^=(cGeip=q3Zz d(ZBX3mX994^ozeFlwQDppF^eir?CMW}h00M;p>=$agyZXDwyCdv;?A`Kq?*=<_CyJIZuIa9s z?wjhaW>wAXjAQ{6MHmMYHei`H><1f$C0K+7*@Pv*ghBlYdbOb!z3@Y@WrHtzG2jRP zGP6E1q9VI{W(PKGa}RTqlNAve5g8c~`B7O%?|$;FpV=z@{q`rm@!dcCsjV&b^RuYD ziJGTL7^ThEadLSU$Cr(pdDKufkAEH|?>bDyB=0S!(lZ)mu7+(e#VYA(8^_$?JqOrY8XnM~lPqvfi6Mx$~xm}{=^|a&j^Vv8& zh{sp+aFGd3X!+A=7-k?EBo|@!WLv33SEWt;%U8PDZpzHGACj32N(w7R^q)=r|CKy+ z9+HPNyN%GJr8dmpt5nc^(B@TNybQBo5@bQe#XPSm_-GPi+dU%2-ulePmw)<&tu6KQ zIb-ZxmG`&uU`Nw3_PrBqVuh0=c#Y9BkBkA%gV|!+TLg2M@cY_8y%XK>yN`3?hY{>x zk)^6)93{tU@Pq^dLnGLkT>9!)dYkS?iFX}Du-(~W62CqPZ(z?+kY;%BWV@yRDGP3v zNKxj%weX(le>q-`Fu82&Hj|69vQht8cQiOC>1%)}tHT{09_}CdB|QxgjK`4F@M6>K zJ{$Ub1x*Xc6zjD2TfJ77!dvt^HJ(R%dwac6&WjG0aKh)o7*@O=%+Hcppc)8v!oYfBs>W%pO10&s<7Bpk z$NkbWz=){m{rG#o_v7#VzW3wredqgM|AX&;{XcyFH-6*$U;lT87D0R`SX|hMfBrlF z@W1`@uX+FV_y6Uef9oI1@NjKaLqGht-~7QJ{UaF=Bd7xW(LedlpZ&pie)LcO!GHPP zZwcT}li9eV9!N;Cr`0B*E>4 zRCymJa2^ui+gBeEUXQ2ARW=h^es?-2fG^`X+KUrW0q?4|EDfJrEiUB7lPeqURS;ZD zZSMyQ(zShRdO;rBZgEVy)&DmUv4Ft(bYsZFF*A5;z*MEAiSoK7!ZL@R?KiNhuBFN5jDOY zTxG#rB6$)Z+p#+4MUYJ;CXa8Eu?=^aX6WgQFp9myNtmV*&ie`EwP?Q^z+Z{o{xZ6q zQ^+KnT}m`x1aWLb9>kaX(_p@oV2@{usSW!)y@ZJd-cgKXqdrJq#&m?JztIoD!r9#) z&QvB@`Hl6C;Dgx(VW~0@_2eoM*m^sRiTxhmM(07Oy$oDB@znF#VwKyDX7Jmlg`c?X zC)-aE#H7LV4s+Hnxc>`X^g(d7I0`W;>el}g5B(Dlz5V~ZhjxwShxf~sD~6X=35m(I zb>=;HCf?_>C^}Yi@)xPjy;B6B$um?cJiV+EmJ_k%6h$?X(Ex$FNCJ)HC2{r(vut`i z4b%dPucwh0X-@hg^_DT#Y+AZnq^%l7?w^_2W>3vSjOR#$>}5PL)g4t`OgBn0nyU*v zr!5-lC<2={)*0kPA=`Z#^A%GYx8`fsv{NLll_Dz@>v=g;UW$gwQk%$ZJmf>ravw`u zs%a!+K@?&UtC#~9-J-NwlpnZ@a;c3V(_j*sE+W;IHhtZ9g$dQF0rf6Z0t!UxBezHC4wR_v%I9NW}KF3TK#rYDQma1GZh%T@w zI?fVfwQI+s9;B7TBiX8aEM7PU3>n7DB+U+jbZYugKgzo*TBw!`|LtB^8Qa4MAUKoF zxabUFBLBy@fQ`_u4bRWRab|b6Rikug{>(jLe3gaC@pSUqJBzN8R{^>oI#u#aW+@gd z^ng}>V0BGtTR)<{HTN|3nwEw$^+B|p2D!IXt24!jGvL}(OCI!J7JHCQQSF;N*nIW8H(w6cPd@tFFg*HM~Swsvv_iw7o*e!Tw`@=4x=EW#jEh#n@w(t`A4Y< zGla|zNs%IJXoaQ>twiidlLm^I!z)x1ElcF~dgKyAw+xqEBI^Y;i2(M;a>uQvc7Qid z)<~@eSD~qB@g^$UfO%PE;>>4Lm6?g+%8t5+%Cei)D$6wm<<$)jJDf>?sn@agzX&?U z(zVI5?cfjo;;nCe<*ltP_48@79h~Y-Znc?w|BYZx<5+E1Z+_MxT_#~L(WeUNZm>Qr zv2zW_dA~yqlX!fT#LM)<6Ku+*u+PQS{MkH9y>WcC09Dn2rphzF)LDvNf7>%BG4|sL zmIMCASFhsiZ~oxBfA5EX|KsKlzWYu5@=V=yYJUIdpMBjF=5zD=hadl4Q%FUpvpAXHFpb?2rfT41x9?re z&q8bb|d>0&_xd{mI*3{NtOgE%ozx zM)&teCAkN4N607c=Z*L&t_ilo7wSBjmxSloX7P6p{mwusOuIsCn!QGkm1VCu zl%^h3y<0vnU=MIa2*W3St+Gtz;l`@)6z9WWV%UvD&Gqha7A`$weUF>h%GPtZJpt|@ zG)EG^Dh1x>z(IDEQjh}*qIdqV#k!wAwFZwm{zv%2j)?DAg(S?FchPQH1%f8xEskwa`2dq>!*r>OfB^(aWw znphM>6w4o0ViC@}CFiPiz1ybE?{x|1hc`IQGV#vPjcJ%r(0vLja!NsJoc216Zg=3| zv{!PfO4qv`+Wa2YH7y;#h%aW`&MAb*AO#T_9CjTH_Dcp;>3X-z7(_;5G58^3KF$G# z-UN%DXK|2Bylj?5Fbbr9Kj)>hUkQH>YwQyQS0oOU6b@h6q(n(5NL`X)W9YXXk_<{o zROx!RN1NXpkmgHCUfz292+26}=DnUxaNd+iq~$OoDd8x|eM(Z4h=Pa`4Xx2j%zRi% zq)OMjecJpU&izV#V@Z_Z7)9jGvT$zF9ZF!I5_lHOuo*%@4k(Dk|ESZedPIAULy80s zp1aiamrA>Nd7Eqfmr}%o)Bb7EA*U~IPxD8on*CG7{;5uzPYsKW<>I1blW1&IYD|@` zcLybyacRgLERF3)v+<>8sp~mfN?{Jj(7m%OqT zT(T}+?+%#&sJ102lx7QYqWV1b4xWE_2TNvjMadWp6K$~5@*C~G?-I>Q2UPKTcf>`b zfw&Y+3G!ucHb$}{c@>|c$(&OdiSv%ruV5xrc8V$@P_{VhG~AY~Tc&08$|Fzz;c085 zl=jh>-M`|HWH6#M9m~Ybm}FR+3`)Nxj!GlSDf;E~(W(C9REx59boy1sp^MNY&pA+U z%fD8WA1r2Hy$Zb(6@*y&x6f$Fx}@z%y6lZCo6dDfu{P4Bzh0L{m{TLndTmx&kZ;l; zpXWiSzmGPbAJkMy3CXIYFp?^V9V^u3s-##Osj|JXDj~^wJytoIZ;~{hXKARvlOBtN z;uzTkeAd-`;Z3p3R7*Y?UDL?<5=XCaa~Rlx68Cj40jEHO29(<%_a`fC|OxF3L}Zub$48qWwp)1PMc?0sK1kFFV#-- zQyf-UsJGy}=kq0wPbS7*X1x)0(Rkrfn9j+B}6p{hg#eTwFvm97uf5M<%5s%R*r!Sq9Fi z-mVfBT}03Ega!5YlV$xtq?E<^32R-H&W`kEe!{RenV+=f#Vj&y&b#UKxwXcXZn((R zuJR{cgr<4^g!+4GdIKLoY0J8%Fp{oE_Nd5pO|dr8^3zamjhyiMO8DHx~e-3zrKROur^Zl@E)p$WSi=_$~QY^fw0Z&-?N6 z)_WOWhu%RLh1j*w`*18@*k@El&&XgTC3pI+T(eWnB+|vaFOB zN!D)HTJk6PS*J=qbrG`i7L~$?qV}u>I@+;SCfYHXXoqK_sK1k_PooRG#u>0gg;9|up)E<0^jof^t5c%_*c=yQtr-vNm1BK;T&$>fb=0 zYsWexFKU>AFa=rnbz+!L+Muer7q$S56>@A{{VV-c}GTFRyyTCQhK{S zBV?2}QF?cSO>0@{o6l9cRhFxZ&^XU>QGX|m@8cXgW+*TD5hF%N)-7#I(rveIEivY9 zgko)^+YL6cjUcBl!}UJ8%AUJsEw{_FXVl+Mi|gGpr7Y`}!bp1Ucddju*DJ-^NUt00 zXjgi@hi9&m_pV9ayF7VE{XI3kfm5cmWnEJkN!LTau4{_5k*+)IopPn?d->yPf`JR< z)S`WtPcTsbX4-bTVoF$6HHDE>JsMbx8M#?gtc_INy@#sr;DxKnPS>oScll%o^`f5l zqc{!aBYq4;O!XN|U4y*_j?+694Z77VMi*fod=`Uxk!_r0RvT~P(L{zL^G)fBe2-jH zlx{Ue(M9mhrzohm`CfUxa#a^lGO{QXMiQlMA50|^$zC-(&_#&CX9uXaMJcz{@RkoQ z)19U61Bnb%z%r}J*`F0*A?^W5BE`o2KZJ}P|TQfbu+l;u$cA;MCyQ-bF zWT-Oxl)S`#*Lm8jSEVqz2=;jjgL;wu{BV$`ZerzHrzkSp6h>mZ*RhsCsHdrN0leI) za)BPt1=LHQ(gyzFWR`ga@9Ow7=bhroyi*v7_r7y=yH~|mT?FquzM@{_yf6 z=!<$$p7Kb5=VqUxifJPwFS0+dy2GT63~Q6Lv1cs@R(rRK_fu_3YbTcdD!l6=43~#@ z)Qh@uY#F*W#|ViX&tN3Yjk>PwihdRCbrHhwXpeePn0$j}1@jb9W}d>-nIAS<&UYvJ zRk+thyu-x9J?cf~>GJgo87RJJx~vUR20L&X(`8tjm~P)%d}51Ccd_3p#ptUdw8m2m z)Z1D!nRelI@sf0=b3EpB8Is)Hl(3|#w!I`xoK(NcF?11(^Be>9HsfVpt)pG}&Jt&w zBFT(X7>V(I+nUu<#;fe2Zx%@UJi9>sYQ`Ux?-8nF|L>`L5~M_r(UE1LZHclBT=UC* zm2&7JI)SGgs9!CMdY$tuzTw?K(PY*sjKun&?Fw@JD&x>au+B3M)Qha=Cp^TdF~gDh zrgTNV-72q=jlM}X`aIb{y~y`*fa57L*AzqMn!-q24|}e&8vQDz&_!sQrxd6cxn41O zXDBk;l&r+|$ae+AK^5I~5p475j(VGI;~mXAgv_KFq{uCU5xKRO*NJBtRN-3}!7UHp zsIPNd_;Td^`rTyx{wrsmBFfBDm>Tmwz9;0I>kg{$t&4b}mWOZD+sv2#yx`xQdaT|? z`rb76l)_x=v7-Hq9Ld^RyVYQ zD(M)Qq+`I74%FXCf7}Epx@-azM$+8KIXxUy8Hg^zka-4zdQpTG83;p>*`{Pgw)@t0 zBe7h3xv4m1r;A{lXCSB-*DT$kc_HVO9>XgC&_!J7 z!SfH)+x(X))YHkt%a4UvFO+iuD6%X7g^>hk_gve4!z%62MF_yt4%CYRqLL&n@1Z#<4h;b`Kb;%swSAvEOx`3LRE~UKhbW5A>+F z*)NT!ZaB^yoRN^lpv~097&Us%Q^~_B((59`;E^8nvKaaFXXTO#LzV@g4Tu6bcU*^6 zsMSRXz(XzSWdV#Oi8FkLBlAt^N__X-W4DU0L$hfx}E9z~w$*2`|%@9PU8H~uZ^DUoI6I3)Ovs^F`OxU`7}U)0+&ZO{=EL1vo5NKB8~ zu7EYFBCaliX&!M=Z!=wX#N=v;E5Xz`OxyEs*cp_jEEk2T$<=P**oQ0Y994l>7adj`C0l13 z*EWt^>lC9Z@aiJi=7AUWBHP8nmvGvEp~!4gvURq*jlsZaB2}OrnJM*%2U^sNY_B_Q z!0=?=DQ$`Op>yqjRK-|bgvxo0MZL&7KI@9xr^hGsSMBb0D^tUM-il;~p z?kSMS{lFD?{8p6)n6l!YCj#n;$UV#kY1mWTK`&T7$8xYwNlWaHocEyktt#4^vSOdd zd-X(Q|D9OvKG)B?aRdkFl&Z-2(3Lad(`nYIHH-XE7+tp5Q&1x3h4&Vjr#KGgDNvpH zexv1_aQm$)@SCzyI}iQpiO786Y}EES6?mWHIGCq|MdpXD1$Dnwg@034%<}|5J+YZL zo?m^$&fMp`F!y|`S%=sM6x$&N1(L+@SD1d43E(|Eef|a7qxysa(PY4gvEiy8M|Ma- zTc}GhXbgJpVNk_jzhx%hP<>4b8X(K)#g@*n1xYbsPZZN30tKpx&}lXLZKplyJBW2w z^VHX6WlyyL%&rA?i6EVYQB-YPl!ahGq7d#uf%}2WBtn;!5VZ)*ZV@hpDBO{nl*jJeKqn_12Ce!C=o22@_ zZ@ofky5`i9<+PCHRLQdTpsTMh{w+qR${3Vs)UpKEHNd%Pi0fsFw5=0|VN;;G;yR7? z3QMpuh2rYn`rW(ilHAe~R_sdo49CIznoOb7X>{CCO5dkjs9t3aO7*o&f!(faq7=US zquyj8z6IT_Kb(-;v~woL!vJf*A?cd5LP=^L-KNtp`=Z_Arrr8gyRN%-b0b?~`O@4+ zUz30)3l0e=P~Fh_jiK{cs&8MWTim8wzfRY6pRO%|90O>g;E;dm&qTIsT z@@%4hYp(0s+ylI~6UD&a8!rVDE*q!dMY8d;(nntinf{3tgADug|9R9Z4j`(fyS)G zi~NRP^d9v+dp^74H(xWdW)V_K!I0$P&VVFc4V~+_zP`A(7$@e~BD$!?JxyC2{hdb} zd?;PGZA-Oe+l)gP3dDpN?zGyCp?f7pU({O&lP4+dT9U%9?KOj5pQ6|13&V|Lk0wnWnjM{g*JC?-Upn2y0mf$Ac3FqN}J zCC*KwSEo197orx!A>Z++-Hz(Bi%mZali4{v^)peo6bmU1!*qy11HB}| zplv1R)S+6JqWbx*sL&jDsO(-;e6G@a|Ejj+#-JSRt_jHMD2($Uv-(zTnorS7wj{K_*NJNlXEZzRMT<0-5A)1skBY#FYDT7TXJZ+ps7EjYd)QeFKom~I5|v` zIKfAC?LXC5r18P#V_fJNPM)SG*kV%O*!9w{@=y3SZ8T76mLDQ!pFsZGU)%cik3YG! zrG7qRK7l+BvjAt#f;amTdqL&FK74!=CHQ1E`}XmCHcsL+KF=Cse4jf$Kc9`mCjX$j zKWHYi@l?r#4^_{jMY?k{3GPj6a*NYoI3kwd^WxjPpYpuNg{=BJ@8(S;{q18sV^8z1 zW`Fs`!PBEx+aA7)etfl5>oMU3&Om*Q8Hnu`{%wQK@>X~6GQjsSu@7DS0k4PqSM=ZW zFuA~&(Ule8;9B-hgMFjR2!Sp89QhY!AMw($*nBCCSd zUw$uzUmM{ zwzUN2>9hU>k3Wdp3x;=BzUAWkrqn4NfB1o30nc*Ni(~T55n^Rr#i4l3Ab*t zVf6EMu}!X|d9n=$sNc|lM`)_2h%*A-*=(@_?|Lz5%+p8V4Kl8V9`X$!1j%h<9$-ds zxCqXo5Fi1l$n>vQ@}=lgkN3!UJNP#p%o@NyNP^dJT#g3JbR{>2y5#Fym?KY$zNpE_ zBAm^aOhvP~$}LpAjIji_v@;Bbs+Tb?X6GV?s+Tdsxr}l1NIj8pUOREr6B*~Dr7X)w z%g`l^ek94i0w;4Q0QD};^dqU66*$WY*P1;{)KggtNFgz{?_y=Se^%*lmB4;6ABgW? zhe9juc@#UX> zVQWkMsC=aQ_uoMobhr_70w4UvTi^Q1TgWW&^XUp3rT^(^0+ms6)VKcR?JxfE&DNIs z`8+}W^}nuB%Yl|!1DR9dYnm0IZ~O~Q#qKSR%-2>bStw?49GR~aRLI}{EwXOF z5&3MdLj1zNuFw5AHqYfN>|gt~g|bnO;rz%sS8!J8y~eU>Dz_unoT`xx`^3lQpD$7wcCR*&|A{q9~TUQLtPe0A|?@8gqa z_s4skY!j_!(IQ#JkM?fjZ0`$)pZn~?m+>Onz)jiZe4TY5l~wj=?{c$QKR7tZrkC+D z%J!3Wyn-v|NxF~@C-P=YFry+e{_=e^mZz4X0Vu-7@cSwqhC zX(#9B^J)AfnO-g9)kes|;Lk4Ocms(>=|#MGw1-tdUsidY;&^!kCwGz|K3&w{X5MbeepcrM6+lURi#+wF-18JNMk#EK^lAa zhrjvy4}S9AJ^cB+ZS1@%cW>p<1Cy3*-w&cDt#Fn`Z=m-q7q$T|qxovDvx=6`gg-J3 zv~yw{fA}y@{OJPP!D^FX#B`Cq!p;+uJD_Vs4`#0e{FU8g$BVRc9W9{k&R4VK%}M+g z+VdjHHgMt5Uf2AGE%>0kX|Yl6b?$p+{>$&nZ`RcW2jShYGEKj{O zIZqZ}63xe8KJMn`l@+vxvUOn==gDfLwY6pRX_7tz12n`jdezy$AbcK8p%ouT%d>PI zVFuBIIC8GosA=X!VP2hVn$FiS;{NnHf*w(&_r2fyH{bic-|l?x_rCqzZ~V@8zwz(C z`%Ay{-EaImn-;n8OVR4Wz46a}>mUF3U;l;9fBWr!`Dfqyr?Nc^ZB<5p^lyLV5C7vo zkqw~-Rfd23&%XU9zw_-s{^$SbPyh9|1oOvfbmp3$%$IT2`7nOdd6_H$o2eLD^7t%m zcgM+PG$(gNmyouQ^wZ5HG5qi*T1a+BF|E8$QW!iW!!KTaO3M1`GQHZ&g`D5NToS|Q zNwPRfQn3Qw$Gn^xKDk<5$eE{CuHDNhx|Z@jj#k9APp{T6Y8H)>)cx^gOp5tp5v?{r zL00jmgV&PRaV((w>U>V>_4$07CRuX6>3ntGIf~|Dm7L7aNJFY_`qF#}ez}n_gR4p1 zJpZI~lq@9FPvUE82^}IbWW{#pvWuO>3sQ|=jIK7(QcCh90=DBg=7VT+DHZb7O*(b$ zo@N{H^hLZ#I!|YDmPz+~lmcES?e`-XuSB;$U)(IIWxAQameTwnN)p%dN%H#mGFq-B z+gJ0|rEB|M_8OXK)OnEr+3-8*^Mv*g{2TlbtyFh^GDjv^jT`j?!N>CpQlzSZ;FYUX zDApI_gtXsRH;eNqHlqv->13o{&R5%p?Zq6%ZJWdQhwVpuk6{v%I?tEbV6EBxUpPcR ziLO>JV(1lq>;L`;{rwSo@BjG`TIG}kw)g8PMU1KJl|Ztx{PoEB`}YX7g?V4Mb=p- zux8UW(PG+|DRBRdecBx0bBG-|vS{->nc3(bMi-A8WiqBz7v`C^$f$=2G|j9x$`b`_ zyJQw%p&I8Fn4+0Mk>plF#ws??9x~6PQg0_z=|c5SF$uYanCMB8Ek*;u*Mb z3)X58zGD~Vs4bAoXck)+k!Ytj1LM1*33>Pso^2!TYO}00sI>Y*m}a53pN5rOBv4eW zaT4!Mi7*6n ziQK9JSiDd=4C%(}G}}ChvP}-6rSYJl@Xo;&cMUS)Qrm2=?Fn>A418id14Y>ADu*csO6t@}we+C7o z16V=m&Cml=Slmsc4)&Bsdr7*vOkfmRU(Tn`QkeJ6*a58tR%qceR6cB^nBQr9jlXT5 zvuT)a4G)5wm-CBGI)~|GbD75R3mBG6>#IpD$fq8g7X&h%EWc8rFe2 z_z%o~^K`n1O*6&`^(1)-V`~StA8h?~pjF?;Q4LxU4v;o<2E4~c+Qx)Q*{aRSDb`vs zS>G`WD)VKPjU{X1@0OKak|>%T>5F$+*?A3YVW+zhKu`Ef=eo@p)%Hds{qzlr>?y zkli6ED6+A}+pwXPH}<5526|&|kGI;{vb;I0zq!1_g4C~kGs4pp{!yS>Wtnu5yn8y@U%rV%`Py)xr3 zOggrunk(Ug36i^Ro`wI*p^5IaNS+ zgUxA)2iGug?slkQmP}uy$vXSw1UBU|XrHUA<+J4`>r9iY6{Ly|v{4=V3(ryvhI<`* z65}|T!E(Ug_}Qyu^EdzSJOA*He)XFNfB2nWfnOaPcX?@l|M9>0h7By2_V*us^B>qi zmf7Eb@>{=_-(z}1UW~(s*eOV9FyioG_I2Co1GBX{O%_SoF+R*6l5v;ZS{%bxLB3dh z4jUJX8yjuzvklWm*ba)V!RBCo!Kwp}2W0`U7h%NVLzsnt>aU)`A2_*T7_0En-U<%4 z7zoy`#v10Wn*bggO}-}K1H1$BJxkIV9Hwy{VWSQoF5+`+w!rEx@%JWK!@pR1IVWkqJ$D=o^DkBc`Wk~!pgd^PvwvXvZfZ8|TPNFj zd!A<&t=Eg253iPIF>D~?xu4v(CRfPE0Yjjah00Gpe26#0)>N7B+0}djG)sU1Y0lnO z6=SCOO?0-14IwRafl8U#$?T-O_-L;RKaXegtL3D$dNIFF?3DIsuL@hMzVUrED6m23 z=YRj#f8&RK?45h~^W%0963-d!J|30H-Pv#id}6oJh@aw`!FKox&y#i1_#C!bf(K7~ z-5yq$846+3>p!+0mkY(ZsH^snXI3EU040aw9=`jcq-*I}+@k#P&!66qOnubK_`pl~I!?)Wq!k!4~V9TEY1jQo1QT%)yDd zWK)_Q0H6{T4pbIZNbW1G&BY^n@g&YRomZPEtr9h6$JESN#50=I6KWH7!{Pm)d%rt6 z2__E)g9kx>zdM+Gjo$Q>-c(*BP>{1(C>Xjv3`#SL0Zy?wZu<~+`7feP+}Xf(^4rJ9 zC!G)A$RTVNcV56wJ-zjq-ufcSG7lCt5n+uSSfu3rvg8=LJ`8F0M}1QAr*Gjj%dB$- zZp`A8njTYAv82?*FX?cbJ#HJw*X3W5`j_^3Fsi~DnKVCPz+rkju=p2 z8g)RQ-#9*<0p*9|o~zCRR;5j2g+riM+ZM z`Y64KR`ai$li=9@u9k4x5Ig6)dGEx2iOkk?Q<~c`%T2_~Y$U*=Kx?jnLp3mXeK?^- zI0B1yfML#nRpRzgX+APkY9m4&j5Xg@`~#lQ5NgonSn1p^3`X}mq|rW)RxpFN$4c{& zu~HieE35=+SSx}Oepr9}bfMG)T(DH)+2bsod46D=cWXhs%6d&)7(LcCVnpukd~fO8;-za7wY{&iTCr~yhdk%3YhALwYm+wE&@w<1V^Wk><1NDzN3 zpt#%wYh$Z<9afr;jFsAmSk;G*pkhZR2tzREM-YE2tj~bp0vE1vD$PU&N^K;d!N7Sm zAfz{_*pUeWP|lAa{#HQo;Os@MM`~XEK;K)y>7!(x zZFeclMMTPMB&5BrHu8oQQ!+t7%Bd2>-wG+dWARmZVXp=$%|%8^ZA7GMFAXcAWP-3r zz=;yX-wG+b)D_h^lx88rq&5=FzPrFf`e;~jBohRfoFhT}tzdo`9%5mcX9Lfv)x)bW zo3ealth6i=)OPPjFXq$N!eeRiI1bOHj2^JWWI!}S3D7Xm z2rg_-6c1`92+rd?2oJt(e*(SZl?9fe44M{70zK(!PcUJ{iA)ecb4~>DHK6ZoeSu{q z!==R$;r3Oy6*CGgGYUB~g808MxHKynF0~Qij#ao7ISTFCQOL;=#P0yN=%&q9SXdt7 zswuPaagO(4t-T_=cG;BO)oR@|9G(_WcSe zvz}DD@)}mu%><#7aq0%~w{Qb_+-kcZ#IlxKAuXQdoxV!wdKIBFL4eN*9mL-P{_e{N zEME~jvk|cmwbj2~Me$4!uycwB@wdQ!A0Mu>*Abg7S)wv9nz00I&~>^Tp*p>a(U~A@ zrf^0F@wWq(zJ`}pBesut%#xL%(X2&iL+$aoSFtz~1ZbSaLHwv7Ts@wbGwTEQu}`Sgk}@UWC+bToGn-B^1>?o|xV1i^8f!9o13 z&^-YGmN!w#_YhdJGBldC1Z~vU$Z4=TtUGSyv3z8#v@9alzUtSC;PmZQUY`>jh;NB?=dC=Jl?;~_M}#}pIC#Gz zJthdQ<)jDV+riywE05(OBc&ygkPg%*t$sy-Oc0QA0tE5xkdh&);Z`2YLk_kfVU7!{JEy#Sa zrJm2H^Qm_vmn9*?pxH<;#(nK!a!?T>69gEX5J9{PqvG@LeFBdqdD+VawiYMRSi&MW zX5)byboYZ$TRI(7+{Xj~9Opg|zXe?3pzP}GzI$?V`%yxcri_c`E8-ezEOt=w9211o zlbq*3d;?sS*Ir$j_uk-j-LrU+pFpcYNpp}QXwMQg0QX5Tew<20Iq43gSNAbaXs>7ZgSCI}!o zdx7{ZAah6!eMXa#;ZPe1PG8+mgxALkj$(oUhjSEs!%W;yG{fT;VTBN65?gdDnw$)Y z+K75ZOtF6IpQS1zqd7~+h69cD4=ci9f`E(@4v2S=Juw~0E`R21!@7z&h216=o!N** zpJ-fZSkVa+grajg0r76p8CS~x#FxaZOSaFjEHN1n%}@d~Qjb0lD;{Bj@LB@r5fJYJ zdKE8F1_AgGz9nyty`RUBYw_il!q13-Ljx%mn8V|J5VaGJ1KaCJXzSk3Du2o=ufb%?Jo zIP=mmyGbrMO;{@UIM7}f8&)&82|~g73=Z-21!rzLW;e+NrwNM%SI?mht9jZ4q2PR; zhIqH&>OhIFo3CI438w@w;^QVwMMgqxBqS5{h~%)EqD>Hx@F^PN36k+t26^%n4H52z^mC!i>GFm zfeexsLIOGNYfCtzYKAsJ0Lf=)h~EOT@)5#?R|d@Evw7uk`-I1m6`?U35!yr>3`W%q zZh`=fO#w#`-xwOc4si^xXhkp;ehefZWb7MF>?{u%CoPABbE2;5jH-#<1mQJ2KCwf5 zE1bo{GpS#K5TH0wxGx*(`Ge@vXo#-wNwX z5K;)p(>T6j`7XZDm8AN+!88{cDYX%i>f=&HQbrgAq@1Kcd~2j(d!#fM87Z}qkoH2= zrxmLi+0};;XEhMt8flLpb-by)LCZ3cfzpCVK>O+|!=sAym>{^6lOBj~4Yc1HD9uC$ zN^K;d1NF6#QN@W&5P)({1o5qb4q5}HnaDt?jRbV09({tZ%M@!eCI~<|FM{~iK!*6>5yZC! z8gyGDrMbvRsf~nm5NfPA6Mka1i`1A96`K`)IU>zi$Gs7n;2}FhutZco~AC9 zexjbf8&{0S1flet@j(3c(iiI^=4h6%!ow1fLC{P@5bDF^xMDLV2p~9{fp`~0xx#}h z0q~u_4wvKEF0;f^lM&GzeMJ5Jp1R0Csc4G{0wPXZAYMdNZ8W#T#L^QnF&ha}-<8-R zFRn}~hGK$%i8B<47co7)+9Z!bBpkM2m~7H^Ke6;=Of*jsle%+0smO>4g5(Y-BM>iQ zIx;$Ja2O{KWThgOS$T6LznoD{(7;U9H~2oP^a| zn5Ca~e$#SNF&h(v>g3D@;%ln&$vj)bmj?-LYt&e1%5r0&Hc|yo#@Yhjq+&BB2r``w;KM<*3^F+qUEsSCu5u#S_|h^fMQ z>qjflJl+)|O$e5UEin5d12X`<0;{76r+a%01QigO^muoYIb0h%WxqTxmooG{e( z=YnpFo**Y9!)N7wUshr!Z& z#6=Spc8QB^zD*u{0+yVDtA@OU@aQwp-UI_B_^J^X62kn1Cg>$o-cSxg7FXex?eE9) zL=-eMC*MneMjuj*FmTbva)uIk3`LU(-r6PEO-ku&mlpa|Lv@u`w zm#O~drlgyZ4gMLAcyc+L?`&-DbQS2?sobwA`zL!bsmhDF&zfBtyWfbx#$+Gt0 z_4h|z=gg$R@-$$#wHqaaUNuT0#8a2wpCZ5Cd4VY~%E3j2+bt#VGaV73!%}8aR=Ca@ z?6OSO(I2H)no19#8GF^;58#NZ`mh@~l*oj!2Y8eSuDH!Q?*TeAjpMO&6hJgH8IbzO z_*UvizuH2jeDP>anH8t{( z!OOM1iO{dFB`Rfnqes_&}gbP;WPaF6MSY3Rty?;2$qrpX)ALw-U{?}IY&7-$fbk9Hy$L)Z%S{?@e>NdmNzEl zx>qSVHIkg6ziAy9@!xzx%!Po#DPGAb%PC8~O7I(2=6ru6O5Q{T7>neh76GXr7sAgJ zmdk9p5HQrE2Z)lN{6WbsM2W8$V!Cdr6kkvyvFJl*SS4HAfurVY!!VM0dcJtYEeL!) z3N$2PR~tHfaSj1?fxWMz@%t12G;t3=Z?Zp7H@KjKICY<|$#@FAXypPZ8&k1Pfgcf_ zrtn2Y_qB><&5Ne2K%_=(Av#MjAYW^qGCWmY(4|lymfQ1Zw?Ih~S5Q(T38gMu6F8E$ zHjFLNTbyCivy~&G>sTJoD1A^$PL0Hps~_76j6`ido|!O~++zbw6t*n+i*ydhc%-42 z-60p98Hq(#-!Tpxu~{3&qI-)ZOd7T?yJ36~7 zC8tJW$tUU}mXVSzx=g-s;_1o;O#ZcMcen$G=M&tgbS6KreX*IPtU#~NH-Q63 zTGocqIUXrsGO#7Y58`W3#tF)O5Aw>U+y0z0R%g-l^+gJwrFuw71s5bYn}<<#>W$&+Y`Ei{Tt5b3x-)vH?yx)-mSU03tP#AWi~x&Ck)K z4RTRhs99Q&BfR1kM284^Ez@+~_Jj>jU-2a^ga~w`19fOeE<_9U>j9;cz7F&xN#Jwg zZFYp3NY4h$$ivw0!dC#ab3}n7K5N6+UOm#mgkp7!oD`4S;iW7@@hLSD@#@R%Mus*Y zcTE`adQ^o;!0LGY1*34-3Np({hRlp4$btTZ<4Dp5xh5^Rnm1#n7OO*kJezf%%v01O zG2VvnaBtc{ri?~`OpPSSp(^_kILfp(3|{uMY4M6XMA_$2_&9WIKex==GJLzOnvLuL zO)K%3r>H=q*^1CcD&;Zivqb~W_lrC!+JFhf>fZcl4N?`QAG6MU)xqyyeR;luufVo* zE9FB9c4{PHAL(CRbW~}BT$UE9oI2qMuefg2vA@b?bzmaJ*Um5D5g5Ms>#wY|U>GcK zr4ncXrAip9nizp2SZl-Bwmn+K*U_@>U z`1wkZr+AB2%|?LUox-QND)6b14<9xtdivn+oZrc1aKYDJ>PUxj--Y zn)iJstE)Hu@twk_v`&FfjYRkp^+DB<^9^!6U+}dDpHeFw{^U;K(_9t!)JTHg(~p@r zLcc+-^b4)PgHNfI4jasRL>x)xls(8*td4Q7pzf@Yo-d6xRE|@dCEq?{pZTqM)HUNoYpumxBUF71@TNF?zblc*R9iHb!r+$9QPR-4K?E zf|iy6}Hgi&n>*SdI#GS}YN|{@RSA z#vJ5w%-~k9*;0a|JDNk^L>HOqmGIG%wXpuEZuT`%bH)O@9+9By%BF#%=WN5+#y#G} z)S1g3YmhbWv6LVwj-*CDnhxmXmsV8bA)zdIg&+j|Z)IqLI4XuSX zKWu;m*|P_Vao`##!4#Xu=9YY9t{X>3jK(9(9llQiI<;gp}>njqKsO zt%r6ddaXdE#qgo__s3fXHRnuuu15{7^Pp08Q$H90*gG5AnH;uK3$%n{E$HXTj6QWS zwCC^6d1BRprdI7eV{qzek9NW~7-|Xt|9&l=!)3`UIO~{Me}AH%*f8qU1Jx>Lrq0`~38Ozf>c#Y- z+v0?+s;xL#@-j|lB;wR5h$B)R7TIqv>hi+UcpI?M4V%FanX^e4swlZ@T=!fN>z)op$K2AXmd!LWuzdkBS$FqsIKQYLe)X8 zR1J>w+At+1&D*fu2x^6yW~E@JMxvMXogPQtI>_~{!KWT(N>UnPhG&2+TR*rZR(zdC z*!gLqiH#+8yP1SN=&PH(jw*JL%VLAyJ?xaYG{;`Q71Tr}8%tJ)F;pd`10#-|_hJ*q z;mRXUOt!i?#$v6q^>zZwQEuAINOEteDuf4)oVE=kbdO6h1?=X~t*WHDk>a#&zSc!s z*fAE)^{`SG)JUp}URUKIjtqB@>u^KUpanU?D{euW*99!u?6$SSa#WzxVu{do9VIb^ZXbCkopp2t-=UONE}8bXf|2GgV$@Gu4qu>Q;c#LP#F%tKWAG96@axMvrAHvTe1sG?S&T0Ieroef7&}fg`bP!wA$PU7E^vEzq_!lVzkJuBTjm{dBpb zxEal;fYL&UK-Km2&=Cu_VFb!)6<)a& z&>H^8(^r7fLWn?B#n{luhTG?U8%Cg5Vz)!JSzn=Esun`*Hh;pBMY84XA?%u z9=&2h-VHf(?-t9HFn5q@ma#J<5xd^P9f5HWJ2c0&pvpP*V2a?)vDecpmb8Mgo?i9U z_pM<8v!YkI*f>)^S_TQ{AkYLheFbPenHs1%zM&&HZo>%FBU4Nqyfx4|j=|DbfYy_#!BC%l@T62R z``A-c;90NfQXbPBXj_iaM4dcjMq(S*pZOeh@-SB?2N!#YDUWH6xIM>ULgp2EXTE@tXB#fiJcI-WLWXEk7F?u|TiG(-DxHHFKIV#ZW>D5SmAux1g$!!>*d$Qzs z#hn|QLvO}0Sn>)^S_a9*WA$^Lp`%r9!-&&cs$$aPZE@DFW3coUp!H;Gtn+0@+C0pq z&B1+qd}eCnt%25Y43@qEw4O|j)!p0Bkvz9y^r%Osn1Fd}pmiLBrLO?3CsX60N{=0Z z^w5M6s7I!lKzehaZ8-+ZNI_iBs>bSTNbo7pidC5~BKBC7s;HjJjl+v`R>PH?xraHY zJ;z{KDVQnClLn}X`Z0yj$f_6ftQFP*Z+rcg@|cER9^8gwFjaR2J1v)pU0=s=gx5n8 zMt^(!N)=w;>Tkf_fMZaKq+p~*K1NgyQ#po_WzYR)qLrcn?h&p?ma-iLp0_ZaGHHs|c8}OJNk8)JVb!UpUdW!yK*m(1Zb}r}d6k+=8^l zS@S9aPhP=E%OK*^ms}mu_t1n9r^lr<(f93-L(pBVKWkn^z>M8$RB%!w5vMBj89Ea2 zHjFquD#e7{+xoNSRRqkq0ZwWp;v8s407FM7-i8sU$E28cdt02f+?b`WIJAyQ1^XZj zp?1(p!zwg7@d(soQcS_UHPAY4%+gnY))6QGI?{nU1S(gE2hVac(O4m#5U8?;)}0Xx zS^5glI@Sb0^&Kyx3SZ2sIcxG1;zOp;-rS>YxiQN~L0rd`0P#e3ZKXjK8tr&&!yZ>^ ztQXH++nyVWK4v6B8fvNlp(6%w!vM(>gU2gw-Ing#&KJO+ zJD-qZIV#X;u_Wky^_{TL5sSBBgzizL#$xf@y*smhmZJi_o;~%|cW6RKE8d0?y2qZF zUVC$|H(Oa`$tyVP*;8ND#0SAxXK=zW;`G>4V>x*4VvDnuJ+br^p!MvjKT+4AjM#fV z*XF|S;8;#7;L2{@I0stCo>=+{P+AD7(+;}oqq-yU9-1(E)MHPLCEgW})~zhE^cA4> z>}jCB$Qe3f?lz1-y)~!CV(uJhTlT~0;}EHaC`Q| zvQjY9@`%k@{a{IGgxYh=CXARp_QaIY8xF*yt#qn}O|dLx?952QzGdguQEU%$#dc@| ze9UUB*iKqFV6UfFENKN}{j$?ge+DvA?1g{vv=sQ)lVuMZ%d&HfJ97+{qXNC2UX4^S zm(Y=9w_$|t(W}Oi>>RqClIm6#S@H_bdM-5@s+;hR_BuQ!w^94?iMtb<>@?n-G)^P$S(tXo-ZBBmZPBN3<08I6E?(PgcI0{GR# zNm)!=oOLUUO+?c}W+dX&DWfBr9-1)rPmf74_42kjYq>E?Uun4YOlsU!UjlN}(c!)G zyn}j7svJ_H)csI7-{}~n+CmURWm(wG}CPuF?z&_DVR6+@6Ozq<)}cf<5B>51t%?o=wek!Ep!CZZ5UnbaVaK{-rU8_xG_s!!Abd?h;z$O zL)lp6lO&Hs)w-nVzIlU5GE&FFJH)iQ8Kn8A0^ip(cz#JtoD3 z%iB7%mK(G5WuVMRY`Hpta@5nqTs<8;%X=u3D{l?7ZrzxruK=xMP2kaideF&{Ll1K~ z^w5(-$1Cnw(Hv-7Zp<=L5Yy6#t{tkAsUvJ2=ECOSV$Zddt29U4o*Od_bpG+xNg_IiPkxm&~0rZ)`2=08-4R)jLJ9hJgxJP z$&IU6>!~kGNpW92FY4(BP95R$(1c;w^@Pjuid$_Zr0tJ$;Lm6_gRgV6RrllhDZpu= zBwzOQ)5MOFd1%52+#^c6DVYQCosS!^92MyG+^Mf~3P;>LG+~79Eko@lZVu2b7oOz4 z7ZmLKuT|h0Vdu-mpX|OY?SZG1l@X$hiSfY9s>H7yXTzc|InY zFgnxYO-xn1HPE^>MV7woQD!6p)jO;sZ64;*=AkETj#u0oZw<7LH?i~;ptKMoQ2k{) zN83Eiwar6M+Z?a#2DB}2Vi_rjX=xpuIfCb5E_e<;^)OSu(nQg&(FhDVx^<}lq(&mZiF!W95jqb|7zQR!=p3)O1u6UM z9TG#9g@ToqgJB&%=yvz}x-68Vbsm~9V)a&+m;||swVoKVloUu?`H_J%(4WU0G4n7N zGY4mR?UNFb5>hQOTqPU((Ke)qSDOudE!6+km-ewXERfr36#Udka_K;SmUD#7!(7-L zTk+n1{K5IaIBOk@Aza7;8xq6DU`J(n5$pL+z{d zp;0c+Nsb&(uLkUY!<$-&FK=`wln=0Mw$B$knacq>V=h;{i1M~6Jjb;!ZR9%4#Lnj>yc zlA7p}V@chST5QhxZib^v9_G5_;B5~x6Tt`D>afJj`ZbVqe5N` zP5GLVr$`<$#c&QE#aL6&WS_QQlIkMvS}K}tL!q_WIr>Dvdgn1N@ve+3Kp2XjI*l+T+24` z`V?y9w7`5?n4F>v!)f^LX^t8GUg1vF>G;&r!&5^KPmPaHff$||AD>!O`|H(3iR>Uv z-W)!Je>&--z0grhw_$XN$K#lUc~Ly}nPnJ4UdD@P11>4bopr)tJFig2rnEw8&v?_h52ugj)7PbMWoeM|>jyQv!#p<;HaC)B z>zgk*Yw5jLlLc;)u6on?hIn#~jGQzbkn1u`v;4|xb;@!FfMJx560hOZBy5?SNM zD=y>@l8eqqR~u?|%&nB-(xklN2L1h^dVC5#sZ*X)z_42=TACw%*|g55D>h<7p=m1O zu+EMALXTkQ)_GjA!#cmMETJ7z53A#p0Ek$qMq?hkhQfrpXLGk^N}zjwu187QhRqijD}$1Au3UzJ`) z8~8K5ILOv%9L-E2mx}|?@E;y5qxovjrtskHBAt23Ea%fS$&&NU{xn%0B;&DF~I1+THI9k>;0=_?;R zdHmw#US~O9y}DYjlN2UC_(*kL$p9V4(`mB4G45SQFuTKZQ}qW-DOWL6D)@dGrx%bS zwu1FyzIirJGutR&nm$ezuP*23_V4K;j?!ngzKy+!I8K&0>)5oSEQ5AqFD7w1wdqdd z#o{@%35-85c*`bY0Gp`utIbs!qZw8+gUM^;?6s{Ls2pg*A7q>2PaDy>O6QOEe(r2` zb~c{QruWaIAifVTM#lG}@nCenH|?GGy3=krnfCs^aR62`{`c_hEP9Z;=P|nHMGEaK z-ORx&=TEHL47ziunMJhDVrWra3o1|H018x;<{|!3mhRz!E%w6$iq*g`>d1iK0ymxF zI0eqSb~3I~c9S{$?8CC2S*N}D51)3A-nn-VfAUU?{rfCQUf-_M7OC7>rv;u^-|=m? zeUePCuqoP}pCTKCF(T&;q<{A0_l4*Y|szw;0w2zK@uyGRrgPS`Xm4IgCDqe4}bnDjFG2Mxa?pb z|J{9jG<3HB*u1{i(e!n65zCe2rrANP01@U`?4?copr>6n#DghJJ@?mTw}QkY7=NHm z&yp$jw#-;yE5xdm3IvmE(*o5t4D6us3JyYSFH*E#Zz~bBh`TEhEpt^rFtHYGxG2kk zTRj)Q1Y&xKfLyWWqfeW;V zC%9OaeRTdJN;g7@p*dD1Hf6BowZ*aHnO8mo8FFH2A5_j}?d!k%+TZ(;ufhC*KR@EO zFYMvBn?n5#&j6wyA^v50B&}P#z$@NvbFg$WLJ%|^vVKoQvG=ETV zzS(pWr^||px;L0Bj^%Q`aR*J;bT+jYOY658u$8>Ezj^a!|4q*n16W*e@RjEuyfTdU z{(OZrc^bp8NE!IQ`mdk*)Yx|#WEeDd9()uU@;;b;8mDsg!|6$$sw;w z|Gw+hY=4>EkKY30+BaQ(A8v@!oBd@3PZUpA(HSi1!5@%{oc{IJa$)-P5$C=gLScL} zEN36?f09OTVBk_Ru#YQS5p2(42|Q`>QzjW1!r5}os%XAMZh`Ug9k3WE-huJ*9T)R+ z@eYia?}(T39dGaB75Sbw>OFWxzUR}mjOEjHtbs9?Xrr<V1@_zH3 zU;fVTLJa==1n>y@AC%EPwz>}?<`I^s)BWLZzW#%symt?OkdIXV{SQbP(&3GmC-Cu~ zf96|X`wTEk`1xFQH-!FI$0SfSN`C9l|NgK4#t;42JNNMC$H}d~_}9&?Wk<`Lj?7cx zYnoL;|M|f?e1((W%-2?`o4-^^DEs+<4x3-7q=2K+|;v{&8ucVLmH>`r;( z=67>0U)}wmo;Y_G%%0!Q8EAF;7oWW&@zEFW|E0f-MxTZMe-0YOuYL#*5%>N#vNJXn diff --git a/dashboardSemanticStandardsComparisonResults.xlsx b/dashboardSemanticStandardsComparisonResults.xlsx deleted file mode 100644 index 6e6eace484d7ceb4c075d15faae4e9ab234d4f5b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 166256 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 diff --git a/editItemAddConceptResults.xlsx b/editItemAddConceptResults.xlsx deleted file mode 100644 index 029be91f0517c63e9739d0347e99102a4b966402..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 259993 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 diff --git a/editItemResults.xlsx b/editItemResults.xlsx deleted file mode 100644 index 11b14c33384e98b8ade6991ea8b032f203085006..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 70573 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 z zX}YA7v3*!lzf8ef$+i8(ix+z@I;I)m#rdr-K7Mp&Jl=cL1-i-O2&P5qf&ZKDfBegcd#pJ0q04z?Fkq?shTRo2U1pm*8>jnIXRi z1>nm*d-D)h6sHT^!3Pptf5`lASGEiJQ%~ofo$X+LGhWUfls`$r7cg-t71-shHx=ovMz#;8-Z_u`ErRRw3c?NErI!RiL2?QSOW9q646{P@$w!%k;}YL z%it5a%*RU^%g4(|17jXZ_*az4ln#J=t!3tsRLzPq%L(r_cbMQ)xfc>}Vwr&4f`T6B z^E0}?m52U|`9S;twhEHzB=XRJz{kUfHY;Nl={P`@?o*4g)s3-zos4dajmFj{(bc(7&dDvOtZULl)h%Pmg%aR3oou(3~bcbg^IDoMxz=*pI#ZR z;MuOKo9&rxHk{Tgc(JKcG@)gTI(QLpz|x@F$@`r*e)GG306F;cbKpnN|DcU_+3GGr z%o3LKX@C0b&;R)6cXsdx{gLXwKL^ghhbu8>@Zn#)`K>R#37#eVe5xu9ssG^_29;9s zqJQ)!zx~Z`e}88Oe?CWw{`%iCMazMfIs=(=;d`1Dqx1h++u`Je`QA!Z_^-b42Eunc zkQe4V1y$jfpLoOFH{b>NYOgBz=Wo7ITl?|S+?TIPKmIFD>B6(;#kmJs75~GZc|-C? ZpS<^%{xTB11^@pVD8=9W3@jpc{ufr|%UJ*b diff --git a/frameworkFrameworkSettingsDIVResults.xlsx b/frameworkFrameworkSettingsDIVResults.xlsx deleted file mode 100644 index 003a5931163ab4b14e2591345059685af6333041..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 61869 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 diff --git a/frameworkPublishFrameworkDIVResults.xlsx b/frameworkPublishFrameworkDIVResults.xlsx deleted file mode 100644 index ed2935e7bedb377c65499cf5f67c13a9aa454087..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 93736 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 M6#wW2h=@D?3ynfxe*gdg diff --git a/loginResults.xlsx b/loginResults.xlsx deleted file mode 100644 index 2eb03f41c6744cfcb87cc1d336467f6269b4b14b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27313 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 VJ$dQJe}agf!GB+eQ5a+T_20&JJ_G;& diff --git a/myStandardsSearchRelatedStandardsResults.xlsx b/myStandardsSearchRelatedStandardsResults.xlsx deleted file mode 100644 index c1575ad154b44f0c034c8fcf1ea2dbfb07349ff8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25631 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

`TcBOq5xNA%czB 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 XqX+kY1dCY diff --git a/results/alignContentPageResults.xlsx b/results/alignContentPageResults.xlsx deleted file mode 100644 index baf55d30b71cbd3682d3ac6145fba6254d02d89e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20821 zcmeHP-H$BCRbLZ>kWmz@BvOQg)EWt1lAW2Jnf+vU!tU(uz4rZD-Cf@}Mkv&D*Ua?Y zp6*U}&+Kjj$Z-&|us|X>2p*7lKuRP8I7$!}GH?71@Rk>UL=ccA1P@3-;&-b0t7>X? zXFmiA_*(0!u0H3~Ij2sYI#s8t5AS{K*-tIy|NiWm-+KG6e`0Bg{(cUXXMW>LG53?k zX&9gM!|b-~IS=TaUTVQXnNGFG?&>36kyFC{3fyMk8@Xe9V%181Vpa24OsADIVitBVx`8 z8}df0*<5XagOWzAtI)JwaJOsm3$9(Wj?W{sd^zoKFz_6{7dn$M4^l%DLjGjLc?zN| z9`ba%Mk*0iNkjbDq?=m9%uMSxnMt7}UNRyc8{+>L^3c9b9+LFjM~@cTkk1#XpmVFu zQ(rvbDRWuMN-oA(P0mL{F}CiZV(iUNyngcipI=&{zfVeI*Hw9aD`%U6mbC9pwulwF zF+0WR8T--z$IJ_AR=~zE;YY$itz*&g-K~uHz7IPH(u67;KR%+t!xan+4Yui?*z}W} zCp|y5rp$-!dVw3B9`iHUv(J(gFSct<@sBLHQ6Ty09NY@tf%uoe}BKXZx{3g0COBjDtW2W>>RAyyE)AYkSxy9?lo7M9TmPpzdghA z#_sO!%0|YEBr1Spu`>g|-dyeMv=n#&B;i+P;5)lJz22$J0qB+Qw=}g%?00 z-wRG=ps7O-4l?Qm$RPCZ8o}2AzTV8hODI@FVO`Y3APmxZwl-!@!}tII1V}zQuu?eT z0dru*JvQ#g9-{`>CTEp5vdT$js;Dh1abhom$9*wk7!f7C58wHV58wH&_2D~jz5Ckt z-hJ(F-u?R5-+k?`BrOH;E(?ZL#2Yy{c{();O10epDQd=uO*SC#i9hVw81-kCgAcs&}$lhiY`d~Y;X03U>*zZ=Fz z1>B>yDjGhX1VeM<@uUj(n6as;?H&u1uHBzR@S3?%D!T8DxWeY4&w>;oNWfEz-i0Te z8>IW9=P7!9;5l)agoD)jqG#%-8^_=?S{Td>ODSH zAu%AB2v+29E{51K_Z2nXVUv`NO(c&QqMb^|+-K>?#N^R=>{Q|QlN3EY{egczRw3imJ2BC`&%&?@xfh=FMr<6JV2`|DRE2#ZIf02X>o7#H zF*`^fgz5;PXY>OL=63fJk0Qy^Z(QyOUh;+tOQnI(n@Mb7>kbbU`#n1M2aF3Z1DCFN z>aiDG3 zWBK;|a_NfUr70khv9^f3$8!Vkf#>^2v?jlwh}b*91mqr|lJLZ~3NIF7(FjEv$!I`< z8^%oFSaFzs!AnO+BSsr2wpd0ElZ^B*v7!)rHce4&q)m+?_D|(%bA{F+(sLv%eGs~` zx=q#ja-$$4xEhKzZQf9u2rSxIdo3dh*{;)=O-wD^nk`rpPEl#C5Sdgg*5y!nAsQ+R zZ6dO<5D!7itJvD2rV)%WpJNj%UjygeLR!tsx7GN*EUos^u_y*1Q(`S@F1Ql>_Ijo z??Sk%i$Wv*wnV9#@&7YXXga_SLffStaIm=>GmA#bb}fw4Q3x*-jXdWd#=I|l2do7< zw0I5WBatG0V?L!{Ip!n{F|4r=OdoqgEA}v*q@$SgL%1bjeU}ikv#Cdt^fN-jqAKhr zkz~8ir`$g#AGk_BxMq!D>cX33Za~24_NP8)Bd9;57^OPi6i-%6opKEPPX{h?FheLU zmLU7h^mwSY!gO%(c>E%}Cr@$(chh z&Pt5RBA$t`4`k8*F#mb6<8xugG@%}ckKtP_q#vaIELin2c{NxNIY?RRBkqxv(wK;p zRBaZVlGgIc`j(@hqFqhd#MvVKeMMy#L6q8@G8S)B*_nnFUCX+;sz%T1Lljkmd>tY> zMkKnbxu~%J6dk>XUH^$Mvr|cgCovA9!&q2XKXlKtqMyhKS6UsdVF=O>9`k|axo7$M zqtJvLLNY^=hsXk&(8$mV#I|YCpdx1Qgeqst0=acLa)BXQhRZIH#fF-R0PR zCLL+%!eq5{@Js*x?3=GVyR<}qAD8LiL?pQ>nSA|3u%K~7>FUMLIwVodnJZ2esM%m~ zT4Hkw$9cU&4Q}Wh#$l8^IYv@0fqe#(@xeGvEGL`vUER4tU_x;y@TNaW;{{G-w-^g&p zXvo;;ZqcAnxS@*fR`L}&=xvc&bwWRkEzyVBBAK$}5~7DxLAF^vK;ptbm(>DK8m6p} z1C*>mwjh46>p=dXV1PyuRdly73nA1G4)8#e8 z<$*%`Y*6W7%)g`r>T4>3p{ywB$p@ler6y_Ln5=a+$Qol&yUD5s((GKq;=A%#Mqf+qJU% zfV>f@CVf2Kj z6l9WvbEvR`<6*EcBqLEX?H;8(vZV2CHKt_h8QiV`ZjZ|o3E)%(?&-iRog^yAo(duo zf5@;#Din^tDBL+%%i+LWm=<6S2vkT#eo9K!Qt%3B@p4yvdCZg4I!akw5*1)Q6-+>I zS0%Nl!nB&L)n&W6+*&(s*_+MIW~W{6tZ%%cBJHb4#Y;sL3fZJ6RGN0}0!+$)Lu{39 zdx#|ekfq#8kxf3^=^b15apDlUV(SozdKI;&q8_p&nGs6`F^aXZT8gD`-YGbz(zM%B zo8RpyobR9EFpF#T(Txd@RnVRaYUES}ndNk?-kQtlO2H|WrroyM{4TaND>}X(4n5t@ zRR|-4Du{`}_R88ERjw8cQfb=lXbd7CsW3=eo&Au-u9bSJ4_iRc_c<%^zQR9;opl#e zD#8Vo0*+i&DHsJ%L1qM4>D1eHYmNYGg#c8Vc30Hqch{8Wd%owKSUcEu2{4BVizX*X zXS7tjo{DE=TLm$)y;d2SiV3e5Y*T64T~(Xk#gX2M-g}4{a465hjA_uk(7Nn^K924V zV?>zdzEG(eg;GIgg<7kxtgX!Hi;Y4kDowj%`n z2v@t-%()6<;=I*v&g+449=5ZISf7beU*+Klr`)hO!bB{WCRRAWN@->i*09W+tCWqL zcjgUuyPStb5jxjrV$@eT-*KlbaJXwdip0GH;dmFCMKnTYVbsPnVOBPq&3bEP?jSFx zYFp0Lwmw;-zA8*MmzYG-ZAe8lGq1v!m~YSTiES~%Ie&aQO@nQoZM}Fc1Qg}QY~9|u&2$hBArUv zES(Btl5TZY-iuPEPQeW%ei z%BH~>Wm})O9%z;EfG9#XJs?2+g0hJii0;kM;uq`lD|DjPh*?mTky%08b=#ijTv}zo zAc|N;>H!1l7Zfx%(gizFrE8W=g)z#uK5s5-l_7;FLN-05Kz&uVefJKn?R#N#E;c_c zEJZ_Y7SmA7Y^!8VY`5okNf}SHvW2}KPoTcaHn_ANP4tjW12QwJ5;8Jc-BwW+Z`dl! zgH1Y^R9VxgD%;iGihZE{K-=NzX;5Z<)pln2U9Gq5%3@P2S7=Yq$eol%UZ#|rc32RH zF?aXlIE=BKSAC@IYwQ#sr3A2(&{a0t-LsM}YkP-{Di(;8S2?w<*I#>e>1(flY-x%9 zJ|VYWtJevyzvG%yxwQ?~Ge5>wy|(8%&aau&9pnY%jn;;qNV3-&vFD8BrAe7gI&)_) zCoW3MJxAijb6AYDMy>mtWo_lMiu_U~nSpoO+ibV~<@x7R?3QVkDq#grZzLf(cVu&5eL(n-t- zjMS`&S?1ZKM*1g&Ba{ORrb98=BeaDIYZ80gwXgQwet+F@o#g?u`EqAtl`pgPm9^!z z(;l>&PP4V)w0}c%fTRUvbn9l;Jv-Drl=kDe8-x31gFV@8LZksSaR@E3?1JLCkQ)a)#i)JH+NN~ZhVR-tEY&<_9hX><3P zr6u~y25p`exLMjZr*dn9_SUi_IcJA4#+S<s;(HzFCJ|*s+C)JacTs~uS15Z54(-&<`n0!a8!bFAvmI0v-&LI zvV*4#m)OJ^Qv#C@0>zJz6YY{Ok15NvrGYDYp*+x-^*hqgT&ExzO=4esGsSfpJo`pO!>-#69EzaN zt!%muHrU4HXIH8S;!Oo|?4{MOs8m5+N4_ke&k{r{nOvu*r}fjeU;|N{-FW%IeQ^kj zEqg(NB#T4GX4DUIeET1tzWV8(URt6*`XI-zWSjY4B9l#i^=4fmXe>UPE1#QjWTtDG zG?C;=JWI+Te6Fx1@Rc;v-O5f+BC8FzF2AvZzN_W=4U%TN1_zjXga*CE6mG!l(|1HN zRnFo~1Ghd-miZYXuDTfVbs(_#ygp{w(%%m#tpX7G8i|?y^g_OfzUoGor3-}{7oXdy z1Ak9``eaT6a=CJ$1Q)k3Mx5k-R**4^&>u&dig2eB9~+{2Ge$($d=!=>2GyG}hTg!4 zLG@+~J~m^VEz=t_&gonndSk|U8kuEz8u59;h*u{0FThFXC;;{II1{f-&0K&Jxw_V> z!-U?NwSdz|7~4vhRuK($ocRa}f6K2?eKs42kMM1**u(BV&22JBZ|ITFm0HtAjk2`Q z1}+WK1=^Prd-bbTx5o%Yc7pyTe2CMV)sI%)gatwDk_OAOyjSbwi`6a;2w&845v=CH z#MN5QO-x&CEYu>bSH#yh(X1h|y{K&%cpj(RxM_od=bI`y3k@-;BZ_ziON04eu|p_P z`8WTYb~+vX17RhRe?@zsqZ_eKKtEDm68MoN2$V*tqv{7iOVqFZfTJ`gDIu(6S zv!wE)O+lsFTRO77w^Aa1r(3X)e-uzh)^`d@Wb2oeeFGg)U+tBM-`t&D`{~$vEMH>( n$6f_HAB;M>9)XtVzjkWpl;018M*t&!j**`4W`*-v)I+MV6?wS7NUch@(L5i&L1H8Xv; zr@PbLGrOCBYP)jPMxY#T}Ll}>giut%KyIo)bG9bH$SzsM4w+l<+Mei-nb z#syCr&-Xt4%=Sa>vlK|l*ozViRDxuuF;3HHtJzGPF`uwxC5(80C&MtFuoOSzQ8QxB zDI4)-yVY82f`gJqqo>fcUUYXF@r$nAuud)_w0t$~a5(fFz8^Z%2@g_36GHxE%y|l; zEFST6r$H(aRY_BP*`%9B)67i!HknDGBwjKiem2Gbm-5iLO&*f;!bgu5+K|65Q$hDu zo2S0G$5ZCAl$BgevYMQarebWpBgNQT&%Sl~gI`@*qR(ffvFoaQaw}(Bf|j)JEw+di zx-mP$=$ZJ^04K}~8dkt2FyRNnK&=ze@xASg_<;{Q2-1Wq96vs$!NU~{3=OvBp4#-4 zTqJ!zwr0$S?RtS5o}KV>*t5@)6c2V9E%8Sd+$@m%vUTiwifkwgWMEOzJMH(G1m-L?WRfF%6t9DH|gx8Gk=;02I`Uz>wJT;E*ls_+76 z?0doK95i+4;bBI-02zk<9V7S#z&BbMcnJk-D6ET`7=}SwXKNGoIE)VgK!D_<11p6S z9x?}3+-H+P>@jM9ZE;q4BCDKau8P{S5-0W|c-)sFh7nQH`}qC8`uP3tSs%au?gwvv z|AROG_Jgl|?SnVJD`_c+cUUm0BL4V0U;o!Xd&Byd@BR6Y-}z%RJX~AZ(1(Bh_7DI5 zn`S_apc3$-KY8~@-+%X`Z~f6f|K&Rd@ZFdVs^BNygeTU0er7!kCy-4jM&+Cj;_G3Y zjG3okurX*GNFStQ1@Qg_^G$GjTvgtq7|z24_`>wD!t3!ko~E9m<(J131@K-N`g>t) zRKUyBRz<@n(_mz7Jf2qJ9x^sFwcTfd(zOTE2wpQcN=5hmF<00;@>!4~1POR*(X;TB zbAxnW^gKnc_dF*KlW>??U-Ya!<{4FT;tdo-Dv|DZ6ZFf4NoI7lqMLhykGLON2QE(% z6V8Je@>XcS%;2w#-G0x%n5d9(>YbWs-eqA}h1?HM`(rkVOt8mZFs{PBn4H2ynROH* z*q9%r_d<1q&~Nku3u?Rjkw=ka={K%+1h04_g{9I!=*cuTu=N5D75hED@P~{GF9VmZ zc`)nE;J?$rc+6-6#TLuRQIe4!B~}z-&!#1+jkKvz#Qv#VZLZQfM0$>drT0Qt zR(Gg6Uv3m+1Xm-mrp+7b5P?M->#S!)A={HQW)o8jw`L30gi};nD?}z0i*-3vUWkUu zLYs(eEW|_5@*1|bsA&Xa%;(s|%Gbbow~$uz@-25!Cbbk~%v>(JNU5%9(-wV~o6wwm zB%ZX9>uIyl8kBZ56T&R&?PozH=LB-aicZo;lOI&amLFJWJB`iN_G-g&ShUj^Vx^1X zBtoYp6bmwcgiTQ=jiuFIITpnrEhXMGTa}H?i<$wW4C5$H(tVbUWgm)1Sy%Z1wIum( zuXf4UZbtxvGg*v_&IU~6e~k;+h}yM$IOI-R?d(bo=}!L4JYhIZd3-!}&#ZwzjUO^} zKXgj+xL$${3o)SS2X@y;+v1VxTQg5n-P00qvYz?Tm}TCQc4zVtC&7iO7CeYw74{&T zk#`~7^+ll(e_Ntd&G`SBC^Q{l2chFq4>;J|jhRIwWv3Cw={STJipHLE7-QZSz5~{R z9a=nw@{vdp-!Y%jw;Xelh8WgZ2&NCckrjKGPSSDA`4QZbu)ZsZ+1b=1N%|QfVNn%! zlSr~X;4|)@kPloVAKb9UFm>TgGB+ULbo*0(XCr7Zq8Oz*-V{$(Or3HJ{7(liaxgm)WT#!Y?rnqN7+?*C2E+vZ9~J30GPjtzih#4<7QN<+EKuX-S|LN#ysBzVnR? zM~sGyjovm53WXc0=xrxomV@3FsZ}TR!`Kpim@SeiOD-Y$NEKw8)k7pM{0mtv@T6hN z3OPW@8e|LN3%d^F4+;io6j4QQ8?z8X{ooKkXmX=6sc@$e;Bbo&LBd@Djd|9X&O#Ya6L8(1LmXH%rUY8$T~cW zu3jA~w9ki?4#xaTN}#@`A{fewlAioQ^sCe)?HiM|&WBlJEQJuej_rudW%d@cggq7^8`m6O>?@o=Y6 zmhW-bn@%g4;&=GwiJRx#sXXvn^Y~^Rt=t0@J#q%6?A18z` zdcrdbGReU?RM^GwFjyFpk*JyVj#D04()hNUGcxrIZqER>&*g~(aH<0LbzqiG6BT4% z1rdoqWLP5=3ddg*?i{S;a9}P>3$P{xDx@MmC8cUBcm=e0xTiim;Yn&8rz|ds3b4Kk zCLp-0lG;~c+O785vfWy4ub;H-t=8IBYjdU3S$j=II#7{{hl(f^vPn^>H0#*~n3MsB z*ecz2A4&cZOSzRIn|!|8Ke6uO#36FU))5l*Dr#RvJz_~RCzc9g6sv2OVkw+=3(l!D z>$TP9_qqz_2j@7<;#vcAW5Qz(zwt%4T^H$=0nSUNT z>n^5LgbOMK9J#7eFbbf8%nPu&(%q<-xMB`@ZL#TD#bG2{4BV zizX*XXS7tjzKUmLTLm$(y=J#-^uAHBO{H0HO>KS;M|vxI?;~cwp*#ySra|*U>#_p| zIJ!HE5n-D9LZxaHN(Gq{s@+~$->fsH%|a+D&3fyaP?)zXLc!hP#8K?xDB2ChQt2AS zQbFd$!XWOf*YuT5D>dmUMRC^K&;&zuRkGb_8cG|xsbm^qqi7n8Nw#*URVQ0znx^8c zx2emfPLOg0DSf9R^lcTv%(Dt(;<;;Y*700U!dRsc&vr}YVGs4y4!N!Iqmea>rZ#O7 zZKGW`g6wiq7Db4rPs^yUil+3$jhur<*esmdxJkIp^;+S|dE1r~x2@0IsILllivvj| zY!*(1nHR3RVy|}UjIx~SZ8_K5`ecv#s&IQEAj#g`5N>dR*;J!pmP2jFBu8hh)*+M; zfh|J>>8jMNejqXNGzqZTZ zK@=ge9zCG`Dv4jgyKJ{7v)Z0nW);RH^X6Ku%w_P=mcd6`4?a+@$UMe|NZzgVHlBr? z^TZls->HaaiV+DdD^&gr+yutOBFq}Ia@)Gr{^VxCi@WtK;6&m@n% z+O0FpGSX;gTLgNff%>XECp?~5$DGB^_*y-qQZY-S!puvuzS7;Sbt+|8fz51+b=!Ja zL1&{X%c`m*MR%CyFAdMkyGq-{`)X~x*DgZ|Q3UULD1rJa?=J?9KgEeS@h%}eU>RB< zspR0b*z;>TeT}|ZMwJJXjBBmhkyAz+Z5eH}^=Je2RT(oQlXIB5Z0T#DW_DF_CU)05 zwF9FJDcW-5p{<7$sIRhn;J!e+e*G}I5NQz$n^d9Bwu)kATZJ*PeaS>q1`ur-K(zG$ z0`*n4!KL+JI=A1d0+|_AVN8r})~?^MiJos2pjc%{RoR~QRO}ER1lrzjUxPC8tHI3i z+iAhQRF=|WBZGGPjoit-HTjyg+|I{VSr~KoAdbTr8~xRvl-NQJ={O~T-Gp9prG0-Z z`I44ZXjZX6qr+ch^m$e$WvVY4KY1=Dr*dnlm~%fy5>LyvYx|YBs?3vXDn+wmsMn*D``$V z)1GE|yjSn;?;bsDSjf~KPooIO3(nC)ixWfZ1cKe}!JobjtMsQq-W!XoGDJuHmM7(D$Xd!I?yAeevz9|h$qncg$og`TxRJNmoFt-Ys~mgtiW+B{)+vjZJDm0KIMx0XN6IXj9mzFdA^ zTpe&S_L47Tw|7wPS>#9a+-PQl$8qIF5?ImaeEx8JeT^xbu+mQ=e%5cgU8#Sx%1gJ430iO z52Gven+fyeGjqi$ipg+pQZ<-{DwVv%!>IdPKgG3+qcfOn=~kVd7|SmmZ#S!z+jp?8 zM_T-dVd}$rE!~=7a}kHAC`*dN+YM{L5-vM<#_)QpIDJlF@`ph2Bb=7#kuQol>yETWpGy<#_UT#7DY+HxHnZJU%AGF1`8lM3X-ORM)QRY6@x zJ}jWm6GSVSTxVxzD`y?S2BJ8-`Rcv9;&>)o_5#}OcIZHzdR5O~{L|w%e(`6QmgqxQ z_55a*JA0i>Hu`kgWs)rOb3|M#V#u!mfyEaq6NW1- z4gxw12N1fa$V`8BDPKfib)(DDg~E-Ci?~*Rzb`LEs%bzjS1y&{@)jnDll;#KGG-A5 zlSoq$-uA{dWK?g)i0B1Cg(ZnW^=6EbH#A~Uy%~c~%oyj(^u&yFR*OSV%s7uDvn-Dz zUMGxrWRm|9oU}#(sITKpJTf(N2~OndTB{BddTQ1JQXd%GN|#m<4R)OQ2nv78d+I)y z4a5hyH81wCp-6L^4APr=$!<(i;aa^g!PK}`X-t+M7Ec;4Fk{P zlp8l~Fz|d+C1;^2CUry+Phn|Lf4?O{iOOI7ZI?P7{p!Gy$iJaI(9w-pC!oJ#=-^{p^bs?0hil=z0WNqJQfpV?28F@=yN^0X>6% MUx88l;356`Z#5%AZU6uP diff --git a/results/approveApprovalHistoryPageResults.xlsx b/results/approveApprovalHistoryPageResults.xlsx deleted file mode 100644 index db5fd552e29c370689fd9904a415b8ade1696381..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21298 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 diff --git a/results/approveContentSubmissionsPageResults.xlsx b/results/approveContentSubmissionsPageResults.xlsx deleted file mode 100644 index 97ffab0690781f4c98f091d5861c153ae85a02e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21304 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 diff --git a/results/approvePageResults.xlsx b/results/approvePageResults.xlsx deleted file mode 100644 index dfe9a30f8e8b811367874b28afed6b87fc56ae34..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19984 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 AY5)KL diff --git a/results/approvePendingAlignmentsPageResults.xlsx b/results/approvePendingAlignmentsPageResults.xlsx deleted file mode 100644 index cb058af5182b4fc557e96c884de33cc8b4ca52dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19984 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 diff --git a/results/approveRejectionHistoryPageResults.xlsx b/results/approveRejectionHistoryPageResults.xlsx deleted file mode 100644 index d67e4aaf551a10ec267fbd15dd8baaa0bc7971c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21456 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 diff --git a/results/frameworkManagementPageResults.xlsx b/results/frameworkManagementPageResults.xlsx deleted file mode 100644 index 7c5c5e6df272ac141d93c27558767aa5eb8eb8af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23607 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 d0{v^hsf|aE?tbRy2K~ZMu8z&W^|$l^Io) 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 b=)DKVc=YhWkN*S#J%|6k3ZwY;F+Ke^qrZ)K diff --git a/results/reportSpecialtyReportsPageResults.xlsx b/results/reportSpecialtyReportsPageResults.xlsx deleted file mode 100644 index 619263009afd8ed6cc68db73aa3c2991bb294590..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21343 zcmeHP+m9^ASzi+qA)_c*0TCe~wMK#m;@z2^nZ2?*VRv@d$M(6b&aRIgBNS@7Yi9av zPj|b!XLdIM$#D=m!UBn45Ii9AfD|MISV|BUn16v6r0~XzFA)Uf7haH%;P+Mat!k?G z4k+Mbt*5&ByVqA=eRb(NcNmd}b3bXGgz@np z43C#iC;k%EY<>|XYsTZm3xlnOz0_)0Ja9tS3r1Uwmyh-r*BVxmvcP4281Sve8BZEt z?0x2$&4=7)DUgz}7bO;`1j$xooTkx6vza(!K4HmH81VpahG9HmDIVidGh)s$8}Vkl z)mmvnf|5p~r_i)saJL%q3$ER;j?N-*zL<769C{Al4V~$P2dROD&_5Y-o`NWgM?BqX zkV!;U(iA^7*{0Dn3)8+$VNw{0mx74LruhH4GIVZJh9o`n(V~SlnG&&el6noW1qgC&&Nz(+dmq_c`h8x+$;kqs*dW{38!;7D#?tgImGd7ymN648c8a3!d?4P%yRkyX&jF z1$_bFr}J=odwcyoyPziknBzcGDNB`RcYn>^$!S)AWO1H$zqQ=zs_+&1ojIA;cXoD` z*E3lpQ2`{2-8uNR)=GD~t-uQ)3BNoC-`&~n_g55n0VLs9=HT~N*H^kKyZ{>eUT{1I zO%1xgpHVMBhM|AQ2)+jJwN?gRLctpf?;;k%Fi7isZNeUh@jd_ukYaRTr3k`9=D>^l zY%+*FMhw^nXO%ay%1P#`h?kW(u@@oYz8Ep|h?3sN@BP`w?|s|)_`P@DfAc%Cj@h6Je&kJfV%_H_*28cD-GpIO$@w6@8phF>c?t#_ zgSLV6UOH9)@1HT>1h>Og<2{NIJWPPkPai9?9**N_>KQn{G@dAc_rlQM31g!HULsx< z3m;8`k(qfst-?KIY-Zx!XMxhRd(#L}Gj~eG_Wdze#60j>kRk;McxutR@R)Ohc3<*5 z#jf`}Ck~Tvm|9=*tR3bVO>*Q76h|tN?syZl%b7`MG__)zdylN0&^Kwl%V#PiIs_BR zitNrs7dzskrr_wNYSvoced3Y8(Rk*z*MN5ykA6k1ZPZAT(gBbc& zXure|uZ+!p&p(@}ka6lAn`qu;VOWLS4UhX{Hi=BIhh8wQ!oH9k!$p~O5F*)_@1*xa zwTI9%+JObN&Hc!uOtOp{7YBluy^$hP=^*rG8XLrVo`;J69-jF_#zmAtNLM2D#0$;~ z+rEdmEjfG=wznGF7{pAS=Z+Sv>)?I>L-a121_vCyV&3~diO`=!=*Iu~2wm5gZ$B=V zp%_t`5)zqfi_Cjcn|KdB-#?@|`Q1e1-U$XEcOR96Cze%sF%gT#C{j-b0|jmrGl65p zVfu=fjt|F-7Eo+4jT|Kz=}}@uA=YeKqS{ECm?HO2h2BrLrby0W@M)%kRz zAS0w2i8*b~s6zxU%dE4S5ruBoVP=z1m*!>*(L_*GxD_gsiN(AeCNES&WnoQZHWuYw%bv_ z5KJy7MQ05z^1mhpd_-+pJ{)obJl|fBg#>#{Y{Bv#n37H!2fjOB0Dpb(sBv%-`xI% zh{9TG;v(?{dOk*06`>bpmekFAg);c9uV<{TDZ*t2;L2DlBi5Y8?d4oJwBo$Rs4ViC z2p(l2fu; zK3Ly!7F6)nj7^eVroFFd>>`O$*(rVTHjSNGSh2ONt2H%RR_~&y8s_s5(J*48tGX8z z4j!YScd_a}_2uqV65&bogXka@-Zco_v#jVRa=?{dM{^j0^n-_dXnF2wKL02zA-j;= zA<0u@0ZnM+Xa!=&G-*%~Gk8Lkqh*2Iz8JZ{5S$UR3uLjNW+H(7u`F=Y)DG}6$V#oL zbLE!ugPWM_62hBJW}Nw4)?{*`cy2>o!({2{`6kOO1>?;-9(FimhN;(~h`$(gq^Ap) z)wY9Q{dT*XNTQfCSDY$PcZ0=giH#Wo z=k*RXxS?|phf(tA2%B;V{4Dtu;fXMe&}L3;AdZ- zhUw3L@a}JX_?u6fAH4e(ek@rx9?Rd4{@_hnm`vpFhfjW87Lr8%e(zh~$Z$k&$i(Pv zQm0U)p^DyS@)g8lHZJ@#SuOCSW6BEILCG5= z2l0bd2Z{%U0Mv`9qPK}r2&sOsj|Upus7xl@Y6LjkB2MQ*Sy9rH4@AF8P13$GS?hF|F=J8WpWUBM1{@p6bnYi>Tfr54D#|FT z6hdVuAMO(}wx$ZggQ@2u%`&I~n(k?77%{}BY~XW|kQQ8E6ju&rN5#vnMp?ecU2i&B zFQ5**Sty6JtwvdvP+igXWl+$9(EfM-{)GoWxv)TgpO-<%c+Tkh@u(noYvBm_#Py<) zeu~S*c6dPN$*hV*cX8qnd&SlPHtJQ>zKVLll4MRT6~v@gyJeSZDUx>!$*DB!wN>^z zT}AS}QygY-tpS=b;js$ZS3!-Esvz@{t}Jz1Yc-NC7m`wG*6XP3cd)EkvGLt-9L5u>fv}y!gDFmd_tk=~9L_$&#kd`_JA&Xrr^->?cfTZs^EAhU^fK{}+R zBKB28queTpN$!r_tug#sAvcv~y%m-H4$kye44+9Hp{rfN^ePRb3M$CF3f-j@d!~fqIMF_8t)Tpn@aJ^um5iu*GGBPRBZq<5PIc(c<+_v?B z8}(I1Za-vb49rTZLKu}?u1ihqa>N%!w3a^RqrR%-e@oO*S(w#SVN7av+Lgpo$-wL~ zZxBVOsb>zTuc~S6OE(Jt8UwSEst`sctJ$-vWSLvoGP$tz>;m zi$UAEq)DS|)=lMY(yiOA?TlsqVao)>)-w>)Uq&|Z@u#!1qwrVNE;cy6R(qO2Vv$3S&}ZrBfGG+GQ#t zis){7E`s{18i$<4&bUlNkf;yB)4Yu$A72TKLm%s4mue@CxKTk3#-!ltT3xQyF0&9( zgo1h+f_g>4Vr-V#WP%(Xvup=b)KM6F9G;jtB&}Eqzbuv#@O1v1MdM}GSCz-4?|NT)wl153BRgiYBbDxsC?%2SXo+b)wWxioV4XCLR(KxP+!&K6&VV> z0P8_hM|_>AxL_syr}oo&nnuj5kjl`g&{|!Zt5Y>a46S*Tg?8fah}4(voSO&MSC=u$dprV+?R$)wH zuP)cNLYZE)<+?;$PcKkk6&q4o52kbLYbuagP!+}`=vuqh|H~8s>!($LRFmy!Z^eq> zUZAb@^))E7yegl0dDoXZ%j=~-h#4%c?i!_&36K1&RxaOqBYdF1-Mu&tV=U}eA88{4 zdj^Lo0c92N6KDZiKH^ z`L>V4Bxq{!@QC?Sj$_Gq#;K~2IJayik?*DZo;YBI7g%lWhyLN%8%iI+@f4QrHc3oT z(GMr$yIMgD%f#>-QFKBc(|3#@M4L|c@UbyHG=;uRMPX4joTk&56BwCUQ?uN0l@=Ks z6OJ$rJeZD0Wsk5HDy(VjZ8g3+a0i1m$8{Em%;t;T^%cIz)|OWnJ5FcVX*sR-y3_ep z(EySbkkPCgS@UdD^Uww`$5&GL@^H8-n@y-Rgk^jdVNqNjE-TqL!9SN~lO77`u;nPk z#xAO&t583;kx>2|bz_Hu0F0WQYLoUTC|Ak!p4lwytaaMaUq5c`JhiYue_5x^H;8Vw zfuB>kwN86$`(?Rg2Qm7W%kPU%#gE2b@=A7FL$P<3?}cSPcu2<)U~sWlMq6jpH8wmH z#Jvf$)hk}*L6UBM(9Hef<7fZ!3 zFOvIkF3Y($HoWz@JD+dE;pp$j;BGY*s5b@8J9pwm}aVhCVDUryDaY0pZXL%`kCTw_y!f!es-`7(Qnd zr;Q0rJ_r;)!fdEVu|x&~B#-HatQ5s6Y_;rl#jb6-fr1K11f(E%p^A7!TX)HW;Q{ue z4HCm0ONoUHv|^r%BWyrZyu3oP6)J<1M!Q)ywieXB`;A|D_BD(j^!IGlzo>`bY!q># z4I)yqmcz-0gU?5<7=`jgV?ORkM{}KmWHgO^aeI#IG_iUlvYMv7WH)g>b<+-I38Q1sVNH_ zIzXjf&GIMz@c50N_>qML`lG8^ezA}9Nw@&y%jB}jFWsyu1dYp&=E}uGnEaC*i)4u; zH{xkhCgHWpmcUoCOm8zgM~m|f;4E)jLfbVk85W|DHd_q@z&s)}=`DtE1Kxmcl&Qs= z1@6)$S>&h4xRykhUjhP)&z2?(R~YOCbodD%bT5sW{_I@2h`t&|7i9=V7#9~WEdhU5 zUV>A@Ku%ZA)!=*%6XZ$$7X%rz3WG_cnFwF^;@T;yH)BNf!IvVE#GraJ#>g8QF{s{* z!6#;n(?xn?#yP3Qp*Lon$B|i=#}ThnM!YiVe-2JsV*u3GNhV&I*qnnCxw_S=-Gttn zt$=fB=-Wz@RuK(;oW%%Af6IHxzL0gq2e>6I_V7t1jcqbXZ|a%PmAGlWMw!}Y9hW-k zCHTvMy?TGy?FmAeouGe#9O4{r_4=}#h#-hvz_2{keYHkD-|XV3_<5X*WHnDFuEsrg zF>SJODUR@7kze1$vWCp|Jl=5dJWshXYlDO5iz>MYO);n=i+BoCgZldnkxEql)!%NY z)6uVrD~bFo_<@e@#5w`}6ALEek8a={o2n6)S{zRFCx^b=xdrKl}~R8 zD%IA~k@dBe68Ud_p%5Xz9#TivR|-nxpW9K^4Rl0(wpSwl(eC`*Psi4C`4am-_bb?W iXVlU4475ala>tmD9=!C!pC+JZ@ZVSA6n}R>PyYoGkF=!# diff --git a/results/reportViewQueuedReportsPageResults.xlsx b/results/reportViewQueuedReportsPageResults.xlsx deleted file mode 100644 index 0c1a1f4ebc3f3f44a2f7bda5e633bb1c7b88c9f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23861 zcmeHP-ES<(Rritwp+!+xB}fqxQZrIeP~w^C`5t3WWRLB=cdvb~vAuUUi(u*L?wRT9 zp6=f6p0S+(+H4S7u>vV!LGXaYL!=;~z)A^Xg_b`9ctJd{9}x*?UwA>{f#0d>ud1o` z9s63Kz}}U2s;f_(I=`w@r%qL!uA_UOc=|JI>A!D1_1o|K^^dKs(cjM^^TMsY654K5 zJNLu0k?)^XFJ^9)ayGw&l(w+L$nm|cie9Z(G}|+M%kd^#l^0I;*LxK$iVe>)T;H>| zDwlRt`O@H%&ukvst`Vb9GQ@d+zRl>WLUeQi31JwL@-u`&(nD(x3&S$n4E2?1lqp5Aj zU}}UDJKm~Lld!C)#(s2an@UYBOyf3%iP1=QE(m+9vHxEwL-RIeh~i5ZJ({%!f4-^- zTDMv~^~Iqb8(tq z8BRu7rTTuW-`&mlGXghWrrX=w8}8{DKSp4fCXjMjiacBUJ$)zTSs>!cW!}SjyWSG% z3;df)GWU0OcG~?!7S5Cr@nma>zE|(Gwi^OHBjWV!CHmIR_Hft{=ot~G?<~>pcl(`| zNY99-uH&68QB#NR?|*0`0k(m@U1^o)5Emo6@BoR zZ@&L`f1oDB2+9dR{G+$O|Gl?A{NvyM*S~m6LB1UtqayjKGqWS@zJ0D8`!ir;4I@f! zkHYJfIGq}fP{Npkw}SOvJQWD4{z#DZWE#$6M^W>==}aIz z^nG{750wpYkLoJ4@af!}s4EZWMY?0dSg7hA8lKR#d-DKRGgV5V?T1ra5c9}2ycjNs zXU7`7^UrKsf$qzWBed(GV}^d@k7Mo2j<#bs$|gB=MuH;ch3+^r^vk6RGrC%6o5P3N zj_;~a@7fEI5(C0u&I%vS*$_LmU7;DDGv=`|Q?WcX;O!JT=D>)jDj`oUL$gS?7scr5 ziS7E@o@Gaos?38BcniGm8L(H%Za;J{XCh@7J7+4M2Zrw#DR=#|;nbJ~D%umrn-*#B zMrTk_Lp$=}Y%CAbLth*r^o)KmywdJ|=#VFw+l|K?f)|{LAX2U%^kyC^#Cp#51^qp_ zbjOCxtPD)LV5w)0ca_<89oTJN!^dWOtFnzrOf`7!NXEL1?nlr>?;3OO$i}Ex*8Yzz z^v4#u@_*h!myPAyx68RHhLt9Vg!|ge^PZJD-ebpgPiRek5Ha67!USaPBa_OpZ52CP zhy_z5X(Xcpfo>8Stc(`=@rzD8J((J`fugfzih*X1F#svC=hg+AY+oY5JDCC_&AEObyHCT_j`| zT2p6zm#WYbK7z+} zW*Wg(WsH?BlCuDv7LhM#xD#xOnsLar_OWA;4bmKOU#(R-HZMvBj4+IYFp77LXv+JL zy-K>u^{6H;f1}+ZWxE{!3S+XG6wMw~H=!n?0_IPZYaj~-tIn;LiF|maHJhsD= zsdcW6+zqt<4xMBAEJn&O@oqvQF88%&MFTGH-JI^sAv zQ`Jlc_EZoL*p#v}aMy=IBmTCa6xI0u85Eihu!GRFs0U1J?uLd&BW0`Nhw;>h6$++~ zxgTQQXSM^{f*o4CM&sikh5d&1f`0j!<2=}~#zHVYb|zZrU^k!s4?4YZ77Uho~p`&-P>pyq-=~NWpiH(EcC}i3-@~z7x=|+6QH81;hN4=Ryq!T;Xj^!>*c4{*68n({5Uvbhun0SeDi}~#^Z#J zt5=V8h=R~IEEZKDo(8jMiH!ve=goo|EZ;l|{UCaHibJ^w`svMQ`?EOGOn>fyD|H~x z()bU>QnWi2jYnb(eGA(GzwqkZkALa?cYgPS-+QC>{yT5tN8@?ZDgXWOPhRJV*^K{w z@W$`(L=^Gg?|=K7Nf|a85-|pwG$;gVC}Xf0eT5HtogJ;3zUzk?>%(M`OsC|WVu+)H zWV3pVgA4bPXR~r#F?j|bprj4F2KIwp2eJp505pmyW3Y)?2(G@jj|ZCEC{0bcRq+tq z!XR+E$53P5y4103Wc4z}H7bF6M}BA_n5NhfJZrG&+GA2%cy&|yjr{=sANg_Y&ycVj zW8!;;i)1Y=ktD#@v=i^@rLn;KVqEB8%)itK)Yp`RKuMDG;}68Y$c^)UVz%1FIH}AC z0{8O%d^WOifJ|{eN#C+sQBMJk03{PDiF~+Eg>f{MF&@nw7jBjU26$Q*dBdBqQ`MKlrV~&;9(` z8vT8i8zE(!(ar5q#_rb45&VgpStB`$%ffNENAYA@XpeEsqHpXqS?mR~gg7%hM~7u; zEsaT|7kTGq?^D`cL{0dszwk<|bwLq&FqqiP7{GHUj6 zM|^o|N3nJi8)43rkqt#MMqyhbt6h<%QEznCb$z|wK5f)D+U<>ItJ-RIUKR`OiG{M4 z0u*xDI21}P26{%uF(8Po&~5i|$UiY+TZ?g;e6c+|)eaDGh_hnt2nY3I(VT5p!Ma5n=$sl}izR=?8~ zsvo+Jd8QrP0k(iJi7}NXD@Z|FV!@$UP${=aqLN$J%No9y$xW%npd(hlgP7hz!zU64 z7;4vOdXa|`f=IFq0m|JjYx;f$fl`Y>SAu|Px&UDZzJaA(`tuNT4r_nR{|YcnhqyY8 z5Qsbp;V-K-OXRPFCz7b(wTs46urfL=(71tQ$;F^20Yr8YA`Tw{*V1S|;mB zN@A|7%OJ%WliP`s4i$?I!M&&jYVk!HmH53*nW@n8nVKabzC2eWzbM1a%!R~64MePH z2}rvRTiqzrwS3~%`OK}$Q#bO9KyKe?NEN6-ibAMB>Wwn1sONJ&OQN^rSs(dDkR@vN zM7B|?LJd<8hoAKkevtQ7qJ}RD<$oC?%e>4 z$Vd%Fq)~yf&3zvUl!eQ7r`Pp$vg)(?7~ZqoK#dTzQ|rBexr1) zitXss4`oS+FS`a5=u}uVm5HxwpU2T{x2~;gd&84vU9Z1V*Q=fGFVdF#+?IC2h7wmb zGO=bQvUaP)vuotu080Xy>q4cSFN{we_5+UI-ye!tLf zWtc>MYD^-H3RAn+EK$a0?klh)I!*Q!kiQD14#Px)3?CC=cbdDccfFl#$E5_L#9xU~ zqETV&^-D44PDGRMM>J$70{N?8>;hxArvu}Ozl%e+1AJ6phDzk9MkUfLqiR+grDmj= zdlW2*onYCcK>jMIdW5P=+Q?27?s{gm43x-F4N9a@f$DThyDE1rn%uQ$%B}_SR{_;$ zphz8GoEovVx3Hr!P$EM$D3L}5s^2Y}$(p%~!IJ1H*~LKqDxmZ_p=uMVp^vZM@G<8^ zd*QC;n7EOl44%kZ4Ns(5hS#b#`t>pslDiaAAB`gUYm7Nmg7vb$$&(Yc4&<`$IaD#@UCSUFqv4~o1kwztU zuU^_KxzEw$`wvao=Rkf@Y)Gj+n9F{;M5Go}WTX_dSGMhgqwv&EN3tl8*kn7>TV|2> zJm~~?C{d~973*1+w_EM>3mZG^T!PN*mD2Ie5`I|<~r0^6( zf}F%eupQA=6?A&9MXyS+0kvW&Fv+iKkwPne{k65Pz43{)HTwG$53ML(7jpB6ij>Q( z1yo$PAwqGan2K5Y8F|%2+z-F8rX~l9>D^lBm{Wc!3J(^$u$C_$S(TS{iNGqyG(vJLzo_jq}pM?)K4fMMJ#R$vmJFHrslb-5Qj9AYsA+u-*-@ z%D1;&gb1Un*~3G&a%9hlm7lP$(X=RVop|42Ve=rw(s}5+CsSw4bp%1jMiN7W&(uJ` zGBDk-+frB#4*#Jy{H1S)bUOvnAzJDXSIE#qjp3~cfLYdf9?wIY$f%hmn0Xu>Z;{a% zm0^to4W^*?@rKX*S2rx>;}Z&E{{i z4&b~{7~Q&&bk8<*4~6yF`1T$5NsM=Sw=qa#w2W&62zB6}4CK|B=dec<#qN(%-GI;!}3iS9J$S^={&$6wnMM4neRT4oXZcidn=DdAy zXZphSFv2n}E6b%v>;vY%*M$R28ZrqT*L^DckVmob0P-?K&iq7nXNvxpgN z5R<%WKAmis_$c_ARw#8emhBE#G|S9b2J_HmcOqJ54J$$;W|ld29O-<)DltJ zh!;`rgqMQNiLcc%gU#gYC`7HIW`2hz`mTb-FcXE)Y*kx_tqUtICFa6$Om&vN|(xG1Z<&A?+Zc+XmJA7gx$f{6#am&P^!HIJ-`>it@Ys zYQvHW_;Te+1XtHEgP-Jnfw56T7|jByiEw8NE)%7Eb%}sJ;}=BYB`9BAV&aUIB`9BA z!k(#1T&&X@b(!;{8yBTOBw+AWs2b@J8C&OQLVs^-jDO`VDB z)t;)DwAfgwMrbedub-r46`t)?bwj~ZKjn$5Rw#J7sgjCNW0N|(h^MeLD8Ho|u0-Kq z`JL4=ANc~{oXNkVKJby1SY{x9GMY2^FO4zCl~OJ$f9RDL{o3bP(QKdh?=P?YT|SYsX4|^yuD?{{#^|ga5t?rTEs%^z`3VKXv2) diff --git a/results/uploadImportAlignmentsPageResults.xlsx b/results/uploadImportAlignmentsPageResults.xlsx deleted file mode 100644 index e5fa5c67912d7fd1c3c3c9223805d42898340a98..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21459 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 PIsEr^7{&Il(bIneyt~No diff --git a/results/uploadSubmitAResourcePageResults.xlsx b/results/uploadSubmitAResourcePageResults.xlsx deleted file mode 100644 index 4206a92758a38153dbd591c0ae476b32cf7a6e71..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18726 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 V-T(2QAfV^)@9Qv%Zy(Upe*@rUuqyxn diff --git a/tests/ActivityReport/ActivityReportPage.js b/tests/ActivityReport/ActivityReportPage.js index 3870ac5..39174a5 100644 --- a/tests/ActivityReport/ActivityReportPage.js +++ b/tests/ActivityReport/ActivityReportPage.js @@ -934,7 +934,7 @@ const takeScreenshot = async (driver, stepIndex, stepDescription) => { return screenshotPath; }; -const resultsFile = path.join('results', 'activityReportPageResults.xlsx'); +const resultsFile = path.join('results', 'activityReportPage.xlsx'); const clearOldResults = () => { //Remove old screenshots diff --git a/tests/Align/alignAutoAlignPage.js b/tests/Align/alignAutoAlignPage.js index ce0544a..37aacbe 100644 --- a/tests/Align/alignAutoAlignPage.js +++ b/tests/Align/alignAutoAlignPage.js @@ -2238,7 +2238,7 @@ const takeScreenshot = async (driver, stepIndex, stepDescription) => { return screenshotPath; }; -const resultsFile = path.join('results', 'alignAutoAlignPageResults.xlsx'); +const resultsFile = path.join('results', 'alignAutoAlignPage.xlsx'); const clearOldResults = () => { //Remove old screenshots diff --git a/tests/Align/alignContentPage.js b/tests/Align/alignContentPage.js index 107a675..d9cefcc 100644 --- a/tests/Align/alignContentPage.js +++ b/tests/Align/alignContentPage.js @@ -1389,7 +1389,7 @@ const takeScreenshot = async (driver, stepIndex, stepDescription) => { return screenshotPath; }; -const resultsFile = path.join('results', 'alignContentPageResults.xlsx'); +const resultsFile = path.join('results', 'alignContentPage.xlsx'); const clearOldResults = () => { //Remove old screenshots diff --git a/tests/Align/alignStandardsPage.js b/tests/Align/alignStandardsPage.js index 4ee7a87..2bd2f00 100644 --- a/tests/Align/alignStandardsPage.js +++ b/tests/Align/alignStandardsPage.js @@ -1882,7 +1882,7 @@ const takeScreenshot = async (driver, stepIndex, stepDescription) => { return screenshotPath; }; -const resultsFile = path.join('results', 'alignStandardsPageResults.xlsx'); +const resultsFile = path.join('results', 'alignStandardsPage.xlsx'); const clearOldResults = () => { //Remove old screenshots diff --git a/tests/Approve/approveApprovalHistoryPage.js b/tests/Approve/approveApprovalHistoryPage.js index 4dbe657..8766fe2 100644 --- a/tests/Approve/approveApprovalHistoryPage.js +++ b/tests/Approve/approveApprovalHistoryPage.js @@ -1436,7 +1436,7 @@ const takeScreenshot = async (driver, stepIndex, stepDescription) => { return screenshotPath; }; -const resultsFile = path.join('results', 'approveApprovalHistoryPageResults.xlsx'); +const resultsFile = path.join('results', 'approveApprovalHistoryPage.xlsx'); const clearOldResults = () => { //Remove old screenshots diff --git a/tests/Approve/approveContentSubmissionsPage.js b/tests/Approve/approveContentSubmissionsPage.js index 07afb0c..2cd6ad3 100644 --- a/tests/Approve/approveContentSubmissionsPage.js +++ b/tests/Approve/approveContentSubmissionsPage.js @@ -1436,7 +1436,7 @@ const takeScreenshot = async (driver, stepIndex, stepDescription) => { return screenshotPath; }; -const resultsFile = path.join('results', 'approveContentSubmissionsPageResults.xlsx'); +const resultsFile = path.join('results', 'approveContentSubmissionsPage.xlsx'); const clearOldResults = () => { //Remove old screenshots diff --git a/tests/Approve/approvePendingAlignmentsPage.js b/tests/Approve/approvePendingAlignmentsPage.js index c61007b..08c7c4a 100644 --- a/tests/Approve/approvePendingAlignmentsPage.js +++ b/tests/Approve/approvePendingAlignmentsPage.js @@ -1054,7 +1054,7 @@ const takeScreenshot = async (driver, stepIndex, stepDescription) => { return screenshotPath; }; -const resultsFile = path.join('results', 'approvePendingAlignmentsPageResults.xlsx'); +const resultsFile = path.join('results', 'approvePendingAlignmentsPage.xlsx'); const clearOldResults = () => { //Remove old screenshots diff --git a/tests/Approve/approveRejectionHistoryPage.js b/tests/Approve/approveRejectionHistoryPage.js index aba9779..a975f0a 100644 --- a/tests/Approve/approveRejectionHistoryPage.js +++ b/tests/Approve/approveRejectionHistoryPage.js @@ -1436,7 +1436,7 @@ const takeScreenshot = async (driver, stepIndex, stepDescription) => { return screenshotPath; }; -const resultsFile = path.join('results', 'approveRejectionHistoryPageResults.xlsx'); +const resultsFile = path.join('results', 'approveRejectionHistoryPage.xlsx'); const clearOldResults = () => { //Remove old screenshots diff --git a/tests/Frameworks/frameworkManagementPage.js b/tests/Frameworks/frameworkManagementPage.js index 342016e..c09306a 100644 --- a/tests/Frameworks/frameworkManagementPage.js +++ b/tests/Frameworks/frameworkManagementPage.js @@ -2614,7 +2614,7 @@ const takeScreenshot = async (driver, stepIndex, stepDescription) => { return screenshotPath; }; -const resultsFile = path.join('results', 'frameworkManagementPageResults.xlsx'); +const resultsFile = path.join('results', 'frameworkManagementPage.xlsx'); const clearOldResults = () => { //Remove old screenshots diff --git a/tests/Report/reportBuildYourReportPage.js b/tests/Report/reportBuildYourReportPage.js index 229e640..d5bb1a7 100644 --- a/tests/Report/reportBuildYourReportPage.js +++ b/tests/Report/reportBuildYourReportPage.js @@ -1637,7 +1637,7 @@ const takeScreenshot = async (driver, stepIndex, stepDescription) => { return screenshotPath; }; -const resultsFile = path.join('results', 'reportBuildYourReportPageResults.xlsx'); +const resultsFile = path.join('results', 'reportBuildYourReportPage.xlsx'); const clearOldResults = () => { //Remove old screenshots diff --git a/tests/Report/reportSpecialtyReportsPage.js b/tests/Report/reportSpecialtyReportsPage.js index 530eace..a3cdd83 100644 --- a/tests/Report/reportSpecialtyReportsPage.js +++ b/tests/Report/reportSpecialtyReportsPage.js @@ -1203,7 +1203,7 @@ const takeScreenshot = async (driver, stepIndex, stepDescription) => { return screenshotPath; }; -const resultsFile = path.join('results', 'reportSpecialtyReportsPageResults.xlsx'); +const resultsFile = path.join('results', 'reportSpecialtyReportsPage.xlsx'); const clearOldResults = () => { //Remove old screenshots diff --git a/tests/Report/reportViewQueuedReportsPage.js b/tests/Report/reportViewQueuedReportsPage.js index b576154..1feca21 100644 --- a/tests/Report/reportViewQueuedReportsPage.js +++ b/tests/Report/reportViewQueuedReportsPage.js @@ -1605,7 +1605,7 @@ const takeScreenshot = async (driver, stepIndex, stepDescription) => { return screenshotPath; }; -const resultsFile = path.join('results', 'reportViewQueuedReportsPageResults.xlsx'); +const resultsFile = path.join('results', 'reportViewQueuedReportsPage.xlsx'); const clearOldResults = () => { //Remove old screenshots diff --git a/tests/Upload/uploadBatchUpload.js b/tests/Upload/uploadBatchUpload.js index ae7e3db..99fc29b 100644 --- a/tests/Upload/uploadBatchUpload.js +++ b/tests/Upload/uploadBatchUpload.js @@ -1416,7 +1416,7 @@ const takeScreenshot = async (driver, stepIndex, stepDescription) => { return screenshotPath; }; -const resultsFile = path.join('results', 'uploadBatchUploadPageResults.xlsx'); +const resultsFile = path.join('results', 'uploadBatchUploadPage.xlsx'); const clearOldResults = () => { //Remove old screenshots diff --git a/tests/Upload/uploadImportAlignmentsPage.js b/tests/Upload/uploadImportAlignmentsPage.js index 4f695d7..9d2d374 100644 --- a/tests/Upload/uploadImportAlignmentsPage.js +++ b/tests/Upload/uploadImportAlignmentsPage.js @@ -1429,7 +1429,7 @@ const takeScreenshot = async (driver, stepIndex, stepDescription) => { return screenshotPath; }; -const resultsFile = path.join('results', 'uploadImportAlignmentsPageResults.xlsx'); +const resultsFile = path.join('results', 'uploadImportAlignmentsPage.xlsx'); const clearOldResults = () => { //Remove old screenshots diff --git a/tests/Upload/uploadSubmitAResourcePage.js b/tests/Upload/uploadSubmitAResourcePage.js index 56a48b9..b16e200 100644 --- a/tests/Upload/uploadSubmitAResourcePage.js +++ b/tests/Upload/uploadSubmitAResourcePage.js @@ -872,7 +872,7 @@ const takeScreenshot = async (driver, stepIndex, stepDescription) => { return screenshotPath; }; -const resultsFile = path.join('results', 'uploadSubmitAResourcePageResults.xlsx'); +const resultsFile = path.join('results', 'uploadSubmitAResourcePage.xlsx'); const clearOldResults = () => { //Remove old screenshots diff --git a/tests/dashboardMyStandards.js b/tests/dashboardMyStandards.js deleted file mode 100644 index 8bfa960..0000000 --- a/tests/dashboardMyStandards.js +++ /dev/null @@ -1,8021 +0,0 @@ -import { Builder, By, Key, until, Select, Browser } from 'selenium-webdriver'; -import { Options as ChromeOptions } from 'selenium-webdriver/chrome.js'; -import fs from 'fs'; -import XLSX from 'xlsx'; -import path from 'path'; -import { myStandardsSearch_AlignedContent } from './myStandardsSearchAlignedContent.js'; - -const dashboardMyStandards = (req, res) => { - res.send('

ExACT Automated Test Script: DASHBOARD - My Standards Widget(dashboardMyStandards) | Initiated

'); - (async function example() { - let driver = await new Builder() - .forBrowser('chrome') - .setChromeOptions( - new ChromeOptions() - .addArguments('--disable-features=MediaRouter') - .addArguments('--disable-extensions') - .addArguments('--disable-background-networking') - .addArguments('--log-level=3') - ) - .build(); - let testStatus = 'Failed'; - let workbook; - let worksheet; - const startTime = new Date().toISOString(); - -const steps = [ - { description: 'Navigate to ExACT Landing Page', action: async () => await driver.navigate().to('https://correlation.edgate.com/exact/login.php') }, - { description: 'Expand browser', action: async () => await driver.manage().window().maximize() }, - - //Login - { - description: 'Login', - action: async () => { - const multipleChecks = 'Log In'; - console.log('------------->| MY STANDARDS WIDGET |<-------------'); - const errors = []; - - await driver.findElement(By.css('.form-control:nth-child(2)')).sendKeys('exact_juan'); - await driver.findElement(By.css('.passfield')).sendKeys('Edgate1!'); - await driver.findElement(By.css('.login')).click(); - console.log('----->| NEXT ACTION: Entered credentials and logged in'); - - //Wait for page readyState - await driver.wait(async () => { - const readyState = await driver.executeScript('return document.readyState'); - return readyState === 'complete'; - }, 30000, 'ExACT Dashboard did not fully load within 30 seconds'); - - //Wait for the dashboard container to exist in DOM - await driver.wait( - until.elementLocated(By.css('.gap-idle-wrap > img')), - 30000, - 'Dashboard image did not appear within 30 seconds' - ); - - //Wait for it to be visible - await driver.wait(async () => { - try { - const img = await driver.findElement(By.css('.gap-idle-wrap > img')); - return await img.isDisplayed(); - } catch (e) { - return false; - } - }, 30000, 'Dashboard image did not become visible within 30 seconds'); - - //Wait for any loading spinners to disappear - await driver.wait(async () => { - try { - const spinners = await driver.findElements(By.css('.spinner-border')); - for (const spinner of spinners) { - if (await spinner.isDisplayed()) return false; - } - return true; - } catch (e) { - return true; - } - }, 30000, 'Loading spinners did not disappear within 30 seconds'); - - //Wait for the slowest resource to complete - await driver.wait(async () => { - const completed = await driver.executeScript(` - const entries = performance.getEntriesByType('resource'); - return entries.some(entry => - entry.name.includes('content_sets.php') && - entry.responseEnd > 0 - ); - `); - return completed; - }, 30000, 'My Content widget (content_sets.php) did not complete loading within 30 seconds'); - console.log('Passed: My Content widget (content_sets.php) loaded successfully - Dashboard fully loaded'); - - //Final sleep to allow any remaining dynamic content to settle - await driver.sleep(2000); - - console.log('Passed: ExACT Dashboard loaded successfully'); - - if (errors.length > 0) { - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - throw new Error(errors.join('\n')); - } - } - }, - - //Dashboard title - { - description: 'Validate dashboard title text, size, and color', - action: async () => { - const multipleChecks = 'Dashboard title'; - const element = await driver.findElement(By.css('.e-heading')); - - //Get text, font, size, and color - const elementText = await element.getText(); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Correlation Dashboard') { - console.log('Passed: Dashboard title text matched as expected'); - } else { - errors.push(`Expected: "Correlation Dashboard"; Actual: "${elementText}"`); - } - - //font - if (elementFont === `"DM Serif Display", serif`) { - console.log('Passed: Dashboard title font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard title font-family "DM Serif Display, serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '32px') { - console.log('Passed: Dashboard title text font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard title text font-size "32px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(40, 39, 90, 1)') { - console.log('Passed: Dashboard title text color matched as expected'); - } else { - errors.push(`Expected: Dashboard title text color: "rgba(40, 39, 90, 1)"; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //MY STANDARDS WIDGET - //Dashboard - My Standards Widget title (active) - { - description: 'Validate Dashboard Semantic Standards Comparison Widget title text, color, and size', - action: async () => { - const multipleChecks = 'My Standards Widget title (active)'; - const element = await driver.findElement(By.css('#mystd-tab')); - - //Get text, font, size, and color - const elementText = await element.getText(); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'My Standards') { - console.log('Passed: Dashboard - Semantic Standards Comparison Widget title matched as expected'); - } else { - errors.push(`Expected: Dashboard - "Semantic Standards Comparison"; Actual: "${elementText}"`); - } - - //font - if (elementFont === `Poppins, sans-serif`) { - console.log('Passed: Dashboard - Semantic Standards Comparison Widget font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - Semantic Standards Comparison Widget font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '15px') { - console.log('Passed: Dashboard - Semantic Standards Comparison Widget title text font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - Semantic Standards Comparison Widget title text font-size "15px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(40, 39, 90, 1)') { - console.log('Passed: Dashboard - Semantic Standards Comparison Widget title text color matched as expected'); - } else { - errors.push(`Expected: Dashboard - Semantic Standards Comparison Widget title text color "rgba(40, 39, 90, 1)"; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Dashboard - Other Available Stndards tab title - { - description: 'Validate Dashboard - Other Available Stndards tab title text, color, and size', - action: async () => { - const multipleChecks = 'Other Available Stndards tab title'; - const element = await driver.findElement(By.css('#availstd-tab')); - - //Get text, font, size, and color - const elementText = await element.getText(); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Other Available Standards') { - console.log('Passed: Dashboard - Other Available Standards tab title matched as expected'); - } else { - errors.push(`Expected: Dashboard - "Other Available Standards"; Actual: "${elementText}"`); - } - - //font - if (elementFont === `Poppins, sans-serif`) { - console.log('Passed: Dashboard - Other Available Standards tab title font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards tab title font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '15px') { - console.log('Passed: Dashboard - Other Available Standards tab title text font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards tab title text font-size "15px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(182, 186, 181, 1)') { - console.log('Passed: Dashboard - Other Available Standards tab title text color matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards tab title text color "rgba(182, 186, 181, 1)"'; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Dashboard - My Standards dropdown - { - description: 'Validate Dashboard - My Standards dropdown list and value', - action: async () => { - const multipleChecks = 'My Standards dropdown list'; - const elementDropdown = await driver.findElement(By.css('#stdparent')); - const selectedOption = await elementDropdown.findElement(By.css('option:checked')); - - const elementText = await selectedOption.getText(); - const elementFont = await selectedOption.getCssValue('font-family'); - const elementSize = await selectedOption.getCssValue('font-size'); - const elementColor = await selectedOption.getCssValue('color'); - - const options = await elementDropdown.findElements(By.css('option')); - - //Track all errors - const errors = []; - - //text - if (elementText === 'United States Standards') { - console.log('Passed: Dashboard - My Standards dropdown text matched as expected'); - } else { - throw new Error(`Expected: Dashboard - My Standards: "United States Standards"; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: Dashboard - My Standards dropdown font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards dropdown font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '13px') { - console.log('Passed: Dashboard - My Standards dropdown font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards dropdown font-size "13px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(40, 39, 90, 1)') { - console.log('Passed: Dashboard - My Standards dropdown color matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards dropdown color: "rgba(40, 39, 90, 1)"; Actual: "${elementColor}"`); - } - - const expected = [ - 'ACTFL', - 'Australia', - 'California', - 'Canada', - 'Common Core Standards', - 'Creating Org', - 'Demo Client Standards', - 'Demo Standards', - 'New Folder', - 'QA Client Test Frameworks', - 'United States Standards', - 'WIDA' - ]; - - const actual = []; - - for (const opt of options) { - const text = (await opt.getText()).trim(); - actual.push(text); - } - - if (JSON.stringify(actual) === JSON.stringify(expected)) { - console.log('Passed: Dashboard - My Standards Dropdown list matched as expected'); - } else { - throw new Error(`Expected: Dashboard - My Standards Dropdown list: ${JSON.stringify(expected)}, Actual: ${JSON.stringify(actual)}`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Dashboard - My Standards Organization column title - { - description: 'Validate Dashboard - My Standards Organization column title, text, and font size', - action: async () => { - const multipleChecks = 'My Standards Organization column title' - const element = await driver.findElement(By.css('.table:nth-child(2) th:nth-child(1)')); - - //Get text, font, size, and color - const elementText = await element.getText(); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Organization') { - console.log('Passed: Dashboard - My Standards Organization column title matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards "Organization" column title; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: Dashboard - My Standards Organization column title font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Organization column title font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '14px') { - console.log('Passed: Dashboard - My Standards Organization column title text font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Organization column title text font-size "14px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(94, 105, 116, 1)') { - console.log('Passed: Dashboard - My Standards Organization column title text color matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Organization column title text color "rgba(94, 105, 116, 1)"'; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Dashboard - My Standards Export column title - { - description: 'Validate Dashboard - My Standards Export column title, text, and font size', - action: async () => { - const multipleChecks = 'My Standards Export column title'; - const element = await driver.findElement(By.css('.table:nth-child(2) > thead .text-center:nth-child(2)')); - - //Get text, font, size, and color - const elementText = await element.getText(); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Export') { - console.log('Passed: Dashboard - My Standards Export column title matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards "Export" column title; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: Dashboard - My Standards Export column title font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Export column title font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '14px') { - console.log('Passed: Dashboard - My Standards Export column title text font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Export column title text font-size "14px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(94, 105, 116, 1)') { - console.log('Passed: Dashboard - My Standards Export column title text color matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Export column title text color "rgba(94, 105, 116, 1)"'; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Dashboard - My Standards Manage column title - { - description: 'Validate Dashboard - My Standards Manage column title, text, and font size', - action: async () => { - const multipleChecks = 'My Standards Manage column title'; - const element = await driver.findElement(By.css('.text-center:nth-child(3)')); - - //Get text, font, size, and color - const elementText = await element.getText(); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Manage') { - console.log('Passed: Dashboard - My Standards Manage column title matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards "Manage" column title; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: Dashboard - My Standards Manage column title font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Manage column title font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '14px') { - console.log('Passed: Dashboard - My Standards Manage column title text font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Manage column title text font-size "14px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(94, 105, 116, 1)') { - console.log('Passed: Dashboard - My Standards Manage column title text color matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Manage column title text color "rgba(94, 105, 116, 1)"'; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Dashboard - My Standards More Info column title - { - description: 'Validate Dashboard - My Standards More Info column title, text, and font size', - action: async () => { - const multipleChecks = 'My Standards More Info column title'; - const element = await driver.findElement(By.css('.table-sm > thead .text-center:nth-child(4)')); - - //Get text, font, size, and color - const elementText = await element.getText(); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'More Info') { - console.log('Passed: Dashboard - My Standards More Info column title matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards "More Info" column title; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: Dashboard - My Standards More Info column title font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards More Info column title font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '14px') { - console.log('Passed: Dashboard - My Standards More Info column title text font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards More Info column title text font-size "14px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(94, 105, 116, 1)') { - console.log('Passed: Dashboard - My Standards More Info column title text color matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards More Info column title text color "rgba(94, 105, 116, 1)"'; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Dashboard - My Standards View column title - { - description: 'Validate Dashboard - My Standards View column title, text, and font size', - action: async () => { - const multipleChecks = 'My Standards View column title'; - const element = await driver.findElement(By.css('thead .text-center:nth-child(5)')); - - //Get text, font, size, and color - const elementText = await element.getText(); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'View') { - console.log('Passed: Dashboard - My Standards View column title matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards "View" column title; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: Dashboard - My Standards View column title font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards View column title font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '14px') { - console.log('Passed: Dashboard - My Standards View column title text font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards View column title text font-size "14px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(94, 105, 116, 1)') { - console.log('Passed: Dashboard - My Standards View column title text color matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards View column title text color "rgba(94, 105, 116, 1)"'; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Dashboard - My Standards = Alabama - { - description: 'Validate Dashboard - My Standards Organization = Alabama Standards text', - action: async () => { - const multipleChecks = 'My Standards Organization - Alabama'; - const element = await driver.findElement(By.css('#stdbody > tr:nth-child(1) > td:nth-child(1)')); - - //Get text, font, color, and size - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - const elementExportIcon = await driver.findElement(By.css('#stdbody > tr:nth-child(1) > .text-center:nth-child(2) img')); - const elementMoreInfoIconTooltip = await driver.findElement(By.css('#stdbody > tr:nth-child(1) > td:nth-child(4) > a')).getAttribute('title'); - const elementViewIcon = await driver.findElement(By.css('tr:nth-child(1) > .text-center:nth-child(5) img')); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Alabama') { - console.log("Passed: Dashboard - My Standards Alabama text matched as expected"); - } else { - throw new Error(`Expected: Dashboard - My Standards text: "Alabama"; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: Dashboard - My Standards Alabama text font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Alabama text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '14.3px') { - console.log('Passed: Dashboard - My Standards Alabama text font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Alabama text font-size "14.3px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(33, 37, 41, 1)') { - console.log('Passed: Dashboard - My Standards Alabama text color matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Alabama text color: "rgba(33, 37, 41, 1)"; Actual: "${elementColor}"`); - } - - //export icon - if (elementExportIcon) { - console.log('Passed: Dashboard - My Standards Alabama - Export icon is present'); - } else { - errors.push('Expected: Dashboard - My Standards Alabama - Export icon not found'); - } - - //more info icon tool-tip - if (elementMoreInfoIconTooltip === 'View Detail Information') { - console.log('Passed: Dashboard - My Standards Alabama icon tool-tip text matched as expected'); - } else { - errors.push(`Expected: ashboard - My Standards Alabama: "View Detail Information"; Actual: "${elementMoreInfoIconTooltip}"`); - } - - //view icon - if (elementViewIcon) { - console.log('Passed: Dashboard - My Standards Alabama - View icon is present'); - } else { - errors.push('Expected: Dashboard - My Standards Alabama - View icon not found'); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Dashboard - My Standards = Arizona - { - description: 'Validate Dashboard - My Standards Organization = Arizona Standards text', - action: async () => { - const multipleChecks = 'My Standards Organization - Arizona'; - const element = await driver.findElement(By.css('#stdbody > tr:nth-child(2) > td:nth-child(1)')); - - //Get text, font, color, and size - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - const elementExportIcon = await driver.findElement(By.css('#stdbody > tr:nth-child(2) > .text-center:nth-child(2) img')); - const elementMoreInfoIconTooltip = await driver.findElement(By.css('#stdbody > tr:nth-child(2) > td:nth-child(4) > a')).getAttribute('title'); - const elementViewIcon = await driver.findElement(By.css('tr:nth-child(2) > .text-center:nth-child(5) img')); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Arizona') { - console.log("Passed: Dashboard - My Standards Arizona text matched as expected"); - } else { - throw new Error(`Expected: Dashboard - My Standards text: "Arizona"; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: Dashboard - My Standards Arizona text font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Arizona text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '14.3px') { - console.log('Passed: Dashboard - My Standards Arizona text font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Arizona text font-size "14.3px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(33, 37, 41, 1)') { - console.log('Passed: Dashboard - My Standards Arizona text color matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Arizona text color: "rgba(33, 37, 41, 1)"; Actual: "${elementColor}"`); - } - - //export icon - if (elementExportIcon) { - console.log('Passed: Dashboard - My Standards Arizona - Export icon is present'); - } else { - errors.push('Expected: Dashboard - My Standards Arizona - Export icon not found'); - } - - //more info icon tool-tip - if (elementMoreInfoIconTooltip === 'View Detail Information') { - console.log('Passed: Dashboard - My Standards Arizona icon tool-tip text matched as expected'); - } else { - errors.push(`Expected: ashboard - My Standards Arizona: "View Detail Information"; Actual: "${elementMoreInfoIconTooltip}"`); - } - - //view icon - if (elementViewIcon) { - console.log('Passed: Dashboard - My Standards Arizona - View icon is present'); - } else { - errors.push('Expected: Dashboard - My Standards Arizona - View icon not found'); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Dashboard - My Standards = California - { - description: 'Validate Dashboard - My Standards Organization = California Standards text', - action: async () => { - const multipleChecks = 'My Standards Organization - California'; - const element = await driver.findElement(By.css('#stdbody > tr:nth-child(3) > td:nth-child(1)')); - - //Get text, font, color, and size - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - const elementExportIcon = await driver.findElement(By.css('#stdbody > tr:nth-child(3) > .text-center:nth-child(2) img')); - const elementMoreInfoIconTooltip = await driver.findElement(By.css('#stdbody > tr:nth-child(3) > td:nth-child(4) > a')).getAttribute('title'); - const elementViewIcon = await driver.findElement(By.css('tr:nth-child(3) > .text-center:nth-child(5) img')); - - //Track all errors - const errors = []; - - //text - if (elementText === 'California') { - console.log("Passed: Dashboard - My Standards California text matched as expected"); - } else { - throw new Error(`Expected: Dashboard - My Standards text: "California"; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: Dashboard - My Standards California text font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards California text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '14.3px') { - console.log('Passed: Dashboard - My Standards California text font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards California text font-size "14.3px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(33, 37, 41, 1)') { - console.log('Passed: Dashboard - My Standards California text color matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards California text color: "rgba(33, 37, 41, 1)"; Actual: "${elementColor}"`); - } - - //export icon - if (elementExportIcon) { - console.log('Passed: Dashboard - My Standards California - Export icon is present'); - } else { - errors.push('Expected: Dashboard - My Standards California - Export icon not found'); - } - - //more info icon tool-tip - if (elementMoreInfoIconTooltip === 'View Detail Information') { - console.log('Passed: Dashboard - My Standards California icon tool-tip text matched as expected'); - } else { - errors.push(`Expected: ashboard - My Standards California: "View Detail Information"; Actual: "${elementMoreInfoIconTooltip}"`); - } - - //view icon - if (elementViewIcon) { - console.log('Passed: Dashboard - My Standards California - View icon is present'); - } else { - errors.push('Expected: Dashboard - My Standards California - View icon not found'); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Dashboard - My Standards = Florida - { - description: 'Validate Dashboard - My Standards Organization = Florida Standards text', - action: async () => { - const multipleChecks = 'My Standards Organization - Florida'; - const element = await driver.findElement(By.css('#stdbody > tr:nth-child(4) > td:nth-child(1)')); - - //Get text, font, color, and size - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - const elementExportIcon = await driver.findElement(By.css('#stdbody > tr:nth-child(4) > .text-center:nth-child(2) img')); - const elementMoreInfoIconTooltip = await driver.findElement(By.css('#stdbody > tr:nth-child(4) > td:nth-child(4) > a')).getAttribute('title'); - const elementViewIcon = await driver.findElement(By.css('tr:nth-child(4) > .text-center:nth-child(5) img')); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Florida') { - console.log("Passed: Dashboard - My Standards Florida text matched as expected"); - } else { - throw new Error(`Expected: Dashboard - My Standards text: "Florida"; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: Dashboard - My Standards Florida text font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Florida text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '14.3px') { - console.log('Passed: Dashboard - My Standards Florida text font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Florida text font-size "14.3px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(33, 37, 41, 1)') { - console.log('Passed: Dashboard - My Standards Florida text color matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Florida text color: "rgba(33, 37, 41, 1)"; Actual: "${elementColor}"`); - } - - //export icon - if (elementExportIcon) { - console.log('Passed: Dashboard - My Standards Florida - Export icon is present'); - } else { - errors.push('Expected: Dashboard - My Standards Florida - Export icon not found'); - } - - //more info icon tool-tip - if (elementMoreInfoIconTooltip === 'View Detail Information') { - console.log('Passed: Dashboard - My Standards Florida icon tool-tip text matched as expected'); - } else { - errors.push(`Expected: ashboard - My Standards Florida: "View Detail Information"; Actual: "${elementMoreInfoIconTooltip}"`); - } - - //view icon - if (elementViewIcon) { - console.log('Passed: Dashboard - My Standards Florida - View icon is present'); - } else { - errors.push('Expected: Dashboard - My Standards Florida - View icon not found'); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Dashboard - My Standards = Georgia - { - description: 'Validate Dashboard - My Standards Organization = Georgia Standards text', - action: async () => { - const multipleChecks = 'My Standards Organization - Georgia'; - const element = await driver.findElement(By.css('#stdbody > tr:nth-child(5) > td:nth-child(1)')); - - //Get text, font, color, and size - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - const elementExportIcon = await driver.findElement(By.css('#stdbody > tr:nth-child(5) > .text-center:nth-child(2) img')); - const elementMoreInfoIconTooltip = await driver.findElement(By.css('#stdbody > tr:nth-child(5) > td:nth-child(4) > a')).getAttribute('title'); - const elementViewIcon = await driver.findElement(By.css('tr:nth-child(5) > .text-center:nth-child(5) img')); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Georgia') { - console.log("Passed: Dashboard - My Standards Georgia text matched as expected"); - } else { - throw new Error(`Expected: Dashboard - My Standards text: "Georgia"; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: Dashboard - My Standards Georgia text font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Georgia text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '14.3px') { - console.log('Passed: Dashboard - My Standards Georgia text font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Georgia text font-size "14.3px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(33, 37, 41, 1)') { - console.log('Passed: Dashboard - My Standards Georgia text color matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Georgia text color: "rgba(33, 37, 41, 1)"; Actual: "${elementColor}"`); - } - - //export icon - if (elementExportIcon) { - console.log('Passed: Dashboard - My Standards Georgia - Export icon is present'); - } else { - errors.push('Expected: Dashboard - My Standards Georgia - Export icon not found'); - } - - //more info icon tool-tip - if (elementMoreInfoIconTooltip === 'View Detail Information') { - console.log('Passed: Dashboard - My Standards Georgia icon tool-tip text matched as expected'); - } else { - errors.push(`Expected: ashboard - My Standards Georgia: "View Detail Information"; Actual: "${elementMoreInfoIconTooltip}"`); - } - - //view icon - if (elementViewIcon) { - console.log('Passed: Dashboard - My Standards Georgia - View icon is present'); - } else { - errors.push('Expected: Dashboard - My Standards Georgia - View icon not found'); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Dashboard - My Standards = Illinois - { - description: 'Validate Dashboard - My Standards Organization = Illinois Standards text', - action: async () => { - const multipleChecks = 'My Standards Organization - Illinois'; - const element = await driver.findElement(By.css('#stdbody > tr:nth-child(6) > td:nth-child(1)')); - - //Get text, font, color, and size - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - const elementExportIcon = await driver.findElement(By.css('#stdbody > tr:nth-child(6) > .text-center:nth-child(2) img')); - const elementMoreInfoIconTooltip = await driver.findElement(By.css('#stdbody > tr:nth-child(6) > td:nth-child(4) > a')).getAttribute('title'); - const elementViewIcon = await driver.findElement(By.css('tr:nth-child(6) > .text-center:nth-child(5) img')); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Illinois') { - console.log("Passed: Dashboard - My Standards Illinois text matched as expected"); - } else { - throw new Error(`Expected: Dashboard - My Standards text: "Illinois"; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: Dashboard - My Standards Illinois text font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Illinois text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '14.3px') { - console.log('Passed: Dashboard - My Standards Illinois text font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Illinois text font-size "14.3px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(33, 37, 41, 1)') { - console.log('Passed: Dashboard - My Standards Illinois text color matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Illinois text color: "rgba(33, 37, 41, 1)"; Actual: "${elementColor}"`); - } - - //export icon - if (elementExportIcon) { - console.log('Passed: Dashboard - My Standards Illinois - Export icon is present'); - } else { - errors.push('Expected: Dashboard - My Standards Illinois - Export icon not found'); - } - - //more info icon tool-tip - if (elementMoreInfoIconTooltip === 'View Detail Information') { - console.log('Passed: Dashboard - My Standards Illinois icon tool-tip text matched as expected'); - } else { - errors.push(`Expected: ashboard - My Standards Illinois: "View Detail Information"; Actual: "${elementMoreInfoIconTooltip}"`); - } - - //view icon - if (elementViewIcon) { - console.log('Passed: Dashboard - My Standards Illinois - View icon is present'); - } else { - errors.push('Expected: Dashboard - My Standards Illinois - View icon not found'); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Dashboard - My Standards = New York - { - description: 'Validate Dashboard - My Standards Organization = New York Standards text', - action: async () => { - const multipleChecks = 'My Standards Organization - New York'; - const element = await driver.findElement(By.css('#stdbody > tr:nth-child(7) > td:nth-child(1)')); - - //Get text, font, color, and size - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - const elementExportIcon = await driver.findElement(By.css('#stdbody > tr:nth-child(7) > .text-center:nth-child(2) img')); - const elementMoreInfoIconTooltip = await driver.findElement(By.css('#stdbody > tr:nth-child(7) > td:nth-child(4) > a')).getAttribute('title'); - const elementViewIcon = await driver.findElement(By.css('tr:nth-child(7) > .text-center:nth-child(5) img')); - - //Track all errors - const errors = []; - - //text - if (elementText === 'New York') { - console.log("Passed: Dashboard - My Standards New York text matched as expected"); - } else { - throw new Error(`Expected: Dashboard - My Standards text: "New York"; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: Dashboard - My Standards New York text font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards New York text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '14.3px') { - console.log('Passed: Dashboard - My Standards New York text font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards New York text font-size "14.3px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(33, 37, 41, 1)') { - console.log('Passed: Dashboard - My Standards New York text color matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards New York text color: "rgba(33, 37, 41, 1)"; Actual: "${elementColor}"`); - } - - //export icon - if (elementExportIcon) { - console.log('Passed: Dashboard - My Standards New York - Export icon is present'); - } else { - errors.push('Expected: Dashboard - My Standards New York - Export icon not found'); - } - - //more info icon tool-tip - if (elementMoreInfoIconTooltip === 'View Detail Information') { - console.log('Passed: Dashboard - My Standards New York icon tool-tip text matched as expected'); - } else { - errors.push(`Expected: ashboard - My Standards New York: "View Detail Information"; Actual: "${elementMoreInfoIconTooltip}"`); - } - - //view icon - if (elementViewIcon) { - console.log('Passed: Dashboard - My Standards New York - View icon is present'); - } else { - errors.push('Expected: Dashboard - My Standards New York - View icon not found'); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Dashboard - My Standards = Texas - { - description: 'Validate Dashboard - My Standards Organization = Texas Standards text', - action: async () => { - const multipleChecks = 'My Standards Organization - Texas'; - const element = await driver.findElement(By.css('#stdbody > tr:nth-child(8) > td:nth-child(1)')); - - //Get text, font, color, and size - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - const elementExportIcon = await driver.findElement(By.css('#stdbody > tr:nth-child(8) > .text-center:nth-child(2) img')); - const elementMoreInfoIconTooltip = await driver.findElement(By.css('#stdbody > tr:nth-child(8) > td:nth-child(4) > a')).getAttribute('title'); - const elementViewIcon = await driver.findElement(By.css('tr:nth-child(8) > .text-center:nth-child(5) img')); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Texas') { - console.log("Passed: Dashboard - My Standards Texas text matched as expected"); - } else { - throw new Error(`Expected: Dashboard - My Standards text: "Texas"; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: Dashboard - My Standards Texas text font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Texas text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '14.3px') { - console.log('Passed: Dashboard - My Standards Texas text font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Texas text font-size "14.3px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(33, 37, 41, 1)') { - console.log('Passed: Dashboard - My Standards Texas text color matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Texas text color: "rgba(33, 37, 41, 1)"; Actual: "${elementColor}"`); - } - - //export icon - if (elementExportIcon) { - console.log('Passed: Dashboard - My Standards Texas - Export icon is present'); - } else { - errors.push('Expected: Dashboard - My Standards Texas - Export icon not found'); - } - - //more info icon tool-tip - if (elementMoreInfoIconTooltip === 'View Detail Information') { - console.log('Passed: Dashboard - My Standards Texas icon tool-tip text matched as expected'); - } else { - errors.push(`Expected: ashboard - My Standards Texas: "View Detail Information"; Actual: "${elementMoreInfoIconTooltip}"`); - } - - //view icon - if (elementViewIcon) { - console.log('Passed: Dashboard - My Standards Texas - View icon is present'); - } else { - errors.push('Expected: Dashboard - My Standards Texas - View icon not found'); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Dashboard - My Standards = Washington - { - description: 'Validate Dashboard - My Standards Organization = Washington Standards text', - action: async () => { - const multipleChecks = 'My Standards Organization - Washington'; - const element = await driver.findElement(By.css('#stdbody > tr:nth-child(9) > td:nth-child(1)')); - - //Get text, font, color, and size - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - const elementExportIcon = await driver.findElement(By.css('#stdbody > tr:nth-child(9) > .text-center:nth-child(2) img')); - const elementMoreInfoIconTooltip = await driver.findElement(By.css('#stdbody > tr:nth-child(9) > td:nth-child(4) > a')).getAttribute('title'); - const elementViewIcon = await driver.findElement(By.css('tr:nth-child(9) > .text-center:nth-child(5) img')); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Washington') { - console.log("Passed: Dashboard - My Standards Washington text matched as expected"); - } else { - throw new Error(`Expected: Dashboard - My Standards text: "Washington"; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: Dashboard - My Standards Washington text font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Washington text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '14.3px') { - console.log('Passed: Dashboard - My Standards Washington text font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Washington text font-size "14.3px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(33, 37, 41, 1)') { - console.log('Passed: Dashboard - My Standards Washington text color matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Washington text color: "rgba(33, 37, 41, 1)"; Actual: "${elementColor}"`); - } - - //export icon - if (elementExportIcon) { - console.log('Passed: Dashboard - My Standards Washington - Export icon is present'); - } else { - errors.push('Expected: Dashboard - My Standards Washington - Export icon not found'); - } - - //more info icon tool-tip - if (elementMoreInfoIconTooltip === 'View Detail Information') { - console.log('Passed: Dashboard - My Standards Washington icon tool-tip text matched as expected'); - } else { - errors.push(`Expected: ashboard - My Standards Washington: "View Detail Information"; Actual: "${elementMoreInfoIconTooltip}"`); - } - - //view icon - if (elementViewIcon) { - console.log('Passed: Dashboard - My Standards Washington - View icon is present'); - } else { - errors.push('Expected: Dashboard - My Standards Washington - View icon not found'); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //NEXT ACTION - { - description: 'Dashboard - Click Other Available Standards tab', - action: async () => { - await driver.findElement(By.css('#availstd-tab')).click(); - console.log('----->| NEXT ACTION: Clicked Other Available Standards tab'); - - //Wait until the element exists in the DOM - const instructionText = await driver.wait( - until.elementLocated(By.css('p:nth-child(1)')), - 30000 - ); - - //Wait until it becomes visible - await driver.wait( - until.elementIsVisible(instructionText), - 30000 - ); - } - }, - - //Dashboard - My Standards Widget title - { - description: 'Validate Dashboard Semantic Standards Comparison Widget title text, color, and size', - action: async () => { - const multipleChecks = 'Dashboard Semantic Standards Comparison Widget title'; - const element = await driver.findElement(By.css('#mystd-tab')); - - //Get text, font, color, and size - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'My Standards') { - console.log('Passed: Dashboard - Semantic Standards Comparison Widget title matched as expected'); - } else { - errors.push(`Expected: Dashboard - "Semantic Standards Comparison"; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: Dashboard - Semantic Standards Comparison Widget title text font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - Semantic Standards Comparison Widget title font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '15px') { - console.log('Passed: Dashboard - Semantic Standards Comparison Widget title text font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - Semantic Standards Comparison Widget title text font-size "15px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(182, 186, 181, 1)') { - console.log('Passed: Dashboard - Semantic Standards Comparison Widget title text color matched as expected'); - } else { - errors.push(`Expected: Dashboard - Semantic Standards Comparison Widget title text color "rgba(182, 186, 181, 1)"; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Dashboard - Other Available Stndards tab title (active) - { - description: 'Validate Dashboard - Other Available Stndards tab title text, color, and size', - action: async () => { - const multipleChecks = 'Other Available Stndards tab title'; - const element = await driver.findElement(By.css('#availstd-tab')); - - //Get text, font, color, and size - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Other Available Standards') { - console.log('Passed: Dashboard - Other Available Standards tab title matched as expected'); - } else { - errors.push(`Expected: Dashboard - "Other Available Standards"; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: Dashboard - Other Available Standards tab title text font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards tab title font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '15px') { - console.log('Passed: Dashboard - Other Available Standards tab title text font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards tab title text font-size "15px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(40, 39, 90, 1)') { - console.log('Passed: Dashboard - Other Available Standards tab title text color matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards tab title text color "rgba(40, 39, 90, 1)"'; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Dashboard - Other Available Stndards tab title - { - description: 'Validate Dashboard - Other Available Stndards tab title text, color, and size', - action: async () => { - const multipleChecks = 'Other Available Stndards tab title'; - const element = await driver.findElement(By.css('p:nth-child(1)')); - - //Get text, font, color, and size - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'The following standards are also available to clients. If you would like access to any of these standards sets, please Contact Us.') { - console.log('Passed: Dashboard - Other Available Standards description text matched as expected'); - } else { - errors.push(`Expected: Dashboard - "The following standards are also available to clients. If you would like access to any of these standards sets, please Contact Us."; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: Dashboard - Other Available Standards description text font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards description text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '13px') { - console.log('Passed: Dashboard - Other Available Standards tab title text font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards tab title text font-size "13px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(40, 39, 90, 1)') { - console.log('Passed: Dashboard - Other Available Standards tab title text color matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards tab title text color "rgba(40, 39, 90, 1)"'; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Dashboard - Other Available Standards dropdown - { - description: 'Validate Dashboard - Other Available Standards dropdown list and value', - action: async () => { - const multipleChecks = 'Other Available Standards'; - const elementDropdown = await driver.findElement(By.css('#defstdparent')); - const selectedOption = await elementDropdown.findElement(By.css('option:checked')); - - const elementText = await selectedOption.getText(); - const elementFont = await selectedOption.getCssValue('font-family'); - const elementSize = await selectedOption.getCssValue('font-size'); - const elementColor = await selectedOption.getCssValue('color'); - - const options = await elementDropdown.findElements(By.css('option')); - - //Track all errors - const errors = []; - - //text - if (elementText === 'United States Standards') { - console.log('Passed: Dashboard - Other Available Standards dropdown value matched as expected'); - } else { - throw new Error(`Expected: Dashboard - Other Available Standards dropdown value - "United States Standards"; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: Dashboard - Other Available Standards dropdown value font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards dropdown value font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '13px') { - console.log('Passed: Dashboard - Other Available Standards dropdown value font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards dropdown value font-size "13px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(40, 39, 90, 1)') { - console.log('Passed: Dashboard - Other Available Standards dropdown value color matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards dropdown value color: "rgba(40, 39, 90, 1)"; Actual: "${elementColor}"`); - } - - const expected = [ - 'ACT', - 'ACTFL', - 'AQA', - 'Australia', - 'Brazil', - 'Cambridge IGCSE', - 'Cambridge International AS & A Level', - 'Cambridge Secondary', - 'Canada', - 'Common Core Standards', - 'Edexcel', - 'England', - 'Finland', - 'India', - 'India NCERT (Archived)', - 'International Standards', - 'Ireland (Archived)', - 'Mexico', - 'National Standards', - 'New Zealand', - 'OCR', - 'Puerto Rico 2014', - 'Saudi Arabia', - 'Supplemental Standards', - 'Taiwan (Additional)', - 'Thailand (Additional)', - 'United Arab Emirates', - 'United States Standards' - ]; - - const actual = []; - - for (const opt of options) { - const text = (await opt.getText()).trim(); - actual.push(text); - } - - if (JSON.stringify(actual) === JSON.stringify(expected)) { - console.log('Passed: Dashboard - Other Available Standards dropdown list matched as expected'); - } else { - throw new Error(`Expected: Dashboard - Other Available Standards dropdown list: ${JSON.stringify(expected)}, Actual: ${JSON.stringify(actual)}`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Dashboard - Other Available Standards Organization column title - { - description: 'Validate Dashboard - Other Available Standards Organization column title, text, and font size', - action: async () => { - const multiple = 'Other Available Standards Organization column title'; - const element = await driver.findElement(By.css('.table:nth-child(3) th:nth-child(1)')); - - //Get text, font, color, and size - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Organization') { - console.log('Passed: Dashboard - Other Available Standards Organization column title matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards "Organization" column title; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: Dashboard - Other Available Standards Organization column title font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards Organization column title font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '14px') { - console.log('Passed: Dashboard - Other Available Standards Organization column title text font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards Organization column title text font-size "14px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(94, 105, 116, 1)') { - console.log('Passed: Dashboard - Other Available Standards Organization column title text color matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards Organization column title text color "rgba(94, 105, 116, 1)"'; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Dashboard - Other Available Organization column title - { - description: 'Validate Dashboard - Other Available Standards More Info column title, text, and font size', - action: async () => { - const multipleChecks = 'Other Available Organization column title'; - const element = await driver.findElement(By.css('.table:nth-child(3) > thead .text-center')); - - //Get text, font, color, and size - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'More Info') { - console.log('Passed: Dashboard - Other Available Standards More Info column title matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards "More Info" column title; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: Dashboard - Other Available Standards More Info column title font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards More Info column title font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '14px') { - console.log('Passed: Dashboard - Other Available Standards More Info column title text font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards More Info column title text font-size "14px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(94, 105, 116, 1)') { - console.log('Passed: Dashboard - Other Available Standards More Info column title text color matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards More Info column title text color "rgba(94, 105, 116, 1)"'; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Dashboard - Other Available Standards - Alaska - { - description: 'Validate Dashboard - Other Available Standards - Alaska', - action: async () => { - const multipleChecks = 'Other Available Standards - Alaska'; - const element = await driver.findElement(By.css('#defstdbody > tr:nth-child(1) > td:nth-child(1)')); - - //Get text, font, color, and size - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - const elementMoreInfoIconTooltip = await driver.findElement(By.css('#defstdbody > tr:nth-child(1) > td.text-center > a')).getAttribute('title'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Alaska') { - console.log('Passed: Dashboard - Other Available Standards Alaska column title matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards "Alaska" column title; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: Dashboard - Other Available Standards Alaska column title font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards Alaska column title font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '14.3px') { - console.log('Passed: Dashboard - Other Available Standards Alaska column title text font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards Alaska column title text font-size "14.3px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(33, 37, 41, 1)') { - console.log('Passed: Dashboard - Other Available Standards Alaska column title text color matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards Alaska column title text color "rgba(33, 37, 41, 1)"'; Actual: "${elementColor}"`); - } - - //more info icon tool-tip - if (elementMoreInfoIconTooltip === 'View Detail Information') { - console.log('Passed: Dashboard - Other Available Standards Alaska icon tool-tip text matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards Alaska: "View Detail Information"; Actual: "${elementMoreInfoIconTooltip}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Dashboard - Other Available Standards - Arkansas - { - description: 'Validate Dashboard - Other Available Standards - Arkansas', - action: async () => { - const multipleChecks = 'Other Available Standards - Arkansas'; - const element = await driver.findElement(By.css('#defstdbody > tr:nth-child(2) > td:nth-child(1)')); - - //Get text, font, color, and size - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - const elementMoreInfoIconTooltip = await driver.findElement(By.css('#defstdbody > tr:nth-child(2) > td.text-center > a')).getAttribute('title'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Arkansas') { - console.log('Passed: Dashboard - Other Available Standards Arkansas column title matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards "Arkansas" column title; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: Dashboard - Other Available Standards Arkansas column title font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards Arkansas column title font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '14.3px') { - console.log('Passed: Dashboard - Other Available Standards Arkansas column title text font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards Arkansas column title text font-size "14.3px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(33, 37, 41, 1)') { - console.log('Passed: Dashboard - Other Available Standards Arkansas column title text color matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards Arkansas column title text color "rgba(33, 37, 41, 1)"'; Actual: "${elementColor}"`); - } - - //more info icon tool-tip - if (elementMoreInfoIconTooltip === 'View Detail Information') { - console.log('Passed: Dashboard - Other Available Standards Arkansas icon tool-tip text matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards Arkansas: "View Detail Information"; Actual: "${elementMoreInfoIconTooltip}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Dashboard - Other Available Standards - Colorado - { - description: 'Validate Dashboard - Other Available Standards - Colorado', - action: async () => { - const multipleChecks = 'Other Available Standards - Colorado'; - const element = await driver.findElement(By.css('#defstdbody > tr:nth-child(3) > td:nth-child(1)')); - - //Get text, font, color, and size - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - const elementMoreInfoIconTooltip = await driver.findElement(By.css('#defstdbody > tr:nth-child(3) > td.text-center > a')).getAttribute('title'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Colorado') { - console.log('Passed: Dashboard - Other Available Standards Colorado column title matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards "Colorado" column title; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: Dashboard - Other Available Standards Colorado column title font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards Colorado column title font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '14.3px') { - console.log('Passed: Dashboard - Other Available Standards Colorado column title text font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards Colorado column title text font-size "14.3px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(33, 37, 41, 1)') { - console.log('Passed: Dashboard - Other Available Standards Colorado column title text color matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards Colorado column title text color "rgba(33, 37, 41, 1)"'; Actual: "${elementColor}"`); - } - - //more info icon tool-tip - if (elementMoreInfoIconTooltip === 'View Detail Information') { - console.log('Passed: Dashboard - Other Available Standards Colorado icon tool-tip text matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards Colorado: "View Detail Information"; Actual: "${elementMoreInfoIconTooltip}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Dashboard - Other Available Standards - Connecticut - { - description: 'Validate Dashboard - Other Available Standards - Connecticut', - action: async () => { - const multipleChecks = 'Other Available Standards - Connecticut'; - const element = await driver.findElement(By.css('#defstdbody > tr:nth-child(4) > td:nth-child(1)')); - - //Get text, font, color, and size - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - const elementMoreInfoIconTooltip = await driver.findElement(By.css('#defstdbody > tr:nth-child(4) > td.text-center > a')).getAttribute('title'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Connecticut') { - console.log('Passed: Dashboard - Other Available Standards Connecticut column title matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards "Connecticut" column title; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: Dashboard - Other Available Standards Connecticut column title font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards Connecticut column title font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '14.3px') { - console.log('Passed: Dashboard - Other Available Standards Connecticut column title text font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards Connecticut column title text font-size "14.3px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(33, 37, 41, 1)') { - console.log('Passed: Dashboard - Other Available Standards Connecticut column title text color matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards Connecticut column title text color "rgba(33, 37, 41, 1)"'; Actual: "${elementColor}"`); - } - - //more info icon tool-tip - if (elementMoreInfoIconTooltip === 'View Detail Information') { - console.log('Passed: Dashboard - Other Available Standards Connecticut icon tool-tip text matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards Connecticut: "View Detail Information"; Actual: "${elementMoreInfoIconTooltip}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Dashboard - Other Available Standards - Delaware - { - description: 'Validate Dashboard - Other Available Standards - Delaware', - action: async () => { - const multipleChecks = 'Other Available Standards - Delaware'; - const element = await driver.findElement(By.css('#defstdbody > tr:nth-child(5) > td:nth-child(1)')); - - //Get text, font, color, and size - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - const elementMoreInfoIconTooltip = await driver.findElement(By.css('#defstdbody > tr:nth-child(5) > td.text-center > a')).getAttribute('title'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Delaware') { - console.log('Passed: Dashboard - Other Available Standards Delaware column title matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards "Delaware" column title; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: Dashboard - Other Available Standards Delaware column title font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards Delaware column title font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '14.3px') { - console.log('Passed: Dashboard - Other Available Standards Delaware column title text font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards Delaware column title text font-size "14.3px"; Actual: "${elementSize}"`); - } - - //more info icon tool-tip - if (elementMoreInfoIconTooltip === 'View Detail Information') { - console.log('Passed: Dashboard - Other Available Standards Delaware icon tool-tip text matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards Delaware: "View Detail Information"; Actual: "${elementMoreInfoIconTooltip}"`); - } - - //color - if (elementColor === 'rgba(33, 37, 41, 1)') { - console.log('Passed: Dashboard - Other Available Standards Delaware column title text color matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards Delaware column title text color "rgba(33, 37, 41, 1)"'; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //NEXT ACTION - { - description: 'Dashboard - Click My Standards tab', - action: async () => { - await driver.findElement(By.css('#mystd-tab')).click(); - console.log('----->| NEXT ACTION: Clicked My Standards tab'); - - //Wait until the element exists in the DOM - const myStandardsDropdown = await driver.wait( - until.elementLocated(By.css('#stdparent')), - 30000 - ); - - //Wait until it becomes visible - await driver.wait( - until.elementIsVisible(myStandardsDropdown), - 30000 - ); - } - }, - - //Dashboard - My Standards Widget title (active) - { - description: 'Validate Dashboard Semantic Standards Comparison Widget title text, color, and size', - action: async () => { - const multipleChecks = 'My Standards Widget title (active)'; - const element = await driver.findElement(By.css('#mystd-tab')); - - //Get text, font, color, and size - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'My Standards') { - console.log('Passed: Dashboard - Semantic Standards Comparison Widget title matched as expected'); - } else { - errors.push(`Expected: Dashboard - "Semantic Standards Comparison"; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: Dashboard - Semantic Standards Comparison Widget title font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - Semantic Standards Comparison Widget title font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '15px') { - console.log('Passed: Dashboard - Semantic Standards Comparison Widget title text font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - Semantic Standards Comparison Widget title text font-size "15px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(40, 39, 90, 1)') { - console.log('Passed: Dashboard - Semantic Standards Comparison Widget title text color matched as expected'); - } else { - errors.push(`Expected: Dashboard - Semantic Standards Comparison Widget title text color "rgba(40, 39, 90, 1)"; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Dashboard - Other Available Stndards tab title - { - description: 'Validate Dashboard - Other Available Stndards tab title text, color, and size', - action: async () => { - const multipleChecks = 'Other Available Stndards tab title'; - const element = await driver.findElement(By.css('#availstd-tab')); - - //Get text, font, color, and size - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Other Available Standards') { - console.log('Passed: Dashboard - Other Available Standards tab title matched as expected'); - } else { - errors.push(`Expected: Dashboard - "Other Available Standards"; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: Dashboard - Other Available Standards tab title font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards tab title font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '15px') { - console.log('Passed: Dashboard - Other Available Standards tab title text font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards tab title text font-size "15px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(182, 186, 181, 1)') { - console.log('Passed: Dashboard - Other Available Standards tab title text color matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards tab title text color "rgba(182, 186, 181, 1)"'; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Dashboard - My Standards dropdown - { - description: 'Validate Dashboard - My Standards dropdown list and value', - action: async () => { - const multipleChecks = 'My Standards dropdown list'; - const elementDropdown = await driver.findElement(By.css('#stdparent')); - const selectedOption = await elementDropdown.findElement(By.css('option:checked')); - - const elementText = await selectedOption.getText(); - const elementFont = await selectedOption.getCssValue('font-family'); - const elementSize = await selectedOption.getCssValue('font-size'); - const elementColor = await selectedOption.getCssValue('color'); - - const options = await elementDropdown.findElements(By.css('option')); - - //Track all errors - const errors = []; - - //text - if (elementText === 'United States Standards') { - console.log('Passed: Dashboard - My Standards dropdown text matched as expected'); - } else { - throw new Error(`Expected: Dashboard - My Standards: "United States Standards"; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: Dashboard - My Standards dropdown font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards dropdown font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '13px') { - console.log('Passed: Dashboard - My Standards dropdown font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards dropdown font-size "13px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(40, 39, 90, 1)') { - console.log('Passed: Dashboard - My Standards dropdown color matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards dropdown color: "rgba(40, 39, 90, 1)"; Actual: "${elementColor}"`); - } - - const expected = [ - 'ACTFL', - 'Australia', - 'California', - 'Canada', - 'Common Core Standards', - 'Creating Org', - 'Demo Client Standards', - 'Demo Standards', - 'New Folder', - 'QA Client Test Frameworks', - 'United States Standards', - 'WIDA' - ]; - - const actual = []; - - for (const opt of options) { - const text = (await opt.getText()).trim(); - actual.push(text); - } - - if (JSON.stringify(actual) === JSON.stringify(expected)) { - console.log('Passed: Dashboard - My Standards Dropdown list matched as expected'); - } else { - throw new Error(`Expected: Dashboard - My Standards Dropdown list: ${JSON.stringify(expected)}, Actual: ${JSON.stringify(actual)}`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Dashboard - My Standards Organization column title - { - description: 'Validate Dashboard - My Standards Organization column title, text, and font size', - action: async () => { - const multipleChecks = 'My Standards Organization column title' - const element = await driver.findElement(By.css('.table:nth-child(2) th:nth-child(1)')); - - //Get text, font, color, and size - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Organization') { - console.log('Passed: Dashboard - My Standards Organization column title matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards "Organization" column title; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: Dashboard - My Standards Organization column title font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Organization column title font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '14px') { - console.log('Passed: Dashboard - My Standards Organization column title text font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Organization column title text font-size "14px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(94, 105, 116, 1)') { - console.log('Passed: Dashboard - My Standards Organization column title text color matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Organization column title text color "rgba(94, 105, 116, 1)"'; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Dashboard - My Standards Export column title - { - description: 'Validate Dashboard - My Standards Export column title, text, and font size', - action: async () => { - const multipleChecks = 'My Standards Export column title'; - const element = await driver.findElement(By.css('.table:nth-child(2) > thead .text-center:nth-child(2)')); - - //Get text, font, color, and size - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Export') { - console.log('Passed: Dashboard - My Standards Export column title matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards "Export" column title; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: Dashboard - My Standards Export column title font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Export column title font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '14px') { - console.log('Passed: Dashboard - My Standards Export column title text font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Export column title text font-size "14px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(94, 105, 116, 1)') { - console.log('Passed: Dashboard - My Standards Export column title text color matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Export column title text color "rgba(94, 105, 116, 1)"'; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Dashboard - My Standards Manage column title - { - description: 'Validate Dashboard - My Standards Manage column title, text, and font size', - action: async () => { - const multipleChecks = 'My Standards Manage column title'; - const element = await driver.findElement(By.css('.text-center:nth-child(3)')); - - //Get text, font, color, and size - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Manage') { - console.log('Passed: Dashboard - My Standards Manage column title matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards "Manage" column title; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: Dashboard - My Standards Manage column title font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Manage column title font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '14px') { - console.log('Passed: Dashboard - My Standards Manage column title text font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Manage column title text font-size "14px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(94, 105, 116, 1)') { - console.log('Passed: Dashboard - My Standards Manage column title text color matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Manage column title text color "rgba(94, 105, 116, 1)"'; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Dashboard - My Standards More Info column title, - { - description: 'Validate Dashboard - My Standards More Info column title, text, and font size', - action: async () => { - const multipleChecks = 'My Standards More Info column title'; - const element = await driver.findElement(By.css('.table-sm > thead .text-center:nth-child(4)')); - - //Get text, font, color, and size - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'More Info') { - console.log('Passed: Dashboard - My Standards More Info column title matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards "More Info" column title; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: Dashboard - My Standards More Info column title font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards More Info column title font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '14px') { - console.log('Passed: Dashboard - My Standards More Info column title text font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards More Info column title text font-size "14px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(94, 105, 116, 1)') { - console.log('Passed: Dashboard - My Standards More Info column title text color matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards More Info column title text color "rgba(94, 105, 116, 1)"'; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Dashboard - My Standards View column title - { - description: 'Validate Dashboard - My Standards View column title, text, and font size', - action: async () => { - const multipleChecks = 'My Standards View column title'; - const element = await driver.findElement(By.css('thead .text-center:nth-child(5)')); - - //Get text, font, color, and size - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'View') { - console.log('Passed: Dashboard - My Standards View column title matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards "View" column title; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: Dashboard - My Standards View column title font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards View column title font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '14px') { - console.log('Passed: Dashboard - My Standards View column title text font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards View column title text font-size "14px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(94, 105, 116, 1)') { - console.log('Passed: Dashboard - My Standards View column title text color matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards View column title text color "rgba(94, 105, 116, 1)"'; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Dashboard - My Standards = Alabama - { - description: 'Validate Dashboard - My Standards Organization = Alabama Standards text', - action: async () => { - const multipleChecks = 'My Standards Organization - Alabama'; - const element = await driver.findElement(By.css('#stdbody > tr:nth-child(1) > td:nth-child(1)')); - - //Get text, font, color, and size - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - const elementExportIcon = await driver.findElement(By.css('#stdbody > tr:nth-child(1) > .text-center:nth-child(2) img')); - const elementMoreInfoIconTooltip = await driver.findElement(By.css('#stdbody > tr:nth-child(1) > td:nth-child(4) > a')).getAttribute('title'); - const elementViewIcon = await driver.findElement(By.css('tr:nth-child(1) > .text-center:nth-child(5) img')); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Alabama') { - console.log("Passed: Dashboard - My Standards Alabama text matched as expected"); - } else { - throw new Error(`Expected: Dashboard - My Standards text: "Alabama"; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: Dashboard - My Standards Alabama text font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Alabama text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '14.3px') { - console.log('Passed: Dashboard - My Standards Alabama text font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Alabama text font-size "14.3px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(33, 37, 41, 1)') { - console.log('Passed: Dashboard - My Standards Alabama text color matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Alabama text color: "rgba(33, 37, 41, 1)"; Actual: "${elementColor}"`); - } - - //export icon - if (elementExportIcon) { - console.log('Passed: Dashboard - My Standards Alabama - Export icon is present'); - } else { - errors.push('Expected: Dashboard - My Standards Alabama - Export icon not found'); - } - - //more info icon tool-tip - if (elementMoreInfoIconTooltip === 'View Detail Information') { - console.log('Passed: Dashboard - My Standards Alabama icon tool-tip text matched as expected'); - } else { - errors.push(`Expected: ashboard - My Standards Alabama: "View Detail Information"; Actual: "${elementMoreInfoIconTooltip}"`); - } - - //view icon - if (elementViewIcon) { - console.log('Passed: Dashboard - My Standards Alabama - View icon is present'); - } else { - errors.push('Expected: Dashboard - My Standards Alabama - View icon not found'); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Dashboard - My Standards = Arizona - { - description: 'Validate Dashboard - My Standards Organization = Arizona Standards text', - action: async () => { - const multipleChecks = 'My Standards Organization - Arizona'; - const element = await driver.findElement(By.css('#stdbody > tr:nth-child(2) > td:nth-child(1)')); - - //Get text, font, color, and size - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - const elementExportIcon = await driver.findElement(By.css('#stdbody > tr:nth-child(2) > .text-center:nth-child(2) img')); - const elementMoreInfoIconTooltip = await driver.findElement(By.css('#stdbody > tr:nth-child(2) > td:nth-child(4) > a')).getAttribute('title'); - const elementViewIcon = await driver.findElement(By.css('tr:nth-child(2) > .text-center:nth-child(5) img')); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Arizona') { - console.log("Passed: Dashboard - My Standards Arizona text matched as expected"); - } else { - throw new Error(`Expected: Dashboard - My Standards text: "Arizona"; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: Dashboard - My Standards Arizona text font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Arizona text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '14.3px') { - console.log('Passed: Dashboard - My Standards Arizona text font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Arizona text font-size "14.3px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(33, 37, 41, 1)') { - console.log('Passed: Dashboard - My Standards Arizona text color matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Arizona text color: "rgba(33, 37, 41, 1)"; Actual: "${elementColor}"`); - } - - //export icon - if (elementExportIcon) { - console.log('Passed: Dashboard - My Standards Arizona - Export icon is present'); - } else { - errors.push('Expected: Dashboard - My Standards Arizona - Export icon not found'); - } - - //more info icon tool-tip - if (elementMoreInfoIconTooltip === 'View Detail Information') { - console.log('Passed: Dashboard - My Standards Arizona icon tool-tip text matched as expected'); - } else { - errors.push(`Expected: ashboard - My Standards Arizona: "View Detail Information"; Actual: "${elementMoreInfoIconTooltip}"`); - } - - //view icon - if (elementViewIcon) { - console.log('Passed: Dashboard - My Standards Arizona - View icon is present'); - } else { - errors.push('Expected: Dashboard - My Standards Arizona - View icon not found'); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Dashboard - My Standards = California - { - description: 'Validate Dashboard - My Standards Organization = California Standards text', - action: async () => { - const multipleChecks = 'My Standards Organization - California'; - const element = await driver.findElement(By.css('#stdbody > tr:nth-child(3) > td:nth-child(1)')); - - //Get text, font, color, and size - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - const elementExportIcon = await driver.findElement(By.css('#stdbody > tr:nth-child(3) > .text-center:nth-child(2) img')); - const elementMoreInfoIconTooltip = await driver.findElement(By.css('#stdbody > tr:nth-child(3) > td:nth-child(4) > a')).getAttribute('title'); - const elementViewIcon = await driver.findElement(By.css('tr:nth-child(3) > .text-center:nth-child(5) img')); - - //Track all errors - const errors = []; - - //text - if (elementText === 'California') { - console.log("Passed: Dashboard - My Standards California text matched as expected"); - } else { - throw new Error(`Expected: Dashboard - My Standards text: "California"; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: Dashboard - My Standards California text font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards California text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '14.3px') { - console.log('Passed: Dashboard - My Standards California text font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards California text font-size "14.3px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(33, 37, 41, 1)') { - console.log('Passed: Dashboard - My Standards California text color matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards California text color: "rgba(33, 37, 41, 1)"; Actual: "${elementColor}"`); - } - - //export icon - if (elementExportIcon) { - console.log('Passed: Dashboard - My Standards California - Export icon is present'); - } else { - errors.push('Expected: Dashboard - My Standards California - Export icon not found'); - } - - //more info icon tool-tip - if (elementMoreInfoIconTooltip === 'View Detail Information') { - console.log('Passed: Dashboard - My Standards California icon tool-tip text matched as expected'); - } else { - errors.push(`Expected: ashboard - My Standards California: "View Detail Information"; Actual: "${elementMoreInfoIconTooltip}"`); - } - - //view icon - if (elementViewIcon) { - console.log('Passed: Dashboard - My Standards California - View icon is present'); - } else { - errors.push('Expected: Dashboard - My Standards California - View icon not found'); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Dashboard - My Standards = Florida - { - description: 'Validate Dashboard - My Standards Organization = Florida Standards text', - action: async () => { - const multipleChecks = 'My Standards Organization - Florida'; - const element = await driver.findElement(By.css('#stdbody > tr:nth-child(4) > td:nth-child(1)')); - - //Get text, font, color, and size - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - const elementExportIcon = await driver.findElement(By.css('#stdbody > tr:nth-child(4) > .text-center:nth-child(2) img')); - const elementMoreInfoIconTooltip = await driver.findElement(By.css('#stdbody > tr:nth-child(4) > td:nth-child(4) > a')).getAttribute('title'); - const elementViewIcon = await driver.findElement(By.css('tr:nth-child(4) > .text-center:nth-child(5) img')); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Florida') { - console.log("Passed: Dashboard - My Standards Florida text matched as expected"); - } else { - throw new Error(`Expected: Dashboard - My Standards text: "Florida"; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: Dashboard - My Standards Florida text font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Florida text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '14.3px') { - console.log('Passed: Dashboard - My Standards Florida text font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Florida text font-size "14.3px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(33, 37, 41, 1)') { - console.log('Passed: Dashboard - My Standards Florida text color matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Florida text color: "rgba(33, 37, 41, 1)"; Actual: "${elementColor}"`); - } - - //export icon - if (elementExportIcon) { - console.log('Passed: Dashboard - My Standards Florida - Export icon is present'); - } else { - errors.push('Expected: Dashboard - My Standards Florida - Export icon not found'); - } - - //more info icon tool-tip - if (elementMoreInfoIconTooltip === 'View Detail Information') { - console.log('Passed: Dashboard - My Standards Florida icon tool-tip text matched as expected'); - } else { - errors.push(`Expected: ashboard - My Standards Florida: "View Detail Information"; Actual: "${elementMoreInfoIconTooltip}"`); - } - - //view icon - if (elementViewIcon) { - console.log('Passed: Dashboard - My Standards Florida - View icon is present'); - } else { - errors.push('Expected: Dashboard - My Standards Florida - View icon not found'); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //NEXT ACTION - { - description: 'Dashboard - Click Alabama Export icon', - action: async () => { - await driver.findElement(By.css('#stdbody > tr:nth-child(1) > .text-center:nth-child(2) img')).click(); - console.log('----->| NEXT ACTION: Clicked Alabama Export icon'); - - //Wait until the modal title is located AND visible - await driver.wait(async () => { - try { - const element = await driver.findElement(By.css('.modal-lg .modal-title')); - return await element.isDisplayed(); - } catch (e) { - return false; //Element not ready yet, keep waiting - } - }, 20000, 'Modal did not become visible within 20 seconds'); - - console.log('Passed: DIV - Loaded successfully'); - } - }, - - //EXPORT STANDARD DIV - //DIV - Export Standards title - { - description: 'Validate DIV - Export Standards title text, color, and size', - action: async () => { - const multipleChecks = 'DIV - Export Standards title'; - const element = await driver.findElement(By.css('.modal-lg .modal-title')); - - //Get text, font, color, and size - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Export Standards') { - console.log('Passed: DIV - Export Standards title matched as expected'); - } else { - errors.push(`Expected: DIV - "Export Standards"; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: DIV - Export Standards title text font-family matched as expected'); - } else { - errors.push(`Expected: DIV - Export Standards title text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '18px') { - console.log('Passed: DIV - Export Standards title text font-size matched as expected'); - } else { - errors.push(`Expected: DIV - Export Standards title text font-size "18px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(40, 39, 90, 1)') { - console.log('Passed: DIV - Export Standards title text color matched as expected'); - } else { - errors.push(`Expected: DIV - Export Standards title text color "rgba(40, 39, 90, 1)"'; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //DIV - Alabama sub-title - { - description: 'Validate DIV - Alabama sub-title text, color, and size', - action: async () => { - const multipleChecks = 'DIV - Alabama sub-title'; - const element = await driver.findElement(By.css('p > b')); - - //Get text, font, color, and size - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Alabama') { - console.log('Passed: DIV - Alabama sub-title matched as expected'); - } else { - errors.push(`Expected: DIV - sub-title "Alabama"; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: DIV - Alabama sub-title text font-family matched as expected'); - } else { - errors.push(`Expected: DIV - Alabama sub-title text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '13px') { - console.log('Passed: DIV - Alabama sub-title text font-size matched as expected'); - } else { - errors.push(`Expected: DIV - Alabama sub-title text font-size "13px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(40, 39, 90, 1)') { - console.log('Passed: DIV - Alabama sub-title text color matched as expected'); - } else { - errors.push(`Expected: DIV - Alabama sub-title text color "rgba(40, 39, 90, 1)"'; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //DIV - Alabama Standards Subject label - { - description: 'Validate DIV - Alabama Standards Subject label text, color, and size', - action: async () => { - const multipleChecks = 'DIV - Alabama Standards Subject label'; - const element = await driver.findElement(By.css('.form-row:nth-child(2) > .form-group:nth-child(1) > label')); - - //Get text, font, color, and size - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Subject') { - console.log('Passed: DIV - Alabama Standards Subject label matched as expected'); - } else { - errors.push(`Expected: DIV - "Subject" label; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: DIV - Alabama Standards Subject label text font-family matched as expected'); - } else { - errors.push(`Expected: DIV - Alabama Standards Subject label text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '15px') { - console.log('Passed: DIV - Alabama Standards Subject label text font-size matched as expected'); - } else { - errors.push(`Expected: DIV - Alabama Standards Subject label text font-size "15px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(40, 39, 90, 1)') { - console.log('Passed: DIV - Alabama Standards Subject label text color matched as expected'); - } else { - errors.push(`Expected: DIV - Alabama Standards Subject label text color "rgba(40, 39, 90, 1)"'; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //DIV - Subject dropdown {custom-select} - { - description: 'Validate DIV - Subject dropdown list and value', - action: async () => { - const multipleChecks = 'DIV - Subject dropdown'; - const elementDropdown = await driver.findElement(By.css('#exsubject')); - const selectedOption = await elementDropdown.findElement(By.css('option:checked')); - - const elementText = await selectedOption.getText(); - const elementFont = await selectedOption.getCssValue('font-family'); - const elementSize = await selectedOption.getCssValue('font-size'); - const elementColor = await selectedOption.getCssValue('color'); - - const options = await elementDropdown.findElements(By.css('option')); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Choose a subject') { - console.log('Passed: DIV - Subject dropdown text matched as expected'); - } else { - throw new Error(`Expected: DIV - Subject: "Choose a subject"; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: DIV - Subject dropdown font-family matched as expected'); - } else { - errors.push(`Expected: DIV - Subject dropdown font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '13px') { - console.log('Passed: DIV - Subject dropdown font-size matched as expected'); - } else { - errors.push(`Expected: DIV - Subject dropdown font-size "13px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(40, 39, 90, 1)') { - console.log('Passed: DIV - Subject dropdown color matched as expected'); - } else { - errors.push(`Expected: DIV - Subject dropdown color: "rgba(40, 39, 90, 1)"; Actual: "${elementColor}"`); - } - - const expectedList = [ - 'Choose a subject', - 'Health and PE', - 'Language Arts', - 'Mathematics', - 'Science', - 'Social Studies', - 'Technology Education' - ]; - - const actual = []; - - for (const opt of options) { - const text = (await opt.getText()).trim(); - actual.push(text); - } - - if (JSON.stringify(actual) === JSON.stringify(expectedList)) { - console.log('Passed: DIV - Subject Dropdown list matched as expected'); - } else { - errors.push(`Expected: DIV - Subject Dropdown list: ${JSON.stringify(expectedList)}, Actual: ${JSON.stringify(actual)}`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //DIV - Alabama Standards Format label - { - description: 'Validate DIV - Alabama Standards Format label text, color, and size', - action: async () => { - const multipleChecks = 'DIV - Alabama Standards Format label'; - const element = await driver.findElement(By.css('.form-row:nth-child(2) > .form-group:nth-child(2) > label')); - - //Get text, font, color, and size - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Format') { - console.log('Passed: DIV - Alabama Standards Format label matched as expected'); - } else { - errors.push(`Expected: DIV - "Format" label; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: DIV - Alabama Standards Format label font-family matched as expected'); - } else { - errors.push(`Expected: DIV - Alabama Standards Format label font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '15px') { - console.log('Passed: DIV - Alabama Standards Format label text font-size matched as expected'); - } else { - errors.push(`Expected: DIV - Alabama Standards Format label text font-size "15px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(40, 39, 90, 1)') { - console.log('Passed: DIV - Alabama Standards Format label text color matched as expected'); - } else { - errors.push(`Expected: DIV - Alabama Standards Format label text color "rgba(40, 39, 90, 1)"'; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //DIV - Format dropdown - { - description: 'Validate DIV - Format dropdown list and value', - action: async () => { - const multipleChecks = 'DIV - Format dropdown'; - const elementDropdown = await driver.findElement(By.css('#exformat')); - const selectedOption = await elementDropdown.findElement(By.css('option:checked')); - - const elementText = await selectedOption.getText(); - const elementFont = await selectedOption.getCssValue('font-family'); - const elementSize = await selectedOption.getCssValue('font-size'); - const elementColor = await selectedOption.getCssValue('color'); - - const options = await elementDropdown.findElements(By.css('option')); - - //Track all errors - const errors = []; - - //text - if (elementText === 'CSV') { - console.log('Passed: DIV - Format dropdown text matched as expected'); - } else { - throw new Error(`Expected: DIV - Format: "CSV"; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: DIV - Format dropdown font-family matched as expected'); - } else { - errors.push(`Expected: DIV - Format dropdown font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '13px') { - console.log('Passed: DIV - Format dropdown font-size matched as expected'); - } else { - errors.push(`Expected: DIV - Format dropdown font-size "13px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(40, 39, 90, 1)') { - console.log('Passed: DIV - Format dropdown color matched as expected'); - } else { - errors.push(`Expected: DIV - Format dropdown color: "rgba(40, 39, 90, 1)"; Actual: "${elementColor}"`); - } - - const expectedList = [ - 'CSV', - 'JSON' - ]; - - const actual = []; - - for (const opt of options) { - const text = (await opt.getText()).trim(); - actual.push(text); - } - - if (JSON.stringify(actual) === JSON.stringify(expectedList)) { - console.log('Passed: DIV - Format Dropdown list matched as expected'); - } else { - errors.push(`Expected: DIV - Format Dropdown list: ${JSON.stringify(expectedList)}, Actual: ${JSON.stringify(actual)}`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //DIV - Grades label - { - description: 'Validate DIV - Grades label text, color, and size', - action: async () => { - const multipleChecks = 'DIV - Grades label'; - const element = await driver.findElement(By.css('.col-md-12:nth-child(1) > label')); - - //Get text, font, color, and size - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Grades') { - console.log('Passed: DIV - Grades label matched as expected'); - } else { - errors.push(`Expected: DIV - "Grades" label; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: DIV - Grades label font-family matched as expected'); - } else { - errors.push(`Expected: DIV - Grades label font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '15px') { - console.log('Passed: DIV - Grades label text font-size matched as expected'); - } else { - errors.push(`Expected: DIV - Grades label text font-size "15px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(40, 39, 90, 1)') { - console.log('Passed: DIV - Grades label text color matched as expected'); - } else { - errors.push(`Expected: DIV - Grades label text color "rgba(40, 39, 90, 1)"'; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //DIV - Grades dropdown - { - description: 'Validate DIV - Grades dropdown list and value', - action: async () => { - const multipleChecks = 'DIV - Grades dropdown'; - const elementDropdown = await driver.findElement(By.css('#exgrades')); - - const elementText = await elementDropdown.getText(); - const elementFont = await elementDropdown.getCssValue('font-family'); - const elementSize = await elementDropdown.getCssValue('font-size'); - const elementColor = await elementDropdown.getCssValue('color'); - - const options = await elementDropdown.findElements(By.css('option')); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Please select a subject first') { - console.log('Passed: DIV - Grades dropdown text matched as expected'); - } else { - throw new Error(`Expected: DIV - Grades: "Please select a subject first"; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: DIV - Grades dropdown font-family matched as expected'); - } else { - errors.push(`Expected: DIV - Grades dropdown font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '14px') { - console.log('Passed: DIV - Grades dropdown font-size matched as expected'); - } else { - errors.push(`Expected: DIV - Grades dropdown font-size "14px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(40, 39, 90, 1)') { - console.log('Passed: DIV - Grades dropdown color matched as expected'); - } else { - errors.push(`Expected: DIV - Grades dropdown color: "rgba(40, 39, 90, 1)"; Actual: "${elementColor}"`); - } - - const expectedList = [ - 'Please select a subject first' - ]; - - const actual = []; - - for (const opt of options) { - const text = (await opt.getText()).trim(); - actual.push(text); - } - - if (JSON.stringify(actual) === JSON.stringify(expectedList)) { - console.log('Passed: DIV - Grades Dropdown list matched as expected'); - } else { - errors.push(`Expected: DIV - Grades Dropdown list: ${JSON.stringify(expectedList)}, Actual: ${JSON.stringify(actual)}`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //DIV - Download button - { - description: 'Validate DIV - Download button icon, text, and color', - action: async () => { - const multipleChecks = 'DIV - Download button'; - const elementIcon = await driver.findElement(By.css('#exsubmit > .fa')); - const element = await driver.findElement(By.css('#exsubmit')); - - //Get text, font, color, and size - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - const elementButtonColor = await element.getCssValue('background-color'); - - //Track all errors - const errors = []; - - //icon - if (elementIcon) { - console.log('Passed: DIV - Download button icon is present'); - } else { - errors.push('DIV - Download button icon was not found'); - } - - //text - if (elementText === 'Download') { - console.log('Passed: DIV - Download button text matched as expected'); - } else { - errors.push(`Expected: DIV - Button text: "Download"; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: DIV - Download button text font-family matched as expected'); - } else { - errors.push(`Expected: DIV - Download button text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '16px') { - console.log('Passed: DIV - Download button text font-size matched as expected'); - } else { - errors.push(`Expected: DIV - Download button text font-size "16px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(255, 255, 255, 1)') { - console.log('Passed: DIV - Download button text color matched as expected'); - } else { - errors.push(`Expected: DIV - Download button text color: "rgba(255, 255, 255, 1)"; Actual: "${elementColor}"`); - } - - //button color - if (elementButtonColor === 'rgba(48, 200, 172, 1)') { - console.log('Passed: DIV - Download button background color matched as expected'); - } else { - errors.push(`Expected: DIV - Download button background color: "rgba(48, 200, 172, 1)"; Actual: "${elementButtonColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //DIV - Close button - { - description: 'Validate DIV - Close button text, style, font, and color', - action: async () => { - const multipleChecks = 'DIV - Close button'; - const element = await driver.findElement(By.css('#modalclose')); - - //Get text, font, color, and size - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - const elementButtonColor = await element.getCssValue('background-color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Close') { - console.log('Passed: DIV - Close button text matched as expected'); - } else { - errors.push(`Expected: DIV - Button text: "Close"; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: DIV - Close button text font-family matched as expected'); - } else { - errors.push(`Expected: DIV - Close button text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '16px') { - console.log('Passed: DIV - Close button text font-size matched as expected'); - } else { - errors.push(`Expected: DIV - Close button text font-size "16px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(40, 39, 90, 1)') { - console.log('Passed: DIV - Close button text color matched as expected'); - } else { - errors.push(`Expected: DIV - Close button text color: "rgba(40, 39, 90, 1)"; Actual: "${elementColor}"`); - } - - //button color - if (elementButtonColor === 'rgba(0, 0, 0, 0)') { - console.log('Passed: DIV - Close button background color matched as expected'); - } else { - errors.push(`Expected: DIV - Close button background color: "rgba(0, 0, 0, 0)"; Actual: "${elementButtonColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //NEXT ACTION - { - description: 'DIV - Click Export button', - action: async () => { - await driver.findElement(By.css('#exsubmit')).click(); - console.log('----->| NEXT ACTION: Clicked Export button'); - - //Wait until the modal title is located AND visible - await driver.wait(async () => { - try { - const element = await driver.findElement(By.css('#metawarn > b')); - return await element.isDisplayed(); - } catch (e) { - return false; //Element not ready yet, keep waiting - } - }, 20000, 'Validation text not visible within 20 seconds'); - - console.log('Passed: DIV - Validation message appeared'); - } - }, - - //DIV - Validation - { - description: 'Validate DIV - Validation text, color, and size', - action: async () => { - const element = await driver.findElement(By.css('#metawarn > b')); - - //Get text, color, and size - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color') - - //Track all errors - const errors = []; - - //text - if (elementText === 'A subject and at least one grade must be selected.') { - console.log('Passed: DIV - Validation text matched as expected'); - } else { - errors.push(`Expected: DIV - Validation text: "A subject and at least one grade must be selected."; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: DIV - Validation text font-family matched as expected'); - } else { - errors.push(`Expected: DIV - Validation text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '13px') { - console.log('Passed: DIV - Validation text font-size matched as expected'); - } else { - errors.push(`Expected: DIV - Validation text font-size "13px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(220, 53, 69, 1)') { - console.log('Passed: DIV - Validation text color matched as expected'); - } else { - errors.push(`Expected: DIV - Validation text color: "rgba(220, 53, 69, 1)"; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift('Multiple validation checks did not pass'); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //NEXT ACTION - { - description: 'Select subject and grade', - action: async () => { - //Select "Mathematics" from dropdown - await driver.findElement(By.css('#exsubject')).click(); - await driver.sleep(2000); - await driver.findElement(By.css('#exsubject > option:nth-child(4)')).click(); - console.log('----->| NEXT ACTION: Selected Subject - Mathematics'); - - //Wait for the X clear icon (Select2 uses this class) - const clearGradesIcon = await driver.wait( - until.elementLocated(By.css('#exgrades + span .select2-selection__clear')), - 20000 - ); - - //Wait until visible - await driver.wait( - until.elementIsVisible(clearGradesIcon), - 20000 - ); - - //Click to clear grades - await clearGradesIcon.click(); - await driver.sleep(1000); - console.log('----->| NEXT ACTION: Clicked Grades X clear icon'); - - await driver.findElement(By.xpath("//li[contains(text(), '9')]")).click(); - await driver.sleep(1000); - - await driver.findElement(By.xpath("//li[contains(text(), '10')]")).click(); - await driver.sleep(1000); - - await driver.findElement(By.xpath("//li[contains(text(), '11')]")).click(); - await driver.sleep(1000); - - await driver.findElement(By.xpath("//li[contains(text(), '12')]")).click(); - await driver.sleep(1000); - - //Click away from dropdown list - await driver.findElement(By.css('#exform > div:nth-child(3) > div > span')).click(); - await driver.sleep(1000); - - console.log('----->| NEXT ACTION: Selected grades: 9, 10, 11, and 12'); - }, - }, - - //DIV - Grade 9 - { - description: 'Validate DIV - Grade 9', - action: async () => { - const multipleChecks = 'DIV - Grade 9'; - const elementIconToolTip = await driver.findElement(By.css('#select2-exgrades-container > li:nth-child(1) > button')).getAttribute('title'); - const element = await driver.findElement(By.css('#select2-exgrades-container > li:nth-child(1)')); - - const elementText = await element.getText(); - const elementToolTip = await element.getAttribute('title'); - - //Track all errors - const errors = []; - - //icon tool-tip - if (elementIconToolTip === 'Remove item') { - console.log('Passed: DIV - Grade 9 icon tool-tip text matched as expected'); - } else { - errors.push(`Expected: DIV - Grade 9 icon tool-tip text: "Remove item"; Actual: "${elementIconToolTip}"`); - } - - //text - if (elementText.includes('9')) { - console.log('Passed: DIV - Grades selection included "9" text matched as expected'); - } else { - throw new Error(`Expected: DIV - Grades selection: "9"; Actual: "${elementText}"`); - } - - //tool-tip - if (elementToolTip === '9') { - console.log('Passed: DIV - Grade 9 tool-tip text matched as expected'); - } else { - errors.push(`Expected: DIV - Grade 9 tool-tip text: "9"; Actual: "${elementToolTip}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //DIV - Grade 10 - { - description: 'Validate DIV - Grade 10', - action: async () => { - const multipleChecks = 'DIV - Grade 10'; - const elementIconToolTip = await driver.findElement(By.css('#select2-exgrades-container > li:nth-child(2) > button')).getAttribute('title'); - const element = await driver.findElement(By.css('#select2-exgrades-container > li:nth-child(2)')); - - const elementText = await element.getText(); - const elementToolTip = await element.getAttribute('title'); - - //Track all errors - const errors = []; - - //icon tool-tip - if (elementIconToolTip === 'Remove item') { - console.log('Passed: DIV - Grade 10 icon tool-tip text matched as expected'); - } else { - errors.push(`Expected: DIV - Grade 10 icon tool-tip text: "Remove item"; Actual: "${elementIconToolTip}"`); - } - - //text - if (elementText.includes('10')) { - console.log('Passed: DIV - Grades selection included "10" text matched as expected'); - } else { - throw new Error(`Expected: DIV - Grades selection: "10"; Actual: "${elementText}"`); - } - - //tool-tip - if (elementToolTip === '10') { - console.log('Passed: DIV - Grade 10 tool-tip text matched as expected'); - } else { - errors.push(`Expected: DIV - Grade 10 tool-tip text: "9"; Actual: "${elementToolTip}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //DIV - Grade 11 - { - description: 'Validate DIV - Grade 11', - action: async () => { - const multipleChecks = 'DIV - Grade 11'; - const elementIconToolTip = await driver.findElement(By.css('#select2-exgrades-container > li:nth-child(3) > button')).getAttribute('title'); - const element = await driver.findElement(By.css('#select2-exgrades-container > li:nth-child(3)')); - - const elementText = await element.getText(); - const elementToolTip = await element.getAttribute('title'); - - //Track all errors - const errors = []; - - //icon tool-tip - if (elementIconToolTip === 'Remove item') { - console.log('Passed: DIV - Grade 11 icon tool-tip text matched as expected'); - } else { - errors.push(`Expected: DIV - Grade 11 icon tool-tip text: "Remove item"; Actual: "${elementIconToolTip}"`); - } - - //text - if (elementText.includes('11')) { - console.log('Passed: DIV - Grades selection included "11" text matched as expected'); - } else { - throw new Error(`Expected: DIV - Grades selection: "11"; Actual: "${elementText}"`); - } - - //tool-tip - if (elementToolTip === '11') { - console.log('Passed: DIV - Grade 11 tool-tip text matched as expected'); - } else { - errors.push(`Expected: DIV - Grade 11 tool-tip text: "9"; Actual: "${elementToolTip}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //DIV - Grade 12 - { - description: 'Validate DIV - Grade 12', - action: async () => { - const multipleChecks = 'DIV - Grade 12'; - const elementIconToolTip = await driver.findElement(By.css('#select2-exgrades-container > li:nth-child(4) > button')).getAttribute('title'); - const element = await driver.findElement(By.css('#select2-exgrades-container > li:nth-child(4)')); - - const elementText = await element.getText(); - const elementToolTip = await element.getAttribute('title'); - - //Track all errors - const errors = []; - - //icon tool-tip - if (elementIconToolTip === 'Remove item') { - console.log('Passed: DIV - Grade 12 icon tool-tip text matched as expected'); - } else { - errors.push(`Expected: DIV - Grade 12 icon tool-tip text: "Remove item"; Actual: "${elementIconToolTip}"`); - } - - //text - if (elementText.includes('12')) { - console.log('Passed: DIV - Grades selection included "12" text matched as expected'); - } else { - throw new Error(`Expected: DIV - Grades selection: "12"; Actual: "${elementText}"`); - } - - //tool-tip - if (elementToolTip === '12') { - console.log('Passed: DIV - Grade 12 tool-tip text matched as expected'); - } else { - errors.push(`Expected: DIV - Grade 12 tool-tip text: "9"; Actual: "${elementToolTip}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //NEXT ACTION - { - description: 'DIV - Click Export button then Close DIV', - action: async () => { - const multipleChecks = 'DIV - Processing status'; - - const errors = []; - - //Capture styles immediately via executeScript BEFORE clicking - //This sets up a MutationObserver to catch the spinner the moment it appears - await driver.executeScript(` - window._spinnerStyles = null; - const observer = new MutationObserver(() => { - const el = document.querySelector('#modalspin strong'); - if (el) { - const style = window.getComputedStyle(el); - const spinDiv = document.querySelector('#modalspin'); - const spinStyle = window.getComputedStyle(spinDiv); - if (spinStyle.display !== 'none') { - window._spinnerStyles = { - text: el.textContent.trim(), - fontFamily: style.getPropertyValue('font-family'), - fontSize: style.getPropertyValue('font-size'), - color: style.getPropertyValue('color') - }; - observer.disconnect(); - } - } - }); - observer.observe(document.querySelector('#modalspin'), { - attributes: true, - attributeFilter: ['style'] - }); - `); - - //Now click Export - await driver.findElement(By.css('#exsubmit')).click(); - console.log('----->| NEXT ACTION: Clicked Export button'); - - //Wait for MutationObserver to capture the styles - await driver.wait(async () => { - const captured = await driver.executeScript(`return window._spinnerStyles !== null;`); - return captured; - }, 15000, 'Processing spinner styles were not captured within 15 seconds'); - - //Get the captured styles - const styles = await driver.executeScript(`return window._spinnerStyles;`); - //console.log('----->| DEBUG captured styles:', JSON.stringify(styles)); - - //text - if (styles.text === 'Processing...') { - console.log('Passed: DIV - Status text matched as expected'); - } else { - errors.push(`Expected: DIV - Status text: "Processing..."; Actual: "${styles.text}"`); - } - - //font - if (styles.fontFamily === 'Poppins, sans-serif') { - console.log('Passed: DIV - Processing... status text font-family matched as expected'); - } else { - errors.push(`Expected: DIV - Processing... status text font-family "Poppins, sans-serif"; Actual: "${styles.fontFamily}"`); - } - - //size - if (styles.fontSize === '23.4px') { - console.log('Passed: DIV - Processing... status text font-size matched as expected'); - } else { - errors.push(`Expected: DIV - Processing... status text font-size "23.4px"; Actual: "${styles.fontSize}"`); - } - - //color - if (styles.color === 'rgb(40, 39, 90)') { - console.log('Passed: DIV - Processing... status text color matched as expected'); - } else { - errors.push(`Expected: DIV - Processing... status text color "rgb(40, 39, 90)"; Actual: "${styles.color}"`); - } - - //Wait until processing is complete - await driver.wait(async () => { - try { - const spinDiv = await driver.findElement(By.css('#modalspin')); - return !(await spinDiv.isDisplayed()); - } catch (e) { - return true; - } - }, 30000, 'Processing... Status did not disappear within 30 seconds'); - console.log('Passed: Processing... Status is no longer visible as expected'); - - await driver.findElement(By.css('#modalclose')).click(); - console.log('----->| NEXT ACTION: Clicked Close button'); - - //Wait for page to load completely - await driver.wait(async () => { - const readyState = await driver.executeScript('return document.readyState'); - return readyState === 'complete'; - }, 20000, 'ExACT Dashboard did not fully load within 60 seconds'); - console.log('Passed: ExACT Dashboard loaded successfully'); - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //NEXT ACTION - { - description: 'Dashboard - Click Alabama More Info icon', - action: async () => { - await driver.findElement(By.css('#stdbody > tr:nth-child(1) > .text-center:nth-child(4) img')).click(); - console.log('----->| NEXT ACTION: Clicked Alabama More Info icon'); - - //Wait until the modal title is located AND visible - await driver.wait(async () => { - try { - const element = await driver.findElement(By.css('.modal-lg .modal-title')); - return await element.isDisplayed(); - } catch (e) { - return false; //Element not ready yet, keep waiting - } - }, 20000, 'Modal did not become visible within 20 seconds'); - - console.log('Passed: DIV - Loaded successfully'); - } - }, - - //Alabama Courses of Study DIV - //DIV - Alabama Courses of Study title - { - description: 'Validate DIV - Alabama Courses of Study title text, color, and size', - action: async () => { - const multipleChecks = 'DIV - Alabama Courses of Study title'; - const element = await driver.findElement(By.css('.modal-lg .modal-title')); - - //Get text, font, size, and color - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color') - - //Track all errors - const errors = []; - - //text - if (elementText === 'Alabama Courses of Study') { - console.log('Passed: DIV - Alabama Courses of Study title matched as expected'); - } else { - errors.push(`Expected: DIV - "Alabama Courses of Study"; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: DIV - Alabama Courses of Study title font-family matched as expected'); - } else { - errors.push(`Expected: DIV - Alabama Courses of Study title font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '18px') { - console.log('Passed: DIV - Alabama Courses of Study title text font-size matched as expected'); - } else { - errors.push(`Expected: DIV - Alabama Courses of Study title text font-size "18px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(40, 39, 90, 1)') { - console.log('Passed: DIV - Alabama Courses of Study title text color matched as expected'); - } else { - errors.push(`Expected: DIV - Alabama Courses of Study title text color "rgba(40, 39, 90, 1)"'; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //DIV - More Info Alabama sub-text - { - description: 'Validate DIV - More Info Alabma sub-text, color, and size', - action: async () => { - const multipleChecks = 'DIV - Alabama sut-text'; - const element = await driver.findElement(By.css('.modal-body > .notenabled')); - - //Get text, font, size, and color - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color') - - //Track all errors - const errors = []; - - //text - if (elementText === '*Not enabled in Profile. If you would like access to any of these standards sets, please Contact Us.') { - console.log('Passed: DIV - More Info Arizona sub-text matched as expected'); - } else { - errors.push(`Expected: DIV - sub-text "*Not enabled in Profile. If you would like access to any of these standards sets, please Contact Us."; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: DIV - More Info Arizona sub-text font-family matched as expected'); - } else { - errors.push(`Expected: DIV - More Info Arizona sub-text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '11.7px') { - console.log('Passed: DIV - More Info Arizona sub-text text font-size matched as expected'); - } else { - errors.push(`Expected: DIV - More Info Arizona sub-text text font-size "11.7px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(119, 119, 119, 1)') { - console.log('Passed: DIV - More Info Arizona sub-text color matched as expected'); - } else { - errors.push(`Expected: DIV - More Info Arizona sub-text text color "rgba(119, 119, 119, 1)"'; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //DIV - More Info Alabama Contact Us link - { - description: 'Validate DIV - More Info Alabama Contact Us link text, color, and size', - action: async () => { - const multipleChecks = 'DIV - Alabama Courses of Study Contact Us link'; - const element = await driver.findElement(By.linkText('Contact Us')); - - //Get text, font, size, color, url - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - const elementURL = await element.getAttribute('href'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Contact Us') { - console.log('Passed: DIV - More Info Alabama sub-text matched as expected'); - } else { - errors.push(`Expected: DIV - More Info Alabama sub-text "Contact Us"; Actual: "${elementText}"`); - } - - //font - if (elementFont === 'Poppins, sans-serif') { - console.log('Passed: DIV - More Info Alabama sub-text font-family matched as expected'); - } else { - errors.push(`Expected: DIV - More Info Alabama sub-text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '11.7px') { - console.log('Passed: DIV - More Info Alabama Contact Us link text font-size matched as expected'); - } else { - errors.push(`Expected: DIV - More Info Alabama Contact Us link text font-size "11.7px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(48, 200, 172, 1)') { - console.log('Passed: DIV - More Info Alabama Contact Us link text color matched as expected'); - } else { - errors.push(`Expected: DIV - More Info Alabama Contact Us link text color "rgba(48, 200, 172, 1)"'; Actual: "${elementColor}"`); - } - - //url - if (elementURL === 'https://edgate.com/contact-us') { - console.log('Passed: DIV - More Info Alabama Contact Us URL link matched as expected'); - } else { - errors.push(`Expected: DIV - More Info Alabama Contact Us URL: "https://edgate.com/contact-us"; Actual: "${elementURL}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //DIV - More Info Alabama Subject column title - { - description: 'Validate DIV - More Info Alabama Subject column title text, color, and size', - action: async () => { - const multipleChecks = 'DIV - Alabama Courses of Study column title'; - const element = await driver.findElement(By.css('#myModal > div > div > div.modal-body > table > thead > tr > th:nth-child(1)')); - - //Get text, font, size, and color - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color') - - //Track all errors - const errors = []; - - //text - if (elementText === 'Subject') { - console.log('Passed: DIV - More Info Arizona Subject column title text matched as expected'); - } else { - errors.push(`Expected: DIV - Arizona column title "Subject"; Actual: "${elementText}"`); - } - - //font - if (elementFont === 'Poppins, sans-serif') { - console.log('Passed: DIV - More Info Arizona Subject column title font-family matched as expected'); - } else { - errors.push(`Expected: DIV - More Info Arizona Subject column title font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '14px') { - console.log('Passed: DIV - More Info Arizona Subject column title text font-size matched as expected'); - } else { - errors.push(`Expected: DIV - More Info Arizona Subject column title text font-size "14px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(94, 105, 116, 1)') { - console.log('Passed: DIV - More Info Arizona Subject column title text color matched as expected'); - } else { - errors.push(`Expected: DIV - More Info Arizona Subject column title text color "rgba(94, 105, 116, 1)"'; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //DIV - More Info Alabama Adopted column title - { - description: 'Validate DIV - More Info Alabama Adopted column title text, color, and size', - action: async () => { - const multipleChecks = 'DIV - Alabama Courses of Study Adopted column title'; - const element = await driver.findElement(By.css('#myModal > div > div > div.modal-body > table > thead > tr > th:nth-child(2)')); - - //Get text, font, size, and color - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color') - - //Track all errors - const errors = []; - - //text - if (elementText === 'Adopted') { - console.log('Passed: DIV - More Info Arizona Adopted column title text matched as expected'); - } else { - errors.push(`Expected: DIV - Arizona column title "Adopted"; Actual: "${elementText}"`); - } - - //font - if (elementFont === 'Poppins, sans-serif') { - console.log('Passed: DIV - More Info Arizona Adopted column title font-family matched as expected'); - } else { - errors.push(`Expected: DIV - More Info Arizona Adopted column title font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '14px') { - console.log('Passed: DIV - More Info Arizona Adopted column title text font-size matched as expected'); - } else { - errors.push(`Expected: DIV - More Info Arizona Adopted column title text font-size "14px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(94, 105, 116, 1)') { - console.log('Passed: DIV - More Info Arizona Adopted column title text color matched as expected'); - } else { - errors.push(`Expected: DIV - More Info Arizona Adopted column title text color "rgba(94, 105, 116, 1)"'; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //DIV - More Info Alabama Grades column title - { - description: 'Validate DIV - More Info Alabama Grades column title text, color, and size', - action: async () => { - const multipleChecks = 'DIV - Alabama Courses of Study Grades column title'; - const element = await driver.findElement(By.css('#myModal > div > div > div.modal-body > table > thead > tr > th:nth-child(3)')); - - //Get text, font, size, and color - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color') - - //Track all errors - const errors = []; - - //text - if (elementText === 'Grades') { - console.log('Passed: DIV - More Info Arizona Grades column title text matched as expected'); - } else { - errors.push(`Expected: DIV - Arizona column title "Grades"; Actual: "${elementText}"`); - } - - //font - if (elementFont === 'Poppins, sans-serif') { - console.log('Passed: DIV - More Info Arizona Grades column title font-family matched as expected'); - } else { - errors.push(`Expected: DIV - More Info Arizona Grades column title font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '14px') { - console.log('Passed: DIV - More Info Arizona Grades column title text font-size matched as expected'); - } else { - errors.push(`Expected: DIV - More Info Arizona Grades column title text font-size "14px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(94, 105, 116, 1)') { - console.log('Passed: DIV - More Info Arizona Grades column title text color matched as expected'); - } else { - errors.push(`Expected: DIV - More Info Arizona Grades column title text color "rgba(94, 105, 116, 1)"'; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //DIV - More Info Alabama Row 1 label - { - description: 'Validate DIV - More Info Alabama Row 1 label text, font, color, and size', - action: async () => { - const multipleChecks = 'DIV - More Info Alabama Row 1 label'; - - const checks = [ - //Subject - { - selector: '.text-success:nth-child(1) > td:nth-child(1)', - label: 'Health and PE', - expected: { - text: 'Health and PE', - font: 'Poppins, sans-serif', - color: 'rgba(40, 167, 69, 1)', - size: '14.3px' - } - }, - - //Adopted - { - selector: '.text-success:nth-child(1) > td:nth-child(2)', - label: '2019', - expected: { - text: '2019', - font: 'Poppins, sans-serif', - color: 'rgba(40, 167, 69, 1)', - size: '14.3px' - } - }, - - //All Grades list - { - selector: '.text-success:nth-child(1) > td:nth-child(3)', - label: 'Grades List', - expected: { - text: 'K, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12', - font: 'Poppins, sans-serif', - color: 'rgba(40, 167, 69, 1)', - size: '14.3px' - } - } - ]; - - const allErrors = []; - - async function validateCell({ selector, label, expected }) { - const element = await driver.findElement(By.css(selector)); - - const actualText = await element.getText(); - const actualFont = await element.getCssValue('font-family'); - const actualSize = await element.getCssValue('font-size'); - const actualColor = await element.getCssValue('color'); - - const errors = []; - - //text - if (actualText === expected.text) { - console.log(`Passed: DIV - More Info Alabama Row 1 ${label} label text matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 1 "${expected.text}"; Actual: "${actualText}"`); - } - - //font - if (actualFont === expected.font) { - console.log(`Passed: DIV - More Info Alabama Row 1 ${label} label text font-family matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 1 "${expected.font}"; Actual: "${actualFont}"`); - } - - //size - if (actualSize === expected.size) { - console.log(`Passed: DIV - More Info Alabama Row 1 ${label} label text font-size matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 1 ${label} label text font-size "${expected.size}"; Actual: "${actualSize}"`); - } - - //color - if (actualColor === expected.color) { - console.log(`Passed: DIV - More Info Alabama Row 1 ${label} label text color matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 1 ${label} label text color "${expected.color}"; Actual: "${actualColor}"`); - } - - return errors; - } - - for (const check of checks) { - const errs = await validateCell(check); - allErrors.push(...errs); - } - - if (allErrors.length > 0) { - if (allErrors.length > 1) allErrors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - throw new Error(allErrors.join('\n')); - } - } - }, - - //DIV - More Info Alabama Row 2 label - { - description: 'Validate DIV - More Info Alabama Row 2 label text, font, color, and size', - action: async () => { - const multipleChecks = 'DIV - More Info Alabama Row 2 label'; - - const checks = [ - //Subject - { - selector: '.text-success:nth-child(2) > td:nth-child(1)', - label: 'Language Arts', - expected: { - text: 'Language Arts', - font: 'Poppins, sans-serif', - color: 'rgba(40, 167, 69, 1)', - size: '14.3px' - } - }, - - //Adopted - { - selector: '.text-success:nth-child(2) > td:nth-child(2)', - label: '2021/Effective 2022', - expected: { - text: '2021/Effective 2022', - font: 'Poppins, sans-serif', - color: 'rgba(40, 167, 69, 1)', - size: '14.3px' - } - }, - - //All Grades list - { - selector: '.text-success:nth-child(2) > td:nth-child(3)', - label: 'Grades List', - expected: { - text: 'K, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12', - font: 'Poppins, sans-serif', - color: 'rgba(40, 167, 69, 1)', - size: '14.3px' - } - } - ]; - - const allErrors = []; - - async function validateCell({ selector, label, expected }) { - const element = await driver.findElement(By.css(selector)); - - const actualText = await element.getText(); - const actualFont = await element.getCssValue('font-family'); - const actualSize = await element.getCssValue('font-size'); - const actualColor = await element.getCssValue('color'); - - const errors = []; - - //text - if (actualText === expected.text) { - console.log(`Passed: DIV - More Info Alabama Row 2 ${label} label text matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 2 "${expected.text}"; Actual: "${actualText}"`); - } - - //font - if (actualFont === expected.font) { - console.log(`Passed: DIV - More Info Alabama Row 2 ${label} label text font matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 2 "${expected.font}"; Actual: "${actualFont}"`); - } - - //size - if (actualSize === expected.size) { - console.log(`Passed: DIV - More Info Alabama Row 2 ${label} label text font-size matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 2 ${label} label text font-size "${expected.size}"; Actual: "${actualSize}"`); - } - - //color - if (actualColor === expected.color) { - console.log(`Passed: DIV - More Info Alabama Row 2 ${label} label text color matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 2 ${label} label text color "${expected.color}"; Actual: "${actualColor}"`); - } - - return errors; - } - - for (const check of checks) { - const errs = await validateCell(check); - allErrors.push(...errs); - } - - if (allErrors.length > 0) { - if (allErrors.length > 1) allErrors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - throw new Error(allErrors.join('\n')); - } - } - }, - - //DIV - More Info Alabama Row 3 label - { - description: 'Validate DIV - More Info Alabama Row 3 label text, color, and font size', - action: async () => { - const multipleChecks = 'DIV - More Info Alabama Row 3 label'; - - const checks = [ - //Subject - { - selector: '.text-success:nth-child(3) > td:nth-child(1)', - label: 'Mathematics', - expected: { - text: 'Mathematics', - font: 'Poppins, sans-serif', - color: 'rgba(40, 167, 69, 1)', - size: '14.3px' - } - }, - - //Adopted - { - selector: '.text-success:nth-child(3) > td:nth-child(2)', - label: '2019/Impl. 2020', - expected: { - text: '2019/Impl. 2020', - font: 'Poppins, sans-serif', - color: 'rgba(40, 167, 69, 1)', - size: '14.3px' - } - }, - - //All Grades list - { - selector: '.text-success:nth-child(3) > td:nth-child(3)', - label: 'Grades List', - expected: { - text: 'K, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12', - font: 'Poppins, sans-serif', - color: 'rgba(40, 167, 69, 1)', - size: '14.3px' - } - } - ]; - - const allErrors = []; - - async function validateCell({ selector, label, expected }) { - const element = await driver.findElement(By.css(selector)); - - const actualText = await element.getText(); - const actualFont = await element.getCssValue('font-family'); - const actualSize = await element.getCssValue('font-size'); - const actualColor = await element.getCssValue('color'); - - const errors = []; - - //text - if (actualText === expected.text) { - console.log(`Passed: DIV - More Info Alabama Row 3 ${label} label text matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 3 "${expected.text}"; Actual: "${actualText}"`); - } - - //font - if (actualFont === expected.font) { - console.log(`Passed: DIV - More Info Alabama Row 3 ${label} label text font matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 3 "${expected.font}"; Actual: "${actualFont}"`); - } - - //size - if (actualSize === expected.size) { - console.log(`Passed: DIV - More Info Alabama Row 3 ${label} label text font-size matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 3 ${label} label text font-size "${expected.size}"; Actual: "${actualSize}"`); - } - - //color - if (actualColor === expected.color) { - console.log(`Passed: DIV - More Info Alabama Row 3 ${label} label text color matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 3 ${label} label text color "${expected.color}"; Actual: "${actualColor}"`); - } - - return errors; - } - - for (const check of checks) { - const errs = await validateCell(check); - allErrors.push(...errs); - } - - if (allErrors.length > 0) { - if (allErrors.length > 1) allErrors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - throw new Error(allErrors.join('\n')); - } - } - }, - - //DIV - More Info Alabama Row 4 label - { - description: 'Validate DIV - More Info Alabama Row 4 label text, color, and font size', - action: async () => { - const multipleChecks = 'DIV - More Info Alabama Row 4 label'; - - const checks = [ - //Subject - { - selector: '.text-success:nth-child(4) > td:nth-child(1)', - label: 'Science', - expected: { - text: 'Science', - font: 'Poppins, sans-serif', - color: 'rgba(40, 167, 69, 1)', - size: '14.3px' - } - }, - - //Adopted - { - selector: '.text-success:nth-child(4) > td:nth-child(2)', - label: '2023', - expected: { - text: '2023', - font: 'Poppins, sans-serif', - color: 'rgba(40, 167, 69, 1)', - size: '14.3px' - } - }, - - //All Grades list - { - selector: '.text-success:nth-child(4) > td:nth-child(3)', - label: 'Grades List', - expected: { - text: 'K, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12', - font: 'Poppins, sans-serif', - color: 'rgba(40, 167, 69, 1)', - size: '14.3px' - } - } - ]; - - const allErrors = []; - - async function validateCell({ selector, label, expected }) { - const element = await driver.findElement(By.css(selector)); - - const actualText = await element.getText(); - const actualFont = await element.getCssValue('font-family'); - const actualSize = await element.getCssValue('font-size'); - const actualColor = await element.getCssValue('color'); - - const errors = []; - - //text - if (actualText === expected.text) { - console.log(`Passed: DIV - More Info Alabama Row 4 ${label} label text matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 4 "${expected.text}"; Actual: "${actualText}"`); - } - - //font - if (actualFont === expected.font) { - console.log(`Passed: DIV - More Info Alabama Row 4 ${label} label text font matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 4 "${expected.font}"; Actual: "${actualFont}"`); - } - - //size - if (actualSize === expected.size) { - console.log(`Passed: DIV - More Info Alabama Row 4 ${label} label text font-size matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 4 ${label} label text font-size "${expected.size}"; Actual: "${actualSize}"`); - } - - //color - if (actualColor === expected.color) { - console.log(`Passed: DIV - More Info Alabama Row 4 ${label} label text color matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 4 ${label} label text color "${expected.color}"; Actual: "${actualColor}"`); - } - - return errors; - } - - for (const check of checks) { - const errs = await validateCell(check); - allErrors.push(...errs); - } - - if (allErrors.length > 0) { - if (allErrors.length > 1) allErrors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - throw new Error(allErrors.join('\n')); - } - } - }, - - //DIV - More Info Alabama Row 5 label - { - description: 'Validate DIV - More Info Alabama Row 5 label text, color, and font size', - action: async () => { - const multipleChecks = 'DIV - More Info Alabama Row 5 label'; - - const checks = [ - //Subject - { - selector: '.text-success:nth-child(5) > td:nth-child(1)', - label: 'Social Studies', - expected: { - text: 'Social Studies', - font: 'Poppins, sans-serif', - color: 'rgba(40, 167, 69, 1)', - size: '14.3px' - } - }, - - //Adopted - { - selector: '.text-success:nth-child(5) > td:nth-child(2)', - label: '2024', - expected: { - text: '2024', - font: 'Poppins, sans-serif', - color: 'rgba(40, 167, 69, 1)', - size: '14.3px' - } - }, - - //All Grades list - { - selector: '.text-success:nth-child(5) > td:nth-child(3)', - label: 'Grades List', - expected: { - text: 'K, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12', - font: 'Poppins, sans-serif', - color: 'rgba(40, 167, 69, 1)', - size: '14.3px' - } - } - ]; - - const allErrors = []; - - async function validateCell({ selector, label, expected }) { - const element = await driver.findElement(By.css(selector)); - - const actualText = await element.getText(); - const actualFont = await element.getCssValue('font-family'); - const actualSize = await element.getCssValue('font-size'); - const actualColor = await element.getCssValue('color'); - - const errors = []; - - //text - if (actualText === expected.text) { - console.log(`Passed: DIV - More Info Alabama Row 5 ${label} label text matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 5 "${expected.text}"; Actual: "${actualText}"`); - } - - //font - if (actualFont === expected.font) { - console.log(`Passed: DIV - More Info Alabama Row 5 ${label} label text font matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 5 "${expected.font}"; Actual: "${actualFont}"`); - } - - //size - if (actualSize === expected.size) { - console.log(`Passed: DIV - More Info Alabama Row 5 ${label} label text font-size matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 5 ${label} label text font-size "${expected.size}"; Actual: "${actualSize}"`); - } - - //color - if (actualColor === expected.color) { - console.log(`Passed: DIV - More Info Alabama Row 5 ${label} label text color matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 5 ${label} label text color "${expected.color}"; Actual: "${actualColor}"`); - } - - return errors; - } - - for (const check of checks) { - const errs = await validateCell(check); - allErrors.push(...errs); - } - - if (allErrors.length > 0) { - if (allErrors.length > 1) allErrors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - throw new Error(allErrors.join('\n')); - } - } - }, - - //DIV - More Info Alabama Row 6 label - { - description: 'Validate DIV - More Info Alabama Row 6 label text, color, and font size', - action: async () => { - const multipleChecks = 'DIV - More Info Alabama Row 6 label'; - - const checks = [ - //Subject - { - selector: '.text-success:nth-child(6) > td:nth-child(1)', - label: 'Technology Education', - expected: { - text: 'Technology Education', - font: 'Poppins, sans-serif', - color: 'rgba(40, 167, 69, 1)', - size: '14.3px' - } - }, - - //Adopted - { - selector: '.text-success:nth-child(6) > td:nth-child(2)', - label: '2025', - expected: { - text: '2025', - font: 'Poppins, sans-serif', - color: 'rgba(40, 167, 69, 1)', - size: '14.3px' - } - }, - - //All Grades list - { - selector: '.text-success:nth-child(6) > td:nth-child(3)', - label: 'Grades List', - expected: { - text: 'K, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12', - font: 'Poppins, sans-serif', - color: 'rgba(40, 167, 69, 1)', - size: '14.3px' - } - } - ]; - - const allErrors = []; - - async function validateCell({ selector, label, expected }) { - const element = await driver.findElement(By.css(selector)); - - const actualText = await element.getText(); - const actualFont = await element.getCssValue('font-family'); - const actualSize = await element.getCssValue('font-size'); - const actualColor = await element.getCssValue('color'); - - const errors = []; - - //text - if (actualText === expected.text) { - console.log(`Passed: DIV - More Info Alabama Row 6 ${label} label text matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 6 "${expected.text}"; Actual: "${actualText}"`); - } - - //font - if (actualFont === expected.font) { - console.log(`Passed: DIV - More Info Alabama Row 6 ${label} label text font matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 6 "${expected.font}"; Actual: "${actualFont}"`); - } - - //size - if (actualSize === expected.size) { - console.log(`Passed: DIV - More Info Alabama Row 6 ${label} label text font-size matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 6 ${label} label text font-size "${expected.size}"; Actual: "${actualSize}"`); - } - - //color - if (actualColor === expected.color) { - console.log(`Passed: DIV - More Info Alabama Row 6 ${label} label text color matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 6 ${label} label text color "${expected.color}"; Actual: "${actualColor}"`); - } - - return errors; - } - - for (const check of checks) { - const errs = await validateCell(check); - allErrors.push(...errs); - } - - if (allErrors.length > 0) { - if (allErrors.length > 1) allErrors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - throw new Error(allErrors.join('\n')); - } - } - }, - - //DIV - More Info Alabama Row 7 label - { - description: 'Validate DIV - More Info Alabama Row 7 label text, color, and font size', - action: async () => { - const multipleChecks = 'DIV - More Info Alabama Row 7 label'; - - const checks = [ - //Subject - { - selector: '.notenabled:nth-child(7) > td:nth-child(1)', - label: 'Arts Education*', - expected: { - text: 'Arts Education*', - font: 'Poppins, sans-serif', - color: 'rgba(119, 119, 119, 1)', - size: '12.87px' - } - }, - - //Adopted - { - selector: '.notenabled:nth-child(7) > td:nth-child(2)', - label: '2017', - expected: { - text: '2017', - font: 'Poppins, sans-serif', - color: 'rgba(119, 119, 119, 1)', - size: '12.87px' - } - }, - - //Grades - { - selector: '.notenabled:nth-child(7) > td:nth-child(3)', - label: 'Grades List', - expected: { - text: 'K, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12', - font: 'Poppins, sans-serif', - color: 'rgba(119, 119, 119, 1)', - size: '12.87px' - } - } - ]; - - const allErrors = []; - - async function validateCell({ selector, label, expected }) { - const element = await driver.findElement(By.css(selector)); - - const actualText = await element.getText(); - const actualFont = await element.getCssValue('font-family'); - const actualSize = await element.getCssValue('font-size'); - const actualColor = await element.getCssValue('color'); - - const errors = []; - - //text - if (actualText === expected.text) { - console.log(`Passed: DIV - More Info Alabama Row 7 ${label} label text matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 7 "${expected.text}"; Actual: "${actualText}"`); - } - - //font - if (actualFont === expected.font) { - console.log(`Passed: DIV - More Info Alabama Row 7 ${label} label text font matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 7 "${expected.font}"; Actual: "${actualFont}"`); - } - - //size - if (actualSize === expected.size) { - console.log(`Passed: DIV - More Info Alabama Row 7 ${label} label text font-size matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 7 ${label} label text font-size "${expected.size}"; Actual: "${actualSize}"`); - } - - //color - if (actualColor === expected.color) { - console.log(`Passed: DIV - More Info Alabama Row 7 ${label} label text color matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 7 ${label} label text color "${expected.color}"; Actual: "${actualColor}"`); - } - - return errors; - } - - for (const check of checks) { - const errs = await validateCell(check); - allErrors.push(...errs); - } - - if (allErrors.length > 0) { - if (allErrors.length > 1) allErrors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - throw new Error(allErrors.join('\n')); - } - } - }, - - //DIV - More Info Alabama Row 8 label - { - description: 'Validate DIV - More Info Alabama Row 8 label text, color, and font size', - action: async () => { - const multipleChecks = 'DIV - More Info Alabama Row 8 label'; - - const checks = [ - //Subject - { - selector: '.notenabled:nth-child(8) > td:nth-child(1)', - label: 'Career Development*', - expected: { - text: 'Career Development*', - font: 'Poppins, sans-serif', - color: 'rgba(119, 119, 119, 1)', - size: '12.87px' - } - }, - - //Adopted - { - selector: '.notenabled:nth-child(8) > td:nth-child(2)', - label: '2016', - expected: { - text: '2016', - font: 'Poppins, sans-serif', - color: 'rgba(119, 119, 119, 1)', - size: '12.87px' - } - }, - - //All Grades list - { - selector: '.notenabled:nth-child(8) > td:nth-child(3)', - label: 'Grades List', - expected: { - text: '9, 10, 11, 12', - font: 'Poppins, sans-serif', - color: 'rgba(119, 119, 119, 1)', - size: '12.87px' - } - } - ]; - - const allErrors = []; - - async function validateCell({ selector, label, expected }) { - const element = await driver.findElement(By.css(selector)); - - const actualText = await element.getText(); - const actualFont = await element.getCssValue('font-family'); - const actualSize = await element.getCssValue('font-size'); - const actualColor = await element.getCssValue('color'); - - const errors = []; - - //text - if (actualText === expected.text) { - console.log(`Passed: DIV - More Info Alabama Row 8 ${label} label text matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 8 "${expected.text}"; Actual: "${actualText}"`); - } - - //font - if (actualFont === expected.font) { - console.log(`Passed: DIV - More Info Alabama Row 8 ${label} label text font matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 8 "${expected.font}"; Actual: "${actualFont}"`); - } - - //size - if (actualSize === expected.size) { - console.log(`Passed: DIV - More Info Alabama Row 8 ${label} label text font-size matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 8 ${label} label text font-size "${expected.size}"; Actual: "${actualSize}"`); - } - - //color - if (actualColor === expected.color) { - console.log(`Passed: DIV - More Info Alabama Row 8 ${label} label text color matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 8 ${label} label text color "${expected.color}"; Actual: "${actualColor}"`); - } - - return errors; - } - - for (const check of checks) { - const errs = await validateCell(check); - allErrors.push(...errs); - } - - if (allErrors.length > 0) { - if (allErrors.length > 1) allErrors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - throw new Error(allErrors.join('\n')); - } - } - }, - - //DIV - More Info Alabama Row 9 label text - { - description: 'Validate DIV - More Info Alabama Row 9 label text, color, and font size', - action: async () => { - const multipleChecks = 'DIV - More Info Alabama Row 9 label'; - - const checks = [ - //Subject - { - selector: '.notenabled:nth-child(9) > td:nth-child(1)', - label: 'Early Childhood Education*', - expected: { - text: 'Early Childhood Education*', - font: 'Poppins, sans-serif', - color: 'rgba(119, 119, 119, 1)', - size: '12.87px' - } - }, - - //Adopted - { - selector: '.notenabled:nth-child(9) > td:nth-child(2)', - label: '2023', - expected: { - text: '2023', - font: 'Poppins, sans-serif', - color: 'rgba(119, 119, 119, 1)', - size: '12.87px' - } - }, - - //Ages 3-5* - { - selector: '.notenabled:nth-child(9) .notenabled', - label: 'Ages 3-5*', - expected: { - text: 'Ages 3-5*', - font: 'Poppins, sans-serif', - color: 'rgba(119, 119, 119, 1)', - size: '11.583px' - } - }, - - //All Grades list 1 - { - selector: '.notenabled:nth-child(2)', - label: 'Ages Birth to 12 months*', - expected: { - text: 'Ages Birth to 12 months*', - font: 'Poppins, sans-serif', - color: 'rgba(119, 119, 119, 1)', - size: '11.583px' - } - }, - - //All Grades list 2 - { - selector: '.notenabled:nth-child(3)', - label: 'Ages 13 to 24 months*', - expected: { - text: 'Ages 13 to 24 months*', - font: 'Poppins, sans-serif', - color: 'rgba(119, 119, 119, 1)', - size: '11.583px' - } - }, - - //All Grades list 3 - { - selector: '.notenabled:nth-child(4)', - label: 'Ages 25 to 36 months*', - expected: { - text: 'Ages 25 to 36 months*', - font: 'Poppins, sans-serif', - color: 'rgba(119, 119, 119, 1)', - size: '11.583px' - } - } - ]; - - const allErrors = []; - - async function validateCell({ selector, label, expected }) { - const element = await driver.findElement(By.css(selector)); - - const actualText = await element.getText(); - const actualFont = await element.getCssValue('font-family'); - const actualSize = await element.getCssValue('font-size'); - const actualColor = await element.getCssValue('color'); - - const errors = []; - - //text - if (actualText === expected.text) { - console.log(`Passed: DIV - More Info Alabama Row 9 ${label} label text matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 9 "${expected.text}"; Actual: "${actualText}"`); - } - - //font - if (actualFont === expected.font) { - console.log(`Passed: DIV - More Info Alabama Row 9 ${label} label text font matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 9 "${expected.font}"; Actual: "${actualFont}"`); - } - - //size - if (actualSize === expected.size) { - console.log(`Passed: DIV - More Info Alabama Row 9 ${label} label text font-size matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 9 ${label} label text font-size "${expected.size}"; Actual: "${actualSize}"`); - } - - //color - if (actualColor === expected.color) { - console.log(`Passed: DIV - More Info Alabama Row 9 ${label} label text color matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 9 ${label} label text color "${expected.color}"; Actual: "${actualColor}"`); - } - - return errors; - } - - for (const check of checks) { - const errs = await validateCell(check); - allErrors.push(...errs); - } - - if (allErrors.length > 0) { - if (allErrors.length > 1) allErrors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - throw new Error(allErrors.join('\n')); - } - } - }, - - //DIV - More Info Alabama Row 10 label text - { - description: 'Validate DIV - More Info Alabama Row 10 label text, color, and font size', - action: async () => { - const multipleChecks = 'DIV - More Info Alabama Row 10 label'; - - const checks = [ - //Subject - { - selector: '.notenabled:nth-child(10) > td:nth-child(1)', - label: 'English Language Learners*', - expected: { - text: 'English Language Learners*', - font: 'Poppins, sans-serif', - color: 'rgba(119, 119, 119, 1)', - size: '12.87px' - } - }, - - //Adopted - { - selector: '.notenabled:nth-child(10) > td:nth-child(2)', - label: '2020', - expected: { - text: '2020', - font: 'Poppins, sans-serif', - color: 'rgba(119, 119, 119, 1)', - size: '12.87px' - } - }, - - //All Grades list - { - selector: '.notenabled:nth-child(10) > td:nth-child(3)', - label: 'Grades List', - expected: { - text: 'K, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12', - font: 'Poppins, sans-serif', - color: 'rgba(119, 119, 119, 1)', - size: '12.87px' - } - } - ]; - - const allErrors = []; - - async function validateCell({ selector, label, expected }) { - const element = await driver.findElement(By.css(selector)); - - const actualText = await element.getText(); - const actualFont = await element.getCssValue('font-family'); - const actualSize = await element.getCssValue('font-size'); - const actualColor = await element.getCssValue('color'); - - const errors = []; - - //text - if (actualText === expected.text) { - console.log(`Passed: DIV - More Info Alabama Row 10 ${label} label text matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 10 "${expected.text}"; Actual: "${actualText}"`); - } - - //font - if (actualFont === expected.font) { - console.log(`Passed: DIV - More Info Alabama Row 10 ${label} label text font matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 10 "${expected.font}"; Actual: "${actualFont}"`); - } - - //size - if (actualSize === expected.size) { - console.log(`Passed: DIV - More Info Alabama Row 10 ${label} label text font-size matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 10 ${label} label text font-size "${expected.size}"; Actual: "${actualSize}"`); - } - - //color - if (actualColor === expected.color) { - console.log(`Passed: DIV - More Info Alabama Row 10 ${label} label text color matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 10 ${label} label text color "${expected.color}"; Actual: "${actualColor}"`); - } - - return errors; - } - - for (const check of checks) { - const errs = await validateCell(check); - allErrors.push(...errs); - } - - if (allErrors.length > 0) { - if (allErrors.length > 1) allErrors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - throw new Error(allErrors.join('\n')); - } - } - }, - - //DIV - More Info Alabama Row 11 label - { - description: 'Validate DIV - More Info Alabama Row 11 label text, color, and font size', - action: async () => { - const multipleChecks = 'DIV - More Info Alabama Row 11 label'; - - const checks = [ - //Subject - { - selector: '.notenabled:nth-child(11) > td:nth-child(1)', - label: 'Social and Emotional Learning*', - expected: { - text: 'Social and Emotional Learning*', - font: 'Poppins, sans-serif', - color: 'rgba(119, 119, 119, 1)', - size: '12.87px' - } - }, - - //Adopted - { - selector: '.notenabled:nth-child(11) > td:nth-child(2)', - label: '2013', - expected: { - text: '2013', - font: 'Poppins, sans-serif', - color: 'rgba(119, 119, 119, 1)', - size: '12.87px' - } - }, - - //Pre K* - { - selector: '.notenabled:nth-child(11) .notenabled', - label: 'Pre K*', - expected: { - text: 'Pre K*', - font: 'Poppins, sans-serif', - color: 'rgba(119, 119, 119, 1)', - size: '11.583px' - } - } - ]; - - const allErrors = []; - - async function validateCell({ selector, label, expected }) { - const element = await driver.findElement(By.css(selector)); - - const actualText = await element.getText(); - const actualFont = await element.getCssValue('font-family'); - const actualSize = await element.getCssValue('font-size'); - const actualColor = await element.getCssValue('color'); - - const errors = []; - - //text - if (actualText === expected.text) { - console.log(`Passed: DIV - More Info Alabama Row 11 ${label} label text matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 11 "${expected.text}"; Actual: "${actualText}"`); - } - - //font - if (actualFont === expected.font) { - console.log(`Passed: DIV - More Info Alabama Row 11 ${label} label text font matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 11 "${expected.font}"; Actual: "${actualFont}"`); - } - - //size - if (actualSize === expected.size) { - console.log(`Passed: DIV - More Info Alabama Row 11 ${label} label text font-size matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 11 ${label} label text font-size "${expected.size}"; Actual: "${actualSize}"`); - } - - //color - if (actualColor === expected.color) { - console.log(`Passed: DIV - More Info Alabama Row 11 ${label} label text color matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 11 ${label} label text color "${expected.color}"; Actual: "${actualColor}"`); - } - - return errors; - } - - for (const check of checks) { - const errs = await validateCell(check); - allErrors.push(...errs); - } - - if (allErrors.length > 0) { - if (allErrors.length > 1) allErrors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - throw new Error(allErrors.join('\n')); - } - } - }, - - //DIV - More Info Alabama Row 12 label text - { - description: 'Validate DIV - More Info Alabama Row 12 label text, color, and font size', - action: async () => { - const multipleChecks = 'DIV - More Info Alabama Row 12 label'; - - const checks = [ - //Subject - { - selector: '.notenabled:nth-child(12) > td:nth-child(1)', - label: 'World Languages*', - expected: { - text: 'World Languages*', - font: 'Poppins, sans-serif', - color: 'rgba(119, 119, 119, 1)', - size: '12.87px' - } - }, - - //Adopted - { - selector: '.notenabled:nth-child(12) > td:nth-child(2)', - label: '2017', - expected: { - text: '2017', - font: 'Poppins, sans-serif', - color: 'rgba(119, 119, 119, 1)', - size: '12.87px' - } - }, - - //All Grades list - { - selector: '.notenabled:nth-child(12) > td:nth-child(3)', - label: 'Grades List', - expected: { - text: 'K, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12', - font: 'Poppins, sans-serif', - color: 'rgba(119, 119, 119, 1)', - size: '12.87px' - } - } - ]; - - const allErrors = []; - - async function validateCell({ selector, label, expected }) { - const element = await driver.findElement(By.css(selector)); - - const actualText = await element.getText(); - const actualFont = await element.getCssValue('font-family'); - const actualSize = await element.getCssValue('font-size'); - const actualColor = await element.getCssValue('color'); - - const errors = []; - - //text - if (actualText === expected.text) { - console.log(`Passed: DIV - More Info Alabama Row 10 ${label} label text matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 10 "${expected.text}"; Actual: "${actualText}"`); - } - - //font - if (actualFont === expected.font) { - console.log(`Passed: DIV - More Info Alabama Row 10 ${label} label text font matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 10 "${expected.font}"; Actual: "${actualFont}"`); - } - - //size - if (actualSize === expected.size) { - console.log(`Passed: DIV - More Info Alabama Row 10 ${label} label text font-size matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 10 ${label} label text font-size "${expected.size}"; Actual: "${actualSize}"`); - } - - //color - if (actualColor === expected.color) { - console.log(`Passed: DIV - More Info Alabama Row 10 ${label} label text color matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 10 ${label} label text color "${expected.color}"; Actual: "${actualColor}"`); - } - - return errors; - } - - for (const check of checks) { - const errs = await validateCell(check); - allErrors.push(...errs); - } - - if (allErrors.length > 0) { - if (allErrors.length > 1) allErrors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - throw new Error(allErrors.join('\n')); - } - } - }, - - //NEXT ACTION - { - description: 'Dashboard - Click DIV X icon', - action: async () => { - await driver.findElement(By.css('.modal-lg .modal-header span')).click(); - console.log('----->| NEXT ACTION: Clicked DIV X icon'); - - //Wait for page to load completely - await driver.wait(async () => { - const readyState = await driver.executeScript('return document.readyState'); - return readyState === 'complete'; - }, 20000, 'ExACT Dashboard did not fully load within 60 seconds'); - console.log('Passed: ExACT Dashboard loaded successfully'); - } - }, - - //NEXT ACTION - { - description: 'Dashboard - Click Alabama View icon', - action: async () => { - await driver.findElement(By.css('tr:nth-child(1) > .text-center:nth-child(5) img')).click(); - console.log('----->| NEXT ACTION: Clicked Alabama View icon'); - - //Wait for page readyState - await driver.wait(async () => { - const readyState = await driver.executeScript('return document.readyState'); - return readyState === 'complete'; - }, 30000, 'Browse standards page did not fully load within 30 seconds'); - - //Wait until the modal title is located AND visible - await driver.wait(async () => { - try { - const element = await driver.findElement(By.linkText('Content')); - return await element.isDisplayed(); - } catch (e) { - return false; //Element not ready yet, keep waiting - } - }, 20000, 'Content tab did not become visible within 20 seconds'); - - console.log('Passed: Content tab loaded successfully'); - } - }, - - //Content tab title - { - description: 'Validate Content tab title text, size, and color', - action: async () => { - const multipleChecks = 'Content tab title'; - const element = await driver.findElement(By.linkText('Content')); - - //Get text, font, size, and color - const elementText = await element.getText(); - const elementTextFont = await element.getCssValue('font-family'); - const elementTextSize = await element.getCssValue('font-size'); - const elementTextColor = await element.getCssValue('color'); - const elementButtonColor = await element.getCssValue('background-color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Content') { - console.log('Passed: Content tab title text matched as expected'); - } else { - errors.push(`Expected: "Content"; Actual: "${elementText}"`); - } - - //font - if (elementTextFont === 'Poppins, sans-serif') { - console.log('Passed: Content tab title font-family matched as expected'); - } else { - errors.push(`Expected: Content tab title font-family "Poppins, sans-serif"; Actual: ${elementTextFont}`); - } - - //size - if (elementTextSize === '15px') { - console.log('Passed: Content tab title text font-size matched as expected'); - } else { - errors.push(`Expected: Content tab title text font-size "15px"; Actual: "${elementTextSize}"`); - } - - //color - if (elementTextColor === 'rgba(182, 186, 181, 1)') { - console.log('Passed: Content tab title text color matched as expected'); - } else { - errors.push(`Expected: Content tab title text color: "rgba(182, 186, 181, 1)"; Actual: "${elementTextColor}"`); - } - - //button color - if (elementButtonColor === 'rgba(0, 0, 0, 0)') { - console.log('Passed: Content tab background color matched as expected'); - } else { - errors.push(`Expected: Content tab background color: "rgba(0, 0, 0, 0)"; Actual: "${elementButtonColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Standards tab tab title (active) - { - description: 'Validate Standards tab title text, size, and color', - action: async () => { - const multipleChecks = 'By Standard tab title'; - const element = await driver.findElement(By.linkText('Standards')); - - //Get text, font, size, and color - const elementText = await element.getText(); - const elementTextFont = await element.getCssValue('font-family'); - const elementTextSize = await element.getCssValue('font-size'); - const elementTextColor = await element.getCssValue('color'); - const elementButtonColor = await element.getCssValue('background-color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Standards') { - console.log('Passed: Standards tab title text matched as expected'); - } else { - errors.push(`Expected: "Standards"; Actual: "${elementText}"`); - } - - //font - if (elementTextFont === 'Poppins, sans-serif') { - console.log('Passed: Standards tab title font-family matched as expected'); - } else { - errors.push(`Expected: Standards tab title font-family "Poppins, sans-serif"; Actual: ${elementTextFont}`); - } - - //size - if (elementTextSize === '15px') { - console.log('Passed: Standards tab title text font-size matched as expected'); - } else { - errors.push(`Expected: Standards tab title text font-size "15px"; Actual: "${elementTextSize}"`); - } - - //color - if (elementTextColor === 'rgba(255, 255, 255, 1)') { - console.log('Passed: Standards tab title text color matched as expected'); - } else { - errors.push(`Expected: Standards tab title text color: "rgba(255, 255, 255, 1)"; Actual: "${elementTextColor}"`); - } - - //button color - if (elementButtonColor === 'rgba(40, 39, 90, 1)') { - console.log('Passed: Standards tab background color matched as expected'); - } else { - errors.push(`Expected: Standards tab background color: "rgba(40, 39, 90, 1)"; Actual: "${elementButtonColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //AutoAlign tab title - { - description: 'Validate AutoAlign tab title text, size, and color', - action: async () => { - const multipleChecks = 'AutoAlign tab title'; - const element = await driver.findElement(By.linkText('AutoAlign')); - - //Get text, font, size, and color - const elementText = await element.getText(); - const elementTextFont = await element.getCssValue('font-family'); - const elementTextSize = await element.getCssValue('font-size'); - const elementTextColor = await element.getCssValue('color'); - const elementButtonColor = await element.getCssValue('background-color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'AutoAlign') { - console.log('Passed: AutoAlign tab title text matched as expected'); - } else { - errors.push(`Expected: "AutoAlign"; Actual: "${elementText}"`); - } - - //font - if (elementTextFont === 'Poppins, sans-serif') { - console.log('Passed: AutoAlign tab title font-family matched as expected'); - } else { - errors.push(`Expected: AutoAlign tab title font-family "DM Serif Display, serif"; Actual: ${elementTextFont}`); - } - - //size - if (elementTextSize === '15px') { - console.log('Passed: AutoAlign tab title text font-size matched as expected'); - } else { - errors.push(`Expected: AutoAlign tab title text font-size "15px"; Actual: "${elementTextSize}"`); - } - - //color - if (elementTextColor === 'rgba(182, 186, 181, 1)') { - console.log('Passed: AutoAlign tab title text color matched as expected'); - } else { - errors.push(`Expected: AutoAlign tab title text color: "rgba(182, 186, 181, 1)"; Actual: "${elementTextColor}"`); - } - - //button color - if (elementButtonColor === 'rgba(0, 0, 0, 0)') { - console.log('Passed: AutoAlign tab background color matched as expected'); - } else { - errors.push(`Expected: AutoAlign tab background color: "rgba(0, 0, 0, 0)"; Actual: "${elementButtonColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Browse - Browse standards sub-title - { - description: 'Validate Browse - Browse standards sub-title text, color, and size', - action: async () => { - const multipleChecks = 'Browse sub-title'; - const element = await driver.findElement(By.css('#std .fom-title')); - - //Get text, font, size, and color - const elementText = await element.getText(); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Browse standards') { - console.log("Passed: Browse page - Browse standards sub-title matched as expected"); - } else { - errors.push(`Expected: "Browse standards" sub-title; Actual: "${elementText}"`); - } - - //font - if (elementFont === 'Poppins, sans-serif') { - console.log('Passed: Browse page - Browse standards sub-title font-family matched as expected'); - } else { - errors.push(`Expected: Browse page - Browse standards sub-title font-family "DM Serif Display, serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '13px') { - console.log('Passed: Browse page - Browse standards sub-title text font-size matched as expected'); - } else { - errors.push(`Expected: Browse page - Browse standards sub-title text font-size "13px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(40, 39, 90, 1)') { - console.log('Passed: Browse page - Browse standards sub-title text color matched as expected'); - } else { - errors.push(`Expected: Browse page - Browse standards sub-title text color "rgba(40, 39, 90, 1)"; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Standards label - { - description: 'Validate Standards label text, font, size, and color', - action: async () => { - const multipleChecks = 'Standards label'; - const element = await driver.findElement(By.css('#browse-standards > .form-group:nth-child(1) > .col-sm-12')); - - //Get text, font, size, and color - const elementText = await element.getText(); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Standards') { - console.log("Passed: Standards label matched as expected"); - } else { - errors.push(`Expected: "Standards" label; Actual: "${elementText}"`); - } - - //font - if (elementFont === 'Poppins, sans-serif') { - console.log('Passed: Standards label font-family matched as expected'); - } else { - errors.push(`Expected: Standards label font-family "DM Serif Display, serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '13px') { - console.log('Passed: Standards label text font-size matched as expected'); - } else { - errors.push(`Expected: Standards label text font-size "13px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(40, 39, 90, 1)') { - console.log('Passed: Standards label text color matched as expected'); - } else { - errors.push(`Expected: Standards label text color "rgba(40, 39, 90, 1)"; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Standards dropdown - { - description: 'Validate Standards dropdown list and value', - action: async () => { - const multipleChecks = 'Standards Dropdown List'; - const select = await driver.findElement(By.css('#stdselect')); - - //Get text, font, size, and color - const selectedOption = await select.findElement(By.css('option:checked')); - const elementText = await selectedOption.getText(); - const elementFont = await selectedOption.getCssValue('font-family'); - const elementSize = await selectedOption.getCssValue('font-size'); - const elementColor = await selectedOption.getCssValue('color'); - - //text - if (elementText === 'Alabama') { - console.log("Passed: Alabama default option matched as expected"); - } else { - errors.push(`Expected option: "Alabama"; Actual: "${elementText}"`); - } - - //font - if (elementFont === 'Poppins, sans-serif') { - console.log('Passed: Alabama default text font-family matched as expected'); - } else { - errors.push(`Expected: Alabama default text font-family "DM Serif Display, serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '13px') { - console.log('Passed: Alabama default text font-size matched as expected'); - } else { - errors.push(`Expected: Alabama default text font-size "13px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(40, 39, 90, 1)') { - console.log('Passed: Alabama default text color matched as expected'); - } else { - errors.push(`Expected: Alabama default text color "rgba(40, 39, 90, 1)"; Actual: "${elementColor}"`); - } - - const options = await select.findElements(By.css('option')); - const expectedList = [ - 'Select standards', - 'Alabama', - 'Arizona', - 'California', - 'Florida', - 'Georgia', - 'Illinois', - 'New York', - 'Texas', - 'Washington', - 'Common Core State Standards', - 'Alberta Standards', - 'Ontario Curriculum', - 'Australian Curriculum (ACARA) v8', - 'New South Wales', - 'NCSSFL-ACTFL CAN-DO STATEMENTS', - 'WIDA Consortium (2020)', - '5th Grade Import ECS-2732', - 'Imported Framework Updated', - 'ECS-2933 Testing On Prod', - //'Stats Test Framework', - 'Widget Test', - 'California Mathematics 1997', - 'Georgia Archived Language Arts QA', - 'Georgia Current Language Arts QA', - 'Georgia Future Language Arts QA', - 'create group test', - 'IMport Test' - ]; - const actual = []; - - //Track all errors - const errors = []; - - for (const opt of options) { - const text = (await opt.getText()).trim(); - actual.push(text); - } - - if (JSON.stringify(actual) === JSON.stringify(expectedList)) { - console.log('Passed: Standards Dropdown list matched as expected'); - } else { - errors.push(`Expected: Standards Dropdown list: ${JSON.stringify(expectedList)}, Actual: ${JSON.stringify(actual)}`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Standards Display label - { - description: 'Validate Standards Display label text, font, size, and color', - action: async () => { - const multipleChecks = 'Standards Display label'; - const element = await driver.findElement(By.css('.form-group:nth-child(2) > .col-sm-2')); - - //Get text, font, size, and color - const elementText = await element.getText(); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Standards Display') { - console.log("Passed: Standards Display label text matched as expected"); - } else { - errors.push(`Expected: ""Standards Display" label text; Actual: "${elementText}"`); - } - - //font - if (elementFont === 'Poppins, sans-serif') { - console.log('Passed: Standards Display label font-family matched as expected'); - } else { - errors.push(`Expected: Standards Display label font-family "DM Serif Display, serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '13px') { - console.log('Passed: Standards Display label text font-size matched as expected'); - } else { - errors.push(`Expected: Standards Display label text font-size "13px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(40, 39, 90, 1)') { - console.log('Passed: Standards Display label text color matched as expected'); - } else { - errors.push(`Expected: Standards Display label text color "rgba(40, 39, 90, 1)"; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //All radio option - { - description: 'Validate All radio option text, font, size, and color', - action: async () => { - const multipleChecks = 'All radio option'; - const elementOption = await driver.findElement(By.css('#gap1')).getAttribute('checked'); - const element = await driver.findElement(By.css('.form-check:nth-child(1) > .form-check-label')); - - //Get text, font, size, and color - const elementText = await element.getText(); - const elementTextFont = await element.getCssValue('font-family'); - const elementTextSize = await element.getCssValue('font-size'); - const elementTextColor = await element.getCssValue('color'); - - //Track all errors - const errors = []; - - //icon - if (elementOption === 'true') { - console.log('Passed: All radio option selected as expected'); - } else { - throw new Error(`All radio option value was not selected; Actual: "${elementOption}"`); - } - - //text - if (elementText === 'All') { - console.log('Passed: All radio label text matched as expected'); - } else { - errors.push(`Expected: "All" radio label text; Actual: "${elementText}"`); - } - - //font-family - if (elementTextFont === 'Poppins, sans-serif') { - console.log('Passed: All radio label font matched as expected'); - } else { - errors.push(`Expected: All radio label font "DM Serif Display, serif"; Actual: ${elementTextFont}`); - } - - //font size - if (elementTextSize === '13px') { - console.log('Passed: All radio label text font-size matched as expected'); - } else { - errors.push(`Expected: All radio label text font-size "13px"; Actual: "${elementTextSize}"`); - } - - //text color - if (elementTextColor === 'rgba(40, 39, 90, 1)') { - console.log('Passed: All radio label text color matched as expected'); - } else { - errors.push(`Expected: All radio label text color: "rgba(40, 39, 90, 1)"; Actual: "${elementTextColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Correlated Only radio option - { - description: 'Validate Correlated Only radio option text, font, size, and color', - action: async () => { - const multipleChecks = 'Correlated Only radio option'; - const elementOption = await driver.findElement(By.css('#gap2')); - const element = await driver.findElement(By.css('.form-check:nth-child(2) > .form-check-label')); - - //Get text, font, size, and color - const elementText = await element.getText(); - const elementTextFont = await element.getCssValue('font-family'); - const elementTextSize = await element.getCssValue('font-size'); - const elementTextColor = await element.getCssValue('color'); - - //Track all errors - const errors = []; - - //icon - if (elementOption) { - console.log('Passed: Correlated Only radio option is present'); - } else { - throw new Error(`Correlated Only radio option was not found; Actual: "${elementOption}"`); - } - - //text - if (elementText === 'Correlated Only') { - console.log('Passed: Correlated Only radio label text matched as expected'); - } else { - errors.push(`Expected: "Correlated Only" radio label text; Actual: "${elementText}"`); - } - - //font-family - if (elementTextFont === 'Poppins, sans-serif') { - console.log('Passed: Correlated Only radio label font matched as expected'); - } else { - errors.push(`Expected: Correlated Only radio label font "DM Serif Display, serif"; Actual: ${elementTextFont}`); - } - - //font size - if (elementTextSize === '13px') { - console.log('Passed: Correlated Only radio label text font-size matched as expected'); - } else { - errors.push(`Expected: Correlated Only radio label text font-size "13px"; Actual: "${elementTextSize}"`); - } - - //text color - if (elementTextColor === 'rgba(40, 39, 90, 1)') { - console.log('Passed: Correlated Only radio label text color matched as expected'); - } else { - errors.push(`Expected: Correlated Only radio label text color: "rgba(40, 39, 90, 1)"; Actual: "${elementTextColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Uncorrelated Only radio option - { - description: 'Validate Uncorrelated Only radio option text, font, size, and color', - action: async () => { - const multipleChecks = 'Uncorrelated Only radio option'; - const elementOption = await driver.findElement(By.css('#gap3')); - const element = await driver.findElement(By.css('.form-check:nth-child(3) > .form-check-label')); - - //Get text, font, size, and color - const elementText = await element.getText(); - const elementTextFont = await element.getCssValue('font-family'); - const elementTextSize = await element.getCssValue('font-size'); - const elementTextColor = await element.getCssValue('color'); - - //Track all errors - const errors = []; - - //icon - if (elementOption) { - console.log('Passed: Uncorrelated Only radio option is present'); - } else { - throw new Error(`Uncorrelated Only radio option was not found; Actual: "${elementOption}"`); - } - - //text - if (elementText === 'Uncorrelated Only') { - console.log('Passed: Uncorrelated Only radio label text matched as expected'); - } else { - errors.push(`Expected: "Uncorrelated Only" radio label text; Actual: "${elementText}"`); - } - - //font-family - if (elementTextFont === 'Poppins, sans-serif') { - console.log('Passed: Uncorrelated Only radio label font matched as expected'); - } else { - errors.push(`Expected: Uncorrelated Only radio label font "DM Serif Display, serif"; Actual: ${elementTextFont}`); - } - - //font size - if (elementTextSize === '13px') { - console.log('Passed: Uncorrelated Only radio label text font-size matched as expected'); - } else { - errors.push(`Expected: Uncorrelated Only radio label text font-size "13px"; Actual: "${elementTextSize}"`); - } - - //text color - if (elementTextColor === 'rgba(40, 39, 90, 1)') { - console.log('Passed: Uncorrelated Only radio label text color matched as expected'); - } else { - errors.push(`Expected: Uncorrelated Only radio label text color: "rgba(40, 39, 90, 1)"; Actual: "${elementTextColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Subject label - { - description: 'Validate Subject label text, font, size, and color', - action: async () => { - const multipleChecks = 'Subject label'; - const element = await driver.findElement(By.css('.hideSubject > .col-form-label')); - - //Get text, font, size, and color - const elementText = await element.getText(); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Subject') { - console.log("Passed: Subject label text matched as expected"); - } else { - errors.push(`Expected: "Subject" label text; Actual: "${elementText}"`); - } - - //font - if (elementFont === 'Poppins, sans-serif') { - console.log('Passed: Subject label font-family matched as expected'); - } else { - errors.push(`Expected: Subject label font-family "DM Serif Display, serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '13px') { - console.log('Passed: Subject label text font-size matched as expected'); - } else { - errors.push(`Expected: Subject label text font-size "13px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(40, 39, 90, 1)') { - console.log('Passed: Subject label text color matched as expected'); - } else { - errors.push(`Expected: Subject label text color "rgba(40, 39, 90, 1)"; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Subject dropdown - { - description: 'Validate Subject dropdown list and value', - action: async () => { - const multipleChecks = 'Subject Dropdown List'; - const select = await driver.findElement(By.css('#selectSubjects')); - - //Get text, font, size, and color - const selectedOption = await select.findElement(By.css('option:checked')); - const elementText = await selectedOption.getText(); - const elementFont = await selectedOption.getCssValue('font-family'); - const elementSize = await selectedOption.getCssValue('font-size'); - const elementColor = await selectedOption.getCssValue('color'); - - //text - if (elementText === 'Select a subject') { - console.log("Passed: Select a subject default option matched as expected"); - } else { - errors.push(`Expected option: "Select a subject"; Actual: "${elementText}"`); - } - - //font - if (elementFont === 'Poppins, sans-serif') { - console.log('Passed: Select a subject default text font-family matched as expected'); - } else { - errors.push(`Expected: Select a subject default text font-family "DM Serif Display, serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '13px') { - console.log('Passed: Select a subject default text font-size matched as expected'); - } else { - errors.push(`Expected: Select a subject default text font-size "13px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(40, 39, 90, 1)') { - console.log('Passed: Select a subject default text color matched as expected'); - } else { - errors.push(`Expected: Select a subject default text color "rgba(40, 39, 90, 1)"; Actual: "${elementColor}"`); - } - - const options = await select.findElements(By.css('option')); - const expectedList = [ - 'Select a subject', - 'Health and PE', - 'Language Arts', - "Mathematics", - "Science", - "Social Studies", - "Technology Education" - ]; - const actual = []; - - //Track all errors - const errors = []; - - for (const opt of options) { - const text = (await opt.getText()).trim(); - actual.push(text); - } - - if (JSON.stringify(actual) === JSON.stringify(expectedList)) { - console.log('Passed: Subject Dropdown list matched as expected'); - } else { - errors.push(`Expected: Subject Dropdown list: ${JSON.stringify(expectedList)}, Actual: ${JSON.stringify(actual)}`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Grade label and dropdown - { - description: 'Validate Grade label and dropdown are hidden', - action: async () => { - const multipleChecks = 'Grade label and dropdown are hidden'; - const errors = []; - - const visibility = await driver.executeScript(` - const hideGradeDiv = document.querySelector('.hideGrade'); - if (!hideGradeDiv) return { found: false }; - const style = window.getComputedStyle(hideGradeDiv); - return { - found: true, - hidden: style.display === 'none', - display: style.display - }; - `); - //console.log('----->| DEBUG hideGrade visibility:', JSON.stringify(visibility)); - - //Both label and dropdown are inside the same hideGrade div - //so we only need to check the parent container once - if (visibility.found && visibility.hidden) { - console.log('Passed: Grade label is hidden as expected'); - console.log('Passed: Grade dropdown is hidden as expected'); - } else { - errors.push(`Expected: Grade label and dropdown to be hidden; Actual: display="${visibility.display}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - throw new Error(errors.join('\n')); - } - } - }, - - //Show Correlations From label - { - description: 'Validate Show Correlations From label text, font, size, and color', - action: async () => { - const multipleChecks = 'Show Correlations From label'; - const element = await driver.findElement(By.css('.form-group:nth-child(3) > .col-form-label')); - - //Get text, font, size, and color - const elementText = await element.getText(); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Show Correlations From') { - console.log("Passed: Show Correlations From label text matched as expected"); - } else { - errors.push(`Expected: "Show Correlations From" label text; Actual: "${elementText}"`); - } - - //font - if (elementFont === 'Poppins, sans-serif') { - console.log('Passed: Show Correlations From label font-family matched as expected'); - } else { - errors.push(`Expected: Show Correlations From label font-family "DM Serif Display, serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '13px') { - console.log('Passed: Show Correlations From label text font-size matched as expected'); - } else { - errors.push(`Expected: Show Correlations From label text font-size "13px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(40, 39, 90, 1)') { - console.log('Passed: Show Correlations From label text color matched as expected'); - } else { - errors.push(`Expected: Show Correlations From label text color "rgba(40, 39, 90, 1)"; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Show Correlations From dropdown value - { - description: 'Validate Show Correlations From dropdown value', - action: async () => { - const multipleChecks = 'Show Correlations From dropdown value'; - - //Locate and validate selected (collapsed) value - const dropdownButton = await driver.findElement( - By.css('button.multiselect.dropdown-toggle') - ); - - const selectedOption = await driver.findElement(By.css('#browse-standards > div:nth-child(3) > div > div > div:nth-child(3) > div > div > button > span')); - - //Get text, font, size, and color - const elementText = await selectedOption.getText(''); - const elementFont = await selectedOption.getCssValue('font-family'); - const elementSize = await selectedOption.getCssValue('font-size'); - const elementColor = await selectedOption.getCssValue('color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'All Content Sets') { - console.log("Passed: All Content Sets default option matched as expected"); - } else { - errors.push(`Expected option: "All Content Sets"; Actual: "${elementText}"`); - } - - //font - if (elementFont === 'Poppins, sans-serif') { - console.log('Passed: All Content Sets default text font-family matched as expected'); - } else { - errors.push(`Expected: All Content Sets default text font-family "DM Serif Display, serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '16px') { - console.log('Passed: All Content Sets default text font-size matched as expected'); - } else { - errors.push(`Expected: All Content Sets default text font-size "16px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(33, 37, 41, 1)') { - console.log('Passed: All Content Sets default text color matched as expected'); - } else { - errors.push(`Expected: All Content Sets default text color "rgba(33, 37, 41, 1)"; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Term Search label - { - description: 'Validate Term Search label text, font, size, and color', - action: async () => { - const multipleChecks = 'Term Search label'; - const element = await driver.findElement(By.css('.form-group:nth-child(7) > .col-sm-2')); - - //Get text, font, size, and color - const elementText = await element.getText(); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Term Search') { - console.log("Passed: Term Search label text matched as expected"); - } else { - errors.push(`Expected: "Term Search" label text; Actual: "${elementText}"`); - } - - //font - if (elementFont === 'Poppins, sans-serif') { - console.log('Passed: Term Search label font-family matched as expected'); - } else { - errors.push(`Expected: Term Search label font-family "DM Serif Display, serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '13px') { - console.log('Passed: Term Search label text font-size matched as expected'); - } else { - errors.push(`Expected: Term Search label text font-size "13px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(40, 39, 90, 1)') { - console.log('Passed: Term Search label text color matched as expected'); - } else { - errors.push(`Expected: Term Search label text color "rgba(40, 39, 90, 1)"; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Term Search placeholder - { - description: 'Validate Term Search placeholder', - action: async () => { - const elementPlaceholder = await driver.findElement(By.css('#searchTerm')).getAttribute('placeholder'); - - if (elementPlaceholder === '') { - console.log('Passed: Term Search "blank" placeholder text matched as expected'); - } else { - throw new Error(`Expected: Term Search "blank" placeholder text; Actual: "${elementPlaceholder}"`); - } - } - }, - - //Include Related Standards checkbox - { - description: 'Validate Include Related Standards checkbox', - action: async () => { - const elementType = await driver.findElement(By.css('#doRel')).getAttribute('type'); - - if (elementType === 'checkbox') { - console.log('Passed: Include Related Standards checkbox type matched as expected'); - } else { - throw new Error(`Include Related Standards checkbox type did not match; Actual: "${elementType}"`); - } - } - }, - - //Include Related Standards label - { - description: 'Validate Include Related Standards label text, font, size, and color', - action: async () => { - const multipleChecks = 'Include Related Standards label'; - const element = await driver.findElement(By.css('.col-sm-offset-2 > label')); - - //Get text, font, size, and color - const elementText = await element.getText(); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Include Related Standards') { - console.log("Passed: Include Related Standards label text matched as expected"); - } else { - errors.push(`Expected: "Include Related Standards" label text; Actual: "${elementText}"`); - } - - //font - if (elementFont === 'Poppins, sans-serif') { - console.log('Passed: Include Related Standards label font-family matched as expected'); - } else { - errors.push(`Expected: Include Related Standards label font-family "DM Serif Display, serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '13px') { - console.log('Passed: Include Related Standards label text font-size matched as expected'); - } else { - errors.push(`Expected: Include Related Standards label text font-size "13px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(40, 39, 90, 1)') { - console.log('Passed: Include Related Standards label text color matched as expected'); - } else { - errors.push(`Expected: Include Related Standards label text color "rgba(40, 39, 90, 1)"; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Search button - { - description: 'Validate Search button text, size, and color', - action: async () => { - const multipleChecks = 'Search button'; - const element = await driver.findElement(By.css('#stdsubmit')); - - //Get text, font, size, and color - const elementText = await element.getAttribute('value'); - const elementTextFont = await element.getCssValue('font-family'); - const elementTextSize = await element.getCssValue('font-size'); - const elementTextColor = await element.getCssValue('color'); - const elementButtonColor = await element.getCssValue('background-color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Search') { - console.log('Passed: Search button text matched as expected'); - } else { - errors.push(`Expected: "Search"; Actual: "${elementText}"`); - } - - //font - if (elementTextFont === 'Poppins, sans-serif') { - console.log('Passed: Search button text font-family matched as expected'); - } else { - errors.push(`Expected: Search button text font-family "Poppins, sans-serif"; Actual: ${elementTextFont}`); - } - - //size - if (elementTextSize === '16px') { - console.log('Passed: Search button text font-size matched as expected'); - } else { - errors.push(`Expected: Search button text font-size "16px"; Actual: "${elementTextSize}"`); - } - - //color - if (elementTextColor === 'rgba(255, 255, 255, 1)') { - console.log('Passed: Search button text color matched as expected'); - } else { - errors.push(`Expected: Search button text color: "rgba(255, 255, 255, 1)"; Actual: "${elementTextColor}"`); - } - - //button color - if (elementButtonColor === 'rgba(48, 200, 172, 1)') { - console.log('Passed: Search button background color matched as expected'); - } else { - errors.push(`Expected: Search button background color: "rgba(48, 200, 172, 1)"; Actual: "${elementButtonColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //NEXT ACTION - { - description: 'Validate alert message', - action: async () => { - const multipleChecks = 'Validate alert message'; - const errors = []; - - //Click delete button - const element = await driver.findElement(By.css('#stdsubmit')).click(); - await driver.sleep(5000); - console.log('----->| NEXT ACTION: Clicked Search button'); - - //Wait for confirm dialog to appear - const alert = await driver.wait(until.alertIsPresent(), 5000); - console.log('----->| NEXT ACTION: Alert dialog appeared as expected'); - - //Get alert text - const alertText = await alert.getText(); - - //Validate alert message text - const expectedText = 'You must select a subject'; - if (alertText === expectedText) { - console.log('Passed: Alert dialog text matched as expected'); - } else { - errors.push(`Expected: "${expectedText}"; Actual: "${alertText}"`); - } - - //Throw summary before dismissing if errors found - if (errors.length > 0) { - await alert.dismiss(); //Cancel the delete if validation failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - throw new Error(errors.join('\n')); - } - - //Accept the alert (click OK) to proceed with deletion - await alert.accept(); - console.log('----->| NEXT ACTION: Clicked alert message OK button'); - await driver.sleep(2000); - } - }, - - //NEXT ACTION - { - description: 'Click Subject dropdown', - action: async () => { - //Select "Mathematics" from dropdown - const subjectDropdown = await driver.findElement(By.css('#selectSubjects')); - const mathematicsOption = await driver.findElement(By.css('#selectSubjects > option:nth-child(4)')); - - await subjectDropdown.click(); - await driver.sleep(2000); - - await mathematicsOption.click(); - await driver.sleep(2000); - console.log('----->| NEXT ACTION: Selected Subject - Mathematics'); - - //Click away to close dropdown - await driver.findElement(By.css('#browse-standards > .form-group:nth-child(1)')).click(); - - //Wait for the dashboard container to exist in DOM - await driver.wait( - until.elementLocated(By.css('#selectGrade')), - 30000, - 'Grade dropdown did not appear within 30 seconds' - ); - - //Wait for it to be visible - await driver.wait(async () => { - try { - const gradeDropdown = await driver.findElement(By.css('#selectGrade')); - return await gradeDropdown.isDisplayed(); - } catch (e) { - return false; - } - }, 30000, 'Grade dropdown did not become visible within 30 seconds'); - }, - }, - - //Grade label - { - description: 'Validate Grade label text, font, size, and color', - action: async () => { - const multipleChecks = 'Grade label'; - const element = await driver.findElement(By.css('.hideGrade > .col-form-label')); - - //Get text, font, size, and color - const elementText = await element.getText(); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Grade') { - console.log("Passed: Grade label text matched as expected"); - } else { - errors.push(`Expected: "Grade" label text; Actual: "${elementText}"`); - } - - //font - if (elementFont === 'Poppins, sans-serif') { - console.log('Passed: Grade label font-family matched as expected'); - } else { - errors.push(`Expected: Grade label font-family "DM Serif Display, serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '13px') { - console.log('Passed: Grade label text font-size matched as expected'); - } else { - errors.push(`Expected: Grade label text font-size "13px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(40, 39, 90, 1)') { - console.log('Passed: Grade label text color matched as expected'); - } else { - errors.push(`Expected: Grade label text color "rgba(40, 39, 90, 1)"; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Grade dropdown - { - description: 'Validate Grade dropdown list and value', - action: async () => { - const multipleChecks = 'Grade Dropdown List'; - const select = await driver.findElement(By.css('#selectGrade')); - - //Get text, font, size, and color - const selectedOption = await select.findElement(By.css('option:checked')); - const elementText = await selectedOption.getText(); - const elementFont = await selectedOption.getCssValue('font-family'); - const elementSize = await selectedOption.getCssValue('font-size'); - const elementColor = await selectedOption.getCssValue('color'); - - //text - if (elementText === 'Select a grade') { - console.log("Passed: Select a grade default option matched as expected"); - } else { - errors.push(`Expected option: "Select a grade"; Actual: "${elementText}"`); - } - - //font - if (elementFont === 'Poppins, sans-serif') { - console.log('Passed: Select a grade default text font-family matched as expected'); - } else { - errors.push(`Expected: Select a grade default text font-family "DM Serif Display, serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '13px') { - console.log('Passed: Select a grade default text font-size matched as expected'); - } else { - errors.push(`Expected: Select a grade default text font-size "13px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(40, 39, 90, 1)') { - console.log('Passed: Select a grade default text color matched as expected'); - } else { - errors.push(`Expected: Select a grade default text color "rgba(40, 39, 90, 1)"; Actual: "${elementColor}"`); - } - - const options = await select.findElements(By.css('option')); - const expectedList = [ - 'Select a grade', - 'K', - '1', - '2', - '3', - '4', - '5', - '6', - '7', - '8', - '9', - '10', - '11', - '12' - ]; - const actual = []; - - //Track all errors - const errors = []; - - for (const opt of options) { - const text = (await opt.getText()).trim(); - actual.push(text); - } - - if (JSON.stringify(actual) === JSON.stringify(expectedList)) { - console.log('Passed: Grade Dropdown list matched as expected'); - } else { - errors.push(`Expected: Grade Dropdown list: ${JSON.stringify(expectedList)}, Actual: ${JSON.stringify(actual)}`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //NEXT ACTION - { - description: 'Validate alert message', - action: async () => { - const multipleChecks = 'Validate alert message'; - const errors = []; - - //Click delete button - const element = await driver.findElement(By.css('#stdsubmit')).click(); - await driver.sleep(5000); - console.log('----->| NEXT ACTION: Clicked Search button'); - - //Wait for confirm dialog to appear - const alert = await driver.wait(until.alertIsPresent(), 5000); - console.log('----->| NEXT ACTION: Alert dialog appeared as expected'); - - //Get alert text - const alertText = await alert.getText(); - - //Validate alert message text - const expectedText = 'You must select a grade'; - if (alertText === expectedText) { - console.log('Passed: Alert dialog text matched as expected'); - } else { - errors.push(`Expected: "${expectedText}"; Actual: "${alertText}"`); - } - - //Throw summary before dismissing if errors found - if (errors.length > 0) { - await alert.dismiss(); //Cancel the delete if validation failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - throw new Error(errors.join('\n')); - } - - //Accept the alert (click OK) to proceed with deletion - await alert.accept(); - console.log('----->| NEXT ACTION: Clicked alert message OK button'); - await driver.sleep(2000); - } - }, - - //NEXT ACTION - { - description: 'Select grade', - action: async () => { - //Select "9" from dropdown - await driver.findElement(By.css('#selectGrade')).click(); - await driver.sleep(2000); - await driver.findElement(By.css('#selectGrade > option:nth-child(11)')).click(); - - console.log('----->| NEXT ACTION: Selected grade: 9'); - }, - }, - - //Show Correlations From dropdown - { - description: 'Validate Show Correlations From dropdown list and value', - action: async () => { - const multipleChecks = 'Show Correlations From dropdown list'; - - //Locate and validate selected (collapsed) value - const dropdownButton = await driver.findElement( - By.css('button.multiselect.dropdown-toggle') - ); - - const selectedOption = await driver.findElement(By.css('#browse-standards > div:nth-child(3) > div > div > div:nth-child(3) > div > div > button > span')); - - //Get text, font, size, and color - const elementText = await selectedOption.getText(''); - const elementFont = await selectedOption.getCssValue('font-family'); - const elementSize = await selectedOption.getCssValue('font-size'); - const elementColor = await selectedOption.getCssValue('color'); - - //text - if (elementText === 'All Content Sets') { - console.log("Passed: All Content Sets default option matched as expected"); - } else { - errors.push(`Expected option: "All Content Sets"; Actual: "${elementText}"`); - } - - //font - if (elementFont === 'Poppins, sans-serif') { - console.log('Passed: All Content Sets default text font-family matched as expected'); - } else { - errors.push(`Expected: All Content Sets default text font-family "DM Serif Display, serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '16px') { - console.log('Passed: All Content Sets default text font-size matched as expected'); - } else { - errors.push(`Expected: All Content Sets default text font-size "16px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(33, 37, 41, 1)') { - console.log('Passed: All Content Sets default text color matched as expected'); - } else { - errors.push(`Expected: All Content Sets default text color "rgba(33, 37, 41, 1)"; Actual: "${elementColor}"`); - } - - //Open dropdown - await driver.findElement(By.css('.col-sm-12 .multiselect-selected-text')).click(); - await driver.sleep(2000); - console.log('----->| NEXT ACTION: Clicked Show Correlations From dropdown'); - - //Wait for dropdown list to become visible - const dropdownMenu = await driver.wait( - until.elementLocated(By.css('ul.multiselect-container.dropdown-menu.show')), - 10000 - ); - - await driver.wait( - until.elementIsVisible(dropdownMenu), - 10000 - ); - - //Now safely get option labels - const optionLabels = await dropdownMenu.findElements( - By.css('li label.checkbox') - ); - - //Extract list values - const actualOptions = []; - for (const label of optionLabels) { - const text = (await label.getText()).trim(); - if (text) { - actualOptions.push(text); - } - } - - const expectedOptions = [ - 'Select all', - 'US History III', - 'English I', - 'Algebra', - 'Biology', - 'Copy Move Delete Test 1', - 'Copy Move Delete Test 2', - 'Import Align - Concept Based 1', - 'Import Align - Concept Based 2', - 'Import Align - Direct Align 1', - 'Import Align - Direct Align 2', - 'Math Alignment Import Test', - 'create me', - 'Illustrative Math Test 1', - 'Illustrative Math Test 2', - 'Khan URL test', - 'seesaw test', - 'ECS-3037 On Prod TC2', - 'ECS-3037 On Prod TC1', - 'webinar test', - 'Post NIght July26' - ]; - - //Track all errors - const errors = []; - - //Length validation - if (actualOptions.length !== expectedOptions.length) { - errors.push( - `Expected option count ${expectedOptions.length}; Actual ${actualOptions.length}` - ); - } - - //Value-by-value validation - expectedOptions.forEach((expected, i) => { - if (actualOptions[i] !== expected) { - errors.push( - `Index ${i}: Expected "${expected}", Actual "${actualOptions[i]}"` - ); - } - }); - - //Select "Algebra" from dropdown - //Runs even if validation above already failed — errors are thrown after this, - //so log order does not reflect when the failing check actually ran - await driver.findElement(By.css('.show > li:nth-child(5) input')).click(); - await driver.sleep(2000); - - console.log('----->| NEXT ACTION: Selected correlation: Algebra'); - - //Click away to close dropdown using executeScript to bypass interception - await driver.executeScript(` - document.querySelector('.col-sm-12 .multiselect-selected-text').click(); - `); - await driver.sleep(2000); - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Related Standards options - { - description: 'Validate Include Related Standards options are hidden', - action: async () => { - const multipleChecks = 'Include Related Standards labels and dropdowns are hidden'; - const errors = []; - - const visibility = await driver.executeScript(` - const elementRelStdnt = document.querySelector('#relsel'); - if (!elementRelStdnt) return { found: false }; - const style = window.getComputedStyle(elementRelStdnt); - return { - found: true, - hidden: style.display === 'none', - display: style.display - }; - `); - //console.log('----->| DEBUG RelStdnt visibility:', JSON.stringify(visibility)); - - //Both label and dropdown are inside the same hideGrade div - //so we only need to check the parent container once - if (visibility.found && visibility.hidden) { - console.log('Passed: Related Standards dropdown is hidden as expected'); - console.log('Passed: Best Match dropdown is hidden as expected'); - } else { - errors.push(`Expected: Related Standards and Best Match dropdowns to be hidden; Actual: display="${visibility.display}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - throw new Error(errors.join('\n')); - } - } - }, - - //NEXT ACTION - { - description: 'Select Include Related Standards checkbox', - action: async () => { - await driver.findElement(By.css('#doRel')).click(); - await driver.sleep(2000); - console.log('----->| NEXT ACTION: Clicked Include Related Standards checkbox'); - - //Wait until the modal title is located AND visible - await driver.wait(async () => { - try { - const element = await driver.findElement(By.css('.col-auto .multiselect-selected-text')); - return await element.isDisplayed(); - } catch (e) { - return false; //Element not ready yet, keep waiting - } - }, 20000, 'Related Standards dropdown did not become visible within 20 seconds'); - - console.log('Passed: Related Standards dropdown loaded successfully'); - } - }, - - //NEXT ACTION - { - description: 'Validate alert message', - action: async () => { - const multipleChecks = 'Validate alert message'; - const errors = []; - - //Click delete button - const element = await driver.findElement(By.css('#stdsubmit')).click(); - await driver.sleep(5000); - console.log('----->| NEXT ACTION: Clicked Search button'); - - //Wait for confirm dialog to appear - const alert = await driver.wait(until.alertIsPresent(), 5000); - console.log('----->| NEXT ACTION: Alert dialog appeared as expected'); - - //Get alert text - const alertText = await alert.getText(); - - //Validate alert message text - const expectedText = 'You must select at least one set of related standards'; - if (alertText === expectedText) { - console.log('Passed: Alert dialog text matched as expected'); - } else { - errors.push(`Expected: "${expectedText}"; Actual: "${alertText}"`); - } - - //Throw summary before dismissing if errors found - if (errors.length > 0) { - await alert.dismiss(); //Cancel the delete if validation failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - throw new Error(errors.join('\n')); - } - - //Accept the alert (click OK) to proceed with deletion - await alert.accept(); - console.log('----->| NEXT ACTION: Clicked alert message OK button'); - await driver.sleep(2000); - } - }, - - //Related Standards dropdown - { - description: 'Validate Related Standards dropdown list and value', - action: async () => { - const multipleChecks = 'Related Standards dropdown list'; - - //Locate and validate selected (collapsed) value - const dropdownButton = await driver.findElement( - By.css('.col-auto .multiselect-selected-text') - ); - - //Open dropdown - use the element directly, not findElement again - await dropdownButton.click(); - await driver.sleep(2000); - console.log('----->| NEXT ACTION: Clicked Related Standards dropdown'); - - //Track all errors - const errors = []; - - //Get text, font, size, and color - const elementText = await dropdownButton.getText(); - const elementFont = await dropdownButton.getCssValue('font-family'); - const elementSize = await dropdownButton.getCssValue('font-size'); - const elementColor = await dropdownButton.getCssValue('color'); - - //text - if (elementText === 'None Selected') { - console.log("Passed: None Selected default option matched as expected"); - } else { - errors.push(`Expected option: "None Selected"; Actual: "${elementText}"`); - } - - //font - if (elementFont === 'Poppins, sans-serif') { - console.log('Passed: None Selected default text font-family matched as expected'); - } else { - errors.push(`Expected: None Selected default text font-family "DM Serif Display, serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '16px') { - console.log('Passed: None Selected default text font-size matched as expected'); - } else { - errors.push(`Expected: None Selected default text font-size "16px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(33, 37, 41, 1)') { - console.log('Passed: None Selected default text color matched as expected'); - } else { - errors.push(`Expected: None Selected default text color "rgba(33, 37, 41, 1)"; Actual: "${elementColor}"`); - } - - //Wait for dropdown list to become visible - const dropdownMenu = await driver.wait( - until.elementLocated(By.css('ul.multiselect-container.dropdown-menu.show')), - 10000 - ); - - await driver.wait( - until.elementIsVisible(dropdownMenu), - 10000 - ); - - //Now safely get option labels - const optionLabels = await dropdownMenu.findElements( - By.css('li label.checkbox') - ); - - //Extract list values - const actualOptions = []; - for (const label of optionLabels) { - const text = (await label.getText()).trim(); - if (text) { - actualOptions.push(text); - } - } - - const expectedOptions = [ - 'Select all', - 'Alabama', - 'Arizona', - 'California', - 'Florida', - 'Georgia', - 'Illinois', - 'New York', - 'Texas', - 'Washington', - 'Common Core State Standards', - 'Alberta Standards', - 'Ontario Curriculum', - 'Australian Curriculum (ACARA) v8', - 'New South Wales', - 'NCSSFL-ACTFL CAN-DO STATEMENTS', - 'WIDA Consortium (2020)', - '5th Grade Import ECS-2732', - 'Imported Framework Updated', - 'ECS-2933 Testing On Prod', - 'Widget Test', - 'California Mathematics 1997', - 'Georgia Archived Language Arts QA', - 'Georgia Current Language Arts QA', - 'Georgia Future Language Arts QA', - 'create group test', - 'IMport Test' - ]; - - //Length validation - if (actualOptions.length !== expectedOptions.length) { - errors.push( - `Expected option count ${expectedOptions.length}; Actual ${actualOptions.length}` - ); - } - - //Value-by-value validation - expectedOptions.forEach((expected, i) => { - if (actualOptions[i] !== expected) { - errors.push( - `Index ${i}: Expected "${expected}", Actual "${actualOptions[i]}"` - ); - } - }); - - //Select "Washington" from dropdown - await driver.findElement(By.css('.show > li:nth-child(12) input')).click(); - await driver.sleep(2000); - - //Select "Common Core State Standards" from dropdown - await driver.findElement(By.css('.show > li:nth-child(14) input')).click(); - await driver.sleep(2000); - - //Select "California Mathematics 1997" from dropdown - await driver.findElement(By.css('.show > li:nth-child(34) input')).click(); - await driver.sleep(2000); - - console.log('----->| NEXT ACTION: Selected Related Standards: Washington, Common Core State Standards, California Mathematics 1997'); - - //Click away to close dropdown using executeScript to bypass interception - await driver.executeScript(` - document.querySelector('.col-auto .multiselect-selected-text').click(); - `); - await driver.sleep(2000); - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Selected Related Standards dropdown value - { - description: 'Validate Show Correlations From dropdown value', - action: async () => { - const multipleChecks = 'Show Correlations From dropdown value'; - const selectedOption = await driver.findElement(By.css('.col-auto .multiselect-selected-text')); - - //Get text, font, size, and color - const elementText = await selectedOption.getText(''); - const elementFont = await selectedOption.getCssValue('font-family'); - const elementSize = await selectedOption.getCssValue('font-size'); - const elementColor = await selectedOption.getCssValue('color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Washington , Common Core State Standards , California Mathematics 1997') { - console.log("Passed: Selected Content Sets dropdown options matched as expected"); - } else { - errors.push(`Expected option: "Washington , Common Core State Standards , California Mathematics 1997"; Actual: "${elementText}"`); - } - - //font - if (elementFont === 'Poppins, sans-serif') { - console.log('Passed: Selected Content Sets dropdown text font-family matched as expected'); - } else { - errors.push(`Expected: Selected Content Sets dropdown text font-family "DM Serif Display, serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '16px') { - console.log('Passed: Selected Content Sets dropdown text font-size matched as expected'); - } else { - errors.push(`Expected: Selected Content Sets dropdown text font-size "16px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(33, 37, 41, 1)') { - console.log('Passed: Selected Content Sets dropdown text color matched as expected'); - } else { - errors.push(`Expected: Selected Content Sets dropdown text color "rgba(33, 37, 41, 1)"; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //based on - { - description: 'Validate based on label text, font, size, and color', - action: async () => { - const multipleChecks = 'based on label'; - const element = await driver.findElement(By.css('.col-auto:nth-child(2)')); - - //Get text, font, size, and color - const elementText = await element.getText(); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'based on') { - console.log("Passed: based on label text matched as expected"); - } else { - errors.push(`Expected: "based on" label text; Actual: "${elementText}"`); - } - - //font - if (elementFont === 'Poppins, sans-serif') { - console.log('Passed: based on label font-family matched as expected'); - } else { - errors.push(`Expected: based on label font-family "DM Serif Display, serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '13px') { - console.log('Passed: based on label text font-size matched as expected'); - } else { - errors.push(`Expected: based on label text font-size "13px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(40, 39, 90, 1)') { - console.log('Passed: based on label text color matched as expected'); - } else { - errors.push(`Expected: based on label text color "rgba(40, 39, 90, 1)"; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //best match dropdown - { - description: 'Validate best match dropdown list and value', - action: async () => { - const multipleChecks = 'best match Dropdown List'; - const select = await driver.findElement(By.css('.custom-select')); - - //Get text, font, size, and color - const selectedOption = await select.findElement(By.css('option:checked')); - const elementText = await selectedOption.getText(); - const elementFont = await selectedOption.getCssValue('font-family'); - const elementSize = await selectedOption.getCssValue('font-size'); - const elementColor = await selectedOption.getCssValue('color'); - - //text - if (elementText === 'best match') { - console.log("Passed: best match default option matched as expected"); - } else { - errors.push(`Expected option: "best match"; Actual: "${elementText}"`); - } - - //font - if (elementFont === 'Poppins, sans-serif') { - console.log('Passed: best match default text font-family matched as expected'); - } else { - errors.push(`Expected: best match default text font-family "DM Serif Display, serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '13px') { - console.log('Passed: best match default text font-size matched as expected'); - } else { - errors.push(`Expected: best match default text font-size "13px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(40, 39, 90, 1)') { - console.log('Passed: best match default text color matched as expected'); - } else { - errors.push(`Expected: best match default text color "rgba(40, 39, 90, 1)"; Actual: "${elementColor}"`); - } - - const options = await select.findElements(By.css('option')); - const expectedList = [ - 'best match', - 'similar text', - 'like concepts' - ]; - const actual = []; - - //Track all errors - const errors = []; - - for (const opt of options) { - const text = (await opt.getText()).trim(); - actual.push(text); - } - - if (JSON.stringify(actual) === JSON.stringify(expectedList)) { - console.log('Passed: best match Dropdown list matched as expected'); - } else { - errors.push(`Expected: best match Dropdown list: ${JSON.stringify(expectedList)}, Actual: ${JSON.stringify(actual)}`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Include Related Standards info icon | SPECIAL CASE {title data-original-title} - { - description: 'Validate info icon', - action: async () => { - const multipleChecks = 'info icon'; - const errors = []; - - //Get both text and styles in one executeScript call - const result = await driver.executeScript(` - const el = document.querySelector('[data-toggle="tooltip"][data-placement="right"]'); - if (!el) return null; - const style = window.getComputedStyle(el); - return { - tooltipText: el.getAttribute('data-original-title'), - fontFamily: style.getPropertyValue('font-family'), - fontSize: style.getPropertyValue('font-size'), - color: style.getPropertyValue('color'), - backgroundColor: style.getPropertyValue('background-color') - }; - `); - //console.log('----->| DEBUG result:', JSON.stringify(result)); - - //text - if (result.tooltipText === '"best match" uses a combination of similar text and like concepts') { - console.log('Passed: Tooltip text matched as expected'); - } else { - errors.push(`Expected: Tooltip text: '"best match" uses a combination of similar text and like concepts'; Actual: "${result.tooltipText}"`); - } - - //font - if (result.fontFamily === 'Poppins, sans-serif') { - console.log('Passed: Info icon text font-family matched as expected'); - } else { - errors.push(`Expected: Info icon font-family "Poppins, sans-serif"; Actual: "${result.fontFamily}"`); - } - - //size - if (result.fontSize === '13px') { - console.log('Passed: Info icon text font-size matched as expected'); - } else { - errors.push(`Expected: Info icon font-size "13px"; Actual: "${result.fontSize}"`); - } - - //color - if (result.color === 'rgb(40, 39, 90)') { - console.log('Passed: Info icon text color matched as expected'); - } else { - errors.push(`Expected: Info icon color rgb(40, 39, 90)"; Actual: "${result.color}"`); - } - - //background-color - if (result.backgroundColor === 'rgba(0, 0, 0, 0)') { - console.log('Passed: Info icon background-color matched as expected'); - } else { - errors.push(`Expected: Info icon background-color "rgba(0, 0, 0, 0)"; Actual: "${result.backgroundColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - throw new Error(errors.join('\n')); - } - } - }, - - //note - { - description: 'Validate note text, font, size, and color', - action: async () => { - const multipleChecks = 'note label'; - const element = await driver.findElement(By.css('em')); - - //Get text, font, size, and color - const elementText = await element.getText(); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - //Track all errors - const errors = []; - - //text - if (elementText === '** note - including related standards may cause increased page load times') { - console.log("Passed: ** note text matched as expected"); - } else { - errors.push(`Expected: "** note - including related standards may cause increased page load times" label text; Actual: "${elementText}"`); - } - - //font - if (elementFont === 'Poppins, sans-serif') { - console.log('Passed: ** note text font-family matched as expected'); - } else { - errors.push(`Expected: ** note text font-family "DM Serif Display, serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '10.4px') { - console.log('Passed: ** note text font-size matched as expected'); - } else { - errors.push(`Expected: **n ote text font-size "10.4px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(40, 39, 90, 1)') { - console.log('Passed: ** note text color matched as expected'); - } else { - errors.push(`Expected: ** note text color "rgba(40, 39, 90, 1)"; Actual: "${elementColor}"`); - errors.push(message) - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //NEXT ACTION - { - description: 'Click Search button', - action: async () => { - await driver.findElement(By.css('#stdsubmit')).click(); - console.log('----->| NEXT ACTION: Clicked Search button'); - - //Wait for page to load completely - await driver.wait(async () => { - const readyState = await driver.executeScript('return document.readyState'); - return readyState === 'complete'; - }, 30000, 'Standards search page did not fully load within 30 seconds'); - console.log('Passed: Standards Search Page loaded successfully'); - - //Wait until the modal title is located AND visible - await driver.wait(async () => { - try { - const element = await driver.findElement(By.css('.breadcrumb-item:nth-child(2)')); - return await element.isDisplayed(); - } catch (e) { - return false; //Element not ready yet, keep waiting - } - }, 20000, 'Standards breadcrumb label did not become visible within 20 seconds'); - - console.log('Passed: Standards breadcrumb label loaded successfully'); - } - }, - - ...myStandardsSearch_AlignedContent(driver), - -]; - -const logStep = (worksheet, stepDescription, status, stepIndex, timestamp, screenshotPath) => { - const json_data = XLSX.utils.sheet_to_json(worksheet, { header: 1 }); - json_data.push([stepIndex, stepDescription, status, timestamp, screenshotPath]); - return XLSX.utils.aoa_to_sheet(json_data); -}; - -const takeScreenshot = async (driver, stepIndex, stepDescription) => { - const screenshot = await driver.takeScreenshot(); - - const dir = path.join('screenshots', 'dashboardMyStandardsResults'); - - const screenshotFileName = `step_${stepIndex}_${stepDescription.replace(/\s+/g, '_')}.png`; - const screenshotPath = path.join(dir, screenshotFileName); - fs.writeFileSync(screenshotPath, screenshot, 'base64'); - return screenshotPath; -}; - -const clearOldResults = () => { - //Remove old screenshots - const screenshotDir = path.join('screenshots', 'dashboardMyStandardsResults'); - if (fs.existsSync(screenshotDir)) { - fs.rmSync(screenshotDir, { recursive: true, force: true }); - } - fs.mkdirSync(screenshotDir, { recursive: true }); - - //Remove old Excel file - if (fs.existsSync('dashboardMyStandardsResults.xlsx')) { - fs.unlinkSync('dashboardMyStandardsResults.xlsx'); - } -}; - -try { - //Initialize workbook and worksheet - clearOldResults(); - - //Initialize workbook and worksheet - workbook = XLSX.utils.book_new(); - worksheet = XLSX.utils.aoa_to_sheet([ - ['Step Number', 'Step Description', 'Status', 'Timestamp', 'Screenshot'] - ]); - XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1'); - - //Log test start time - worksheet = logStep(worksheet, 'Test Start', 'Started', '', startTime, ''); - - let allStepsPassed = true; - - const failedSteps = []; //Track failed steps - - for (const step of steps) { - const stepIndex = steps.indexOf(step) + 1; - const timestamp = new Date().toISOString(); - - try { - await step.action(); - worksheet = logStep( - worksheet, - step.description, - 'Passed', - stepIndex, - timestamp, - null - ); - - } catch (error) { - const screenshotPath = await takeScreenshot( - driver, - stepIndex, - `${step.description}_Failed` - ); - - worksheet = logStep( - worksheet, - step.description, - 'Failed', - stepIndex, - timestamp, - screenshotPath - ); - - console.error(`Step ${stepIndex} FAILED: ${error.message}`); - failedSteps.push(`Step ${stepIndex}: ${step.description} - ${error.message}`); //Track failed step - testStatus = 'Failed'; - allStepsPassed = false; - } - } - - if (allStepsPassed) { - console.log('------------->| THE END |<-------------'); - console.log('PASSED: DASHBOARD - My Standards Widget(dashboardMyStandards); All test steps completed successfully'); - testStatus = 'Passed'; - } else { - console.log('------------->| THE END |<-------------'); - console.log('FAILED: DASHBOARD - My Standards Widget(dashboardMyStandards); One or more test steps failed'); - console.log('FAILED STEPS:'); - failedSteps.forEach(step => console.error(` ✗ ${step}`)); - testStatus = 'Failed'; - } - - //Log test end time - const endTime = new Date().toISOString(); - worksheet = logStep(worksheet, 'Test End', testStatus, '', endTime, ''); - - //Write the updated worksheet back to the workbook and save it - workbook.Sheets['Sheet1'] = worksheet; - XLSX.writeFile(workbook, 'dashboardMyStandardsResults.xlsx'); -} finally { - await driver.quit(); -} - })(); -} - -export default dashboardMyStandards; diff --git a/tests/exactLandingPage.js b/tests/exactLandingPage.js index 8a9fb4c..8af8b79 100644 --- a/tests/exactLandingPage.js +++ b/tests/exactLandingPage.js @@ -4817,7 +4817,7 @@ const takeScreenshot = async (driver, stepIndex, stepDescription) => { return screenshotPath; }; -const resultsFile = path.join('results', 'exactLandingPageResults.xlsx'); +const resultsFile = path.join('results', 'exactLandingPage.xlsx'); const clearOldResults = () => { //Remove old screenshots diff --git a/tests/myStandardsSearchAlignedContent.js b/tests/myStandardsSearchAlignedContent.js index 4b65030..c192400 100644 --- a/tests/myStandardsSearchAlignedContent.js +++ b/tests/myStandardsSearchAlignedContent.js @@ -3,8 +3,6 @@ import { Options as ChromeOptions } from 'selenium-webdriver/chrome.js'; import fs from 'fs'; import XLSX from 'xlsx'; import path from 'path'; -import { brotliCompress } from 'zlib'; -import e from 'express'; //Export JUST the steps so other scripts can import them export const myStandardsSearch_AlignedContent = (driver) => [ @@ -7752,10 +7750,10 @@ export const myStandardsSearch_AlignedContent = (driver) => [ const errors = []; //text - if (elementText === 'Aligned Content 4') { - console.log('Passed: Standard Code 2, Aligned Content 4 button text matched as expected'); + if (elementText === 'Aligned Content 5') { + console.log('Passed: Standard Code 2, Aligned Content 5 button text matched as expected'); } else { - errors.push(`Expected: "Aligned Content 4"; Actual: "${elementText}"`); + errors.push(`Expected: "Aligned Content 5"; Actual: "${elementText}"`); } //font @@ -8095,14 +8093,14 @@ const myStandardsSearch = (req, res) => { return readyState === 'complete'; }, 30000, 'ExACT Dashboard did not fully load within 30 seconds'); - /*Wait for the dashboard container to exist in DOM + //Wait for the dashboard container to exist in DOM await driver.wait( until.elementLocated(By.css('.gap-idle-wrap > img')), 30000, 'Dashboard image did not appear within 30 seconds' ); - Wait for it to be visible + //Wait for it to be visible await driver.wait(async () => { try { const img = await driver.findElement(By.css('.gap-idle-wrap > img')); @@ -8110,7 +8108,7 @@ const myStandardsSearch = (req, res) => { } catch (e) { return false; } - }, 30000, 'Dashboard image did not become visible within 30 seconds');*/ + }, 30000, 'Dashboard image did not become visible within 30 seconds'); //Wait for any loading spinners to disappear await driver.wait(async () => { @@ -8314,18 +8312,21 @@ const takeScreenshot = async (driver, stepIndex, stepDescription) => { return screenshotPath; }; +const resultsFile = path.join('results', 'myStandardsSearchAlignedContentResults.xlsx'); + const clearOldResults = () => { //Remove old screenshots - const screenshotDir = path.join('screenshots', 'myStandardsSearchAlignedContentResults'); + const screenshotDir = path.join('screenshots', 'myStandardsSearchAlignedContent'); if (fs.existsSync(screenshotDir)) { fs.rmSync(screenshotDir, { recursive: true, force: true }); } fs.mkdirSync(screenshotDir, { recursive: true }); //Remove old Excel file - if (fs.existsSync('myStandardsSearchAlignedContentResults.xlsx')) { - fs.unlinkSync('myStandardsSearchAlignedContentResults.xlsx'); + if (fs.existsSync(resultsFile)) { + fs.unlinkSync(resultsFile); } + fs.mkdirSync('results', { recursive: true }); }; try { @@ -8352,13 +8353,15 @@ try { try { await step.action(); + + //Log a successful step with no screenshot worksheet = logStep( worksheet, step.description, 'Passed', stepIndex, timestamp, - null + null //No screenshot for passed steps ); } catch (error) { @@ -8402,11 +8405,11 @@ try { //Write the updated worksheet back to the workbook and save it workbook.Sheets['Sheet1'] = worksheet; - XLSX.writeFile(workbook, 'myStandardsSearchAlignedContentResults.xlsx'); + XLSX.writeFile(workbook, resultsFile); } finally { await driver.quit(); } })(); -}; +} export default myStandardsSearch;