Պատվերով հրամանը զննարկիչի օբյեկտը նոր գործառույթներով ընդլայնելու միջոց է՝ նպատակ ունենալով ուժեղացնել թեստային սպասարկումը և նվազեցնել կոդերի կրկնօրինակումը:

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-ին հատուկ հրամաններ ավելացնելը հարմար գործառույթ է, որը կարող է օգնել ձեզ ստեղծել ավելի լավ, ավելի պահպանվող թեստային կոդ:

Այստեղ կարող եք գտնել այս հոդվածում օգտագործված աշխատանքային օրինակը: