Erandi käsitlemine Selenium Veebidraiver (tüübid)
⚡ Nutikas kokkuvõte
Erandi käsitlemine Selenium WebDriver hoiab nurjunud käsku stop-käsultping terve katsesõit. Java try-catch, mitu catch blokki, throw, throws ja lõpuks igaüks neist annab skriptile erineva viisi taastumiseks.
Mis on erand?
Erand on viga, mis ilmneb programmi käivitamise ajal. Programmi töötamise ajal genereerib programmeerimiskeel erandi, mis tuleb lahendada, vastasel juhul programm krahhib.
Erand näitab, et kuigi sündmus võib aset leida, toimub seda tüüpi sündmus harva. Kui meetod ei suuda erandiga toime tulla, suunatakse see oma kutsujafunktsioonile. Java, mis kõige enam ajendab Selenium sviitide puhul on iga WebDriveri erand kontrollimata, seega ei sunni kompilaator teid kunagi seda püüdma – käsitlemata tõrge ilmneb ainult käitusajal.
Erandite tüübid Selenium Veebidraiver
WebDriverException on hierarhia baasklass ja iga allpool olev erand pärib sellelt. Tabelis on loetletud kõik 41 erandit, millega võite kokku puutuda, koos tingimusega, mis iga erandi käivitab.
| # | Erand | Millal see juhtub |
|---|---|---|
| 1 | ElementNotVisibleException | DOM-is oleval elemendil on peidetud funktsioonide komplekt. |
| 2 | ElementNotSelectableException | Element asub DOM-is, kuid seda ei saa valida, seega on interaktsioon võimatu. |
| 3 | NoSuchElementException | Elementi ei leitud lokaator varustatud. |
| 4 | NoSuchFrameException | . raam Sihtmärki, millele lülitada, pole olemas. |
| 5 | NoAlertPresentException | Üleminek hoiatada käivitub, kui hoiatust ei kuvata. |
| 6 | NoSuchWindowException | Akna sihtmärki, millele lülitada, pole olemas. |
| 7 | StaleElementReferenceException | Veebielement on praegusest eraldatud DOM. |
| 8 | SessionNotFoundException | WebDriver hakkab tööle pärast brauseri sulgemist. |
| 9 | TimeoutException | Käsk ei jõudnud õigeaegselt lõpule – näiteks otsitud elementi ooteaja jooksul ei leitud. |
| 10 | WebDriverException | Teiste WebDriveri erandite baasklass; tekib ka siis, kui WebDriver tegutseb kohe pärast brauseri sulgemist. |
| 11 | Ühenduse sulgemise erand | Draiveris on ühenduse katkestus. |
| 12 | ElementClickInterceptedException | Sündmusi vastuvõttev element varjab klõpsu jaoks taotletud elementi. |
| 13 | ElementNotInteractableException | Element on DOM-is olemas, kuid sellega on võimatu suhelda. |
| 14 | VastusevigaErand | Suhtlemisel tekkis viga Firefox laiendus või kaugdraiveri server. |
| 15 | Veakäsitleja. TundmatuServeriErand | Kasutatakse kohatäitena, kui server tagastab vea ilma pinuta trace. |
| 16 | ImeActivationFailedException | IME mootori aktiveerimine ebaõnnestus. |
| 17 | ImeNotAvailableException | IME tugi pole saadaval. |
| 18 | Ebaturvalise sertifikaadi erand | Navigeerimine pani kasutajaagendi klõpsama a-l sertifikaadi hoiatus, mida võib põhjustada kehtetu või aegunud TLS-sertifikaat. |
| 19 | Kehtetu argumendi erand | Argument ei kuulu oodatud tüüpi. |
| 20 | Kehtetu küpsise domeeni erand | A küpsis lisatakse praeguse asemel teise domeeni alla URL. |
| 21 | Vigaste koordinaatide erand | Vastav interakteeruv toiming ei ole kehtiv. |
| 22 | Vigase elemendi oleku erand | Käsku ei saa lõpule viia, kuna element on sobimatu. |
| 23 | Kehtetu seansi ID erand | Antud seansi ID ei ole aktiivsete seansside hulgas, seega seda ei eksisteeri või on see mitteaktiivne. |
| 24 | Kehtetu lülitiTargetErand | Raami või akna sihtmärki, millele lülitada, pole olemas. |
| 25 | JavascriptErand | Käivitamisel tekkis viga JavaKasutaja antud skript. |
| 26 | JsonException | Seanssi taotletakse siis, kui seanssi pole loodud. |
| 27 | NoSuchAttributeException | Elemendi atribuuti ei leitud. |
| 28 | LiikumaTargetVäljaspool piire olev erand | ActionChains move() meetodile antud sihtmärk ei ole kehtiv – näiteks „väljas dokumendist“. |
| 29 | NoSuchContextException | ContextAware, mis tegeleb mobiilseadmete testimisega, ei leia taotletud konteksti. |
| 30 | NoSuchCookieException | Praegu sirvitava dokumendi küpsiste hulgast ei leitud antud teekonna nimega sobivat küpsist. |
| 31 | NotFoundException | WebDriverExceptioni alamklass, mis tekib siis, kui DOM-is elementi ei eksisteeri. |
| 32 | RemoteDriverServerException | Server ei vasta, kuna kirjeldatud võimalused pole õiged. |
| 33 | ScreenshotException | Ekraani ei ole võimalik jäädvustada. |
| 34 | SessionNotCreatedException | Uue seansi loomine ebaõnnestus. |
| 35 | UnableToSetCookieException | Juht ei saa küpsist määrata. |
| 36 | Ootamatu sildinime erand | Tugiklass ei saanud oodatud veebielementi. |
| 37 | Käitlemata hoiatuse erand | Hoiatus on olemas, kuid WebDriver ei saa hoiatustoimingut teostada. |
| 38 | Ootamatu hoiatuse praegune erand | Ilmub ootamatu teade. |
| 39 | Tundmatu meetodi erand | Taotletud käsk vastab teadaolevale URL aga mitte selle konkreetse meetodi jaoks URL. |
| 40 | Kättesaamatu brauseri erand | Brauserit ei saa avada või see jookseb mingil põhjusel kokku. |
| 41 | Toetamata käsuerand | Kaug-veebidraiver ei saada ootuspäraselt kehtivaid käske. |
Kolm domineerivat igapäevast silumist: NoSuchElementException tähendab valet XPath või element, mida pole renderdatud, tähendab TimeoutException, et ooteaeg on liiga lühike. AJAX vastusele ja StaleElementReferenceException järgneb dünaamiline uuesti renderdama.
Kuidas eranditega toime tulla Selenium
Siin on standardsed konstruktsioonid erandite käsitlemiseks Selenium WebDriver. Igaüks on lihtne Java, seega töötab see igas WebDriveri skript ilma lisaraamatukogudeta.
Samm 1) Proovige püüda
See meetod suudab erandeid püüda märksõnade try ja catch kombinatsiooni abil. Käsk try tähistab ploki algust ja catch paigutatakse try ploki lõppu, kus see lahendab erandi.
try { // Code } catch (Exception e) { // Code for Handling exception }
2. samm) Mitu püüdmisplokki
Erandeid on erinevat tüüpi ja üks koodiplokk võib tekitada mitu. Mitme catch-ploki korral saate iga tüübi eraldi koodiga käsitleda. Võite kasutada rohkem kui kahte catch-plokki ja lisatavate plokkide arvul pole piirangut.
try { //Code } catch (ExceptionType1 e1) { //Code for Handling Exception 1 } catch (ExceptionType2 e2) { //Code for Handling Exception 2 }
Samm 3) Viska
Kui soovid erandi genereerida, annab märksõna `throw` selle käitusajal käsitlemiseks edasi. Kasuta märksõna `throw` erandi edastamisel edasi, selle asemel, et seda praeguses meetodis lahendada.
public static void anyFunction() throws Exception{ try { // write your code here } catch (Exception b) { // Do whatever you want to perform // Throw the Exception back to the system throw(b); } }
4. samm) Mitu erandit
Throws-klauslis saab mainida mitmesuguseid erandeid.
public static void anyFunction() throws ExceptionType1, ExceptionType2{ try { // write your code here } catch (ExceptionType1 e1) { // Code to handle exception 1 } catch (ExceptionType2 e2) { // Code to handle exception 2 }
Samm 5) Lõpuks
Märksõna „finally” loob ploki „try” alla. See käivitub olenemata sellest, kas tekkis erand, mistõttu on see õige koht draiveri sulgemiseks või failikäepideme vabastamiseks.
try { //Code } catch (ExceptionType1 e1) { //Catch block } catch (ExceptionType2 e2) { //Catch block } catch (ExceptionType3 e3) { //Catch block } finally { //The finally block always executes. }
Erandteabe kuvamise meetodid
Kui erand on tabatud, kannab objekt ise diagnostilist detaili. Selle kuvamiseks saate kasutada järgmisi meetodeid:
| Meetod | Mida see teatab |
|---|---|
| printStackTrace() | Prindib virna trace, erandi nimi ja muu kasulik kirjeldus. |
| toString () | Tagastab tekstisõnumi, mis kirjeldab erandi nime ja kirjeldust. |
| getMessage() | Kuvab erandi kirjelduse eraldi. |
Ühenda need catch-ploki sees tehtud ekraanipildiga ja ebaõnnestunud käivitamine näitab nii, mis katki läks, kui ka seda, kuidas leht välja nägi.
