Պատվերով հրամանը զննարկիչի օբյեկտը նոր գործառույթներով ընդլայնելու միջոց է՝ նպատակ ունենալով ուժեղացնել թեստային սպասարկումը և նվազեցնել կոդերի կրկնօրինակումը:
WebdriverIO - Պատվերով հրամանների առաջադեմ հասկացություններ
WebdriverIO-ն ապահովում է բրաուզերի հատուկ հրամանների աջակցություն: Նպատակն է միավորել հրամանների որոշակի հաջորդականություն, որոնք հաճախ օգտագործվում են հարմար մեկ հրամանի կանչում:
Դուք կարող եք նաև անտեսել առկա հրամանները, և դա կարող է շատ օգտակար լինել, եթե դուք պետք է այլ վարքագիծ տրամադրեք ներկառուցված WebdriverIO հրամանին:
Պատվերով հրաման սահմանելու լավագույն վայրը WebdriverIO կեռիկի ներսում է: onPrepare կեռիկը կարող է լավ տեղ լինել, եթե ցանկանում եք ինտեգրել երրորդ կողմի գրադարանի գործառույթը ձեր թեստի մեջ:
Եթե դուք պետք է կարգավորեք API-ի զանգերը ձեր թեստերի ընթացքում, ապա օգտագործելու համար լավ գրադարան է request-promise:
Օրինակ.
browser.addCommand("getUsers", function (options) { //You can add here any other implementation you need return request-promise.get(options); });
Այժմ ենթադրենք, որ դուք ունեք վեբ հավելված, որը ցուցադրում է բեռնման պատկերակը ամեն անգամ, երբ AJAX զանգ է տեղի ունենում: Շատ դժվար կլինի կարգավորել և բուժել բոլոր իրավիճակները բոլոր վայրերից, որպեսզի խուսափեք այնպիսի սխալներից, ինչպիսիք են «Տարրը սեղմելի չէ»: Լավ միջոց կարող է լինել դա կարգավորել սովորական հրամանով: Բայց սպասեք, ի՞նչ կլինի, եթե դուք արդեն գրել եք բազմաթիվ թեստեր և Էջի օբյեկտներ: Կսկսե՞ք ամեն ինչ վերաշարադրել՝ պարզապես մեկ այլ հրաման ունենալու համար՝ «browser.clickIfNoLoadingIcon»: Սա ժամանակատար կլինի և պետք է խուսափել:
Փոխարենը եկեք պարզապես անտեսենք WebdriverIO click() ֆունկցիան.
browser.addCommand("click", function (selector) { let result; try { if (selector) { result = browser.element(selector).click(); } else { result = this.elementIdClick(this.element().value.ELEMENT); } } catch (err) { // console.log('ERR CLICK'); // console.log(err.message); if (err.message.indexOf('is not clickable') !== -1 && err.message.indexOf('LoadingIndicator') !== -1) { // console.log('WAIT FOR LOADING'); browser.waitForLoading(10000); result = this.click(); } else { // console.log('THROW ERR'); throw err; } } return result; }, true);
Վերոնշյալը հարմար հարմարեցված հրաման է, որը կվերացնի browser.click() կամ element.click() հրամանները, այնպես որ կոդը այլ փոփոխությունների կարիք չի ունենա: Դուք կնկատեք, որ կա 3-րդ պարամետր՝ ճշմարիտ արժեքով: Սա անհրաժեշտ է WebdriverIO-ին թույլ տալու համար, որ մենք ցանկանում ենք վերացնել գոյություն ունեցող հրամանը, հակառակ դեպքում սխալ կհայտնվի (տես այստեղ): զննարկիչ.waitForLoading(10000); դա պարզապես ևս մեկ հատուկ հրաման է, որը կսպասի բեռնման պատկերակի անհետացմանը կամ բացառություն կստեղծի, եթե դա տեղի չունենա 10000 մվ-ի ընթացքում: Դուք պետք է բացառություն գցեք waitForLoading()-ի մեջ, հակառակ դեպքում հրամանը կարող է անցնել անսահման հանգույց (ՆՇՈՒՄ. լավ, ոչ այնքան անսահման, այն կավարտվի, երբ WebdriverIO ժամկետըկատարվի)
Եզրակացություն
Բրաուզերի օբյեկտի ընդլայնումը երրորդ կողմի lib ֆունկցիոնալությամբ լավ միջոց է ձեր փորձարկումների ընթացքում ձեզ անհրաժեշտ իրականացումը ավելացնելու և ձեր կոդը մաքուր և պահպանելի պահելու համար:
Անտեսելով ներկառուցված հրամանները, դուք կարող եք բարելավել ձեր թեստերի մի քանի ասպեկտներ.
- Փորձարկման հուսալիություն. browser.pause() մոտեցումը միշտ չէ, որ կարող է աշխատել, քանի որ այն սահմանվում է ստատիկ արժեքով: Այսպիսով, ավելի դանդաղ միջավայրերում դա կարող է բավարար չլինել և պետք է ավելացվի: Բայց դրա ավելացումը թերություն կլինի բարձր արագությամբ միջավայրերում, որտեղ ավելի երկար սպասելու կարիք չկա:
- Թեստերի կատարումը: Սա ձեռք է բերվում վերը նշված օրինակում՝ փոխարինելով ցանկացած browser.pause() ստատիկ արժեքով՝ բեռնվող պատկերակի տեսքը կամ անհետացումը կարգավորելու դինամիկ եղանակով։
WebdriverIO-ին հատուկ հրամաններ ավելացնելը հարմար գործառույթ է, որը կարող է օգնել ձեզ ստեղծել ավելի լավ, ավելի պահպանվող թեստային կոդ:
Այստեղ կարող եք գտնել այս հոդվածում օգտագործված աշխատանքային օրինակը: