Poikkeuskäsittely sisään Selenium Verkkoajuri (tyypit)

⚡ Älykäs yhteenveto

Poikkeuskäsittely Selenium WebDriver estää epäonnistuneen pysäytyskomennonping kokonainen koeajo. Java try-catch, useita catch-blokkeja, throw, throws ja lopuksi jokainen antaa skriptille erilaisen tavan toipua.

  • 🔘 Määritelmä: Poikkeus on ohjelman suorituksen aikana ilmennyt virhe, ja käsittelemätön virhe kaataa ohjelman suorituksen.
  • ☑️ Soveltamisala: Selenium WebDriver toimittaa yli neljäkymmentä poikkeusluokkaa, ja jokainen niistä polveutuu WebDriverException-luokasta.
  • Usein rikoksentekijöitä: NoSuchElementException, TimeoutException, StaleElementReferenceException ja ElementNotInteractableException aiheuttavat useimmat tosielämän virheet.
  • 🧪 käsittely: Try-catch-pari eristää yhden virhetyypin, useat catch-lohkot erottavat useita ja lopulta aina suoritetaan.
  • 🛠️ suurentaminen: Avainsanat throw ja throws välittävät poikkeuksen takaisin kutsujalle, kun nykyinen metodi ei pysty ratkaisemaan sitä.
  • 📊 Diagnoosi: printStackTrace(), toString() ja getMessage() raportoivat kukin eri yksityiskohtaisuustason virheestä.

Poikkeuskäsittely Selenium WebDriver, jossa on try-catch, throw ja finally

Mikä on poikkeus?

Poikkeus on virhe, joka tapahtuu ohjelman suorituksen aikana. Ohjelman suorituksen aikana ohjelmointikieli luo poikkeuksen, joka on käsiteltävä, muuten ohjelma kaatuu.

Poikkeus osoittaa, että vaikka tapahtuma voi tapahtua, tämäntyyppinen tapahtuma tapahtuu harvoin. Kun metodi ei pysty käsittelemään poikkeusta, se heitetään kutsujafunktiolle. Java, joka ajaa eniten Selenium sviiteissä jokainen WebDriver-poikkeus on tarkistamaton, joten kääntäjä ei koskaan pakota sinua nappaamaan sitä – käsittelemätön virhe ilmenee vasta suorituksen aikana.

Poikkeustyypit Selenium web-ajuri

WebDriverException on hierarkian perusluokka, ja jokainen sen alla oleva poikkeus periytyy siitä. Taulukossa luetellaan kaikki 41 poikkeusta, joihin saatat törmätä, sekä ehto, joka aiheuttaa kunkin poikkeustyypin.

# Poikkeus Kun se tapahtuu
1 ElementNotVisibleException DOM-elementin olemassa olevalla elementillä on piilotettu ominaisuusjoukko.
2 Elementtiä ei valittava poikkeus Elementti on DOM:ssa, mutta sitä ei voida valita, joten vuorovaikutus sen kanssa on mahdotonta.
3 NoSuchElementException Elementtiä ei löytynyt haulla paikannin toimitukseen.
4 NoSuchFrameException runko Vaihdettavaa kohdetta ei ole olemassa.
5 NoAlertPresentException Vaihto johonkin hälytys toimii, kun hälytystä ei näytetä.
6 NoSuchWindowException Vaihdettavaa ikkunakohdetta ei ole olemassa.
7 StaleElementReferenceException Verkkoelementti on irrotettu nykyisestä DOM.
8 Istuntoa ei löytynyt -poikkeus WebDriver toimii sen jälkeen, kun suljet selaimen.
9 TimeoutException Komentoa ei suoritettu loppuun ajoissa – esimerkiksi etsittyä elementtiä ei löytynyt odotusajasta.
10 WebDriverException Muiden WebDriver-poikkeusten perusluokka; syntyy myös silloin, kun WebDriver toimii heti selaimen sulkemisen jälkeen.
11 YhteysSuljettuPoikkeus Kuljettajassa on katkos.
12 ElementClickInterceptedException Tapahtumia vastaanottava elementti peittää napsautukselle pyydetyn elementin.
13 ElementNotInteractiveException Elementti on läsnä DOMissa, mutta sen kanssa on mahdotonta olla vuorovaikutuksessa.
14 Virhe vastauksessaPoikkeus Jokin epäonnistui vuorovaikutuksessa kohteen kanssa Firefox laajennus tai etäohjainpalvelin.
15 Virheenkäsittelijä.Tuntematonpalvelinpoikkeus Käytetään paikkamerkkinä, kun palvelin palauttaa virheen ilman pinoa trace.
16 ImeActivationFailedException IME-moottorin aktivointi epäonnistui.
17 ImeNotAvailableException IME-tuki ei ole käytettävissä.
18 Epävarma varmennepoikkeus Navigointi sai käyttäjäagentin painamaan todistusvaroitus, minkä virheellinen tai vanhentunut TLS-varmenne voi aiheuttaa.
19 Virheellinen argumenttipoikkeus Argumentti ei kuulu odotettuun tyyppiin.
20 Virheellinen evästeverkkotunnuksen poikkeus A pikkuleipä lisätään eri verkkotunnuksen alle nykyisen sijaan URL.
21 Virheellisten koordinaattien poikkeus Yhdistetty vuorovaikutusoperaatio ei ole kelvollinen.
22 InvalidElementStateException Komentoa ei voida suorittaa loppuun, koska elementti on virheellinen.
23 InvalidSessionIdException Annettu istuntotunnus ei ole aktiivisten istuntojen joukossa, joten sitä ei ole olemassa tai se on passiivinen.
24 Virheellinen vaihtoTargetPoikkeus Kehystä tai ikkunakohdetta, johon vaihdetaan, ei ole olemassa.
25 JavascriptPoikkeus Suorituksen aikana tapahtui virhe JavaKäyttäjän antama skripti.
26 JsonException Istuntoa pyydetään, kun istuntoa ei ole luotu.
27 NoSuchAttributeException Elementin attribuuttia ei löytynyt.
28 LiikkuaTargetRajojen ulkopuolella oleva poikkeus ActionChains move()-metodille annettu kohde ei ole kelvollinen — esimerkiksi "out of the document".
29 NoSuchContextException ContextAware, joka suorittaa mobiililaitteiden testausta, ei löydä pyydettyä kontekstia.
30 Ei tällaista evästepoikkeusta Annettua polkunimeä vastaavaa evästettä ei löytynyt parhaillaan selattavan asiakirjan evästeistä.
31 Ei löytynyt -poikkeusta WebDriverException-poikkeuksen alaluokka, joka syntyy, kun DOM-elementtiä ei ole olemassa.
32 RemoteDriverServerException Palvelin ei vastaa, koska kuvatut ominaisuudet eivät ole oikein.
33 ScreenshotException Näyttöä ei voi kaapata.
34 SessionNotCreatedException Uutta istuntoa ei voitu luoda onnistuneesti.
35 UnableToSetCookieException Kuljettaja ei pysty asettamaan evästettä.
36 Odottamaton tunnisteen nimen poikkeus Tukiluokka ei saanut odotettua verkkoelementtiä.
37 Käsittelemätön hälytyspoikkeus Hälytys on olemassa, mutta WebDriver ei pysty suorittamaan hälytystoimintoa.
38 Odottamaton hälytys nykyinen poikkeus Odottamaton hälytys tulee näkyviin.
39 Tuntemattoman menetelmän poikkeus Pyydetty komento vastaa tunnettua URL mutta ei menetelmää kyseiseen tarkoitukseen URL.
40 SaavuttamatonSelainPoikkeus Selainta ei voi avata, tai se kaatui jostain syystä.
41 Ei-tuettu komentopoikkeus Etä-WebDriver ei lähetä odotettuja kelvollisia komentoja.

Kolme hallitsevaa päivittäistä virheenkorjausta: NoSuchElementException tarkoittaa väärää XPath tai elementtiä, jota ei ole renderöity, TimeoutException tarkoittaa, että odotusaika on liian lyhyt AJAX vastaus, ja StaleElementReferenceException seuraa dynaaminen renderöidä uudelleen.

Kuinka käsitellä poikkeuksia Selenium

Tässä ovat vakiorakenteet poikkeusten käsittelyyn Selenium WebDriver. Jokainen on yksinkertainen Java, joten se toimii missä tahansa WebDriver-skripti ilman ylimääräisiä kirjastoja.

Vaihe 1) Yritä kiinni

Tämä metodi voi havaita poikkeuksia käyttämällä avainsanojen try ja catch yhdistelmää. try-komento merkitsee lohkon alun ja catch sijoitetaan try-lohkon loppuun, jossa se ratkaisee poikkeuksen.

try
{
// Code
} catch (Exception e) {
// Code for Handling exception
}

Vaihe 2) Useita kiinnityslohkoja

Poikkeuksia on erityyppisiä, ja yksi koodilohko voi aiheuttaa useamman kuin yhden. Useiden catch-lohkojen avulla voit käsitellä jokaista tyyppiä erikseen omalla koodillaan. Voit käyttää useampaa kuin kahta catch-lohkoa, eikä lisättävien lohkojen lukumäärälle ole rajoitusta.

try
{
//Code
} catch (ExceptionType1 e1) {
//Code for Handling Exception 1
} catch (ExceptionType2 e2) {
//Code for Handling Exception 2
}

Vaihe 3) Heitä

Kun haluat luoda poikkeuksen, throw-avainsana antaa sen käsiteltäväksi suorituksen aikana. Käytä throw-avainsanaa, kun välität poikkeuksen eteenpäin sen sijaan, että ratkaisisit sen nykyisessä metodissa.

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);
}
}

Vaihe 4) Useita poikkeuksia

Voit mainita erilaisia ​​poikkeuksia throws-lausekkeessa.

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
}

Vaihe 5) Lopuksi

Avainsana finally luo lohkon try-lohkon alapuolelle. Se suoritetaan riippumatta siitä, tapahtuiko poikkeus, joten se on oikea paikka sulkea ajuri tai vapauttaa tiedostokahva.

try {
//Code
} catch (ExceptionType1 e1) {
//Catch block
} catch (ExceptionType2 e2) {
//Catch block
} catch (ExceptionType3 e3) {
//Catch block
} finally {
//The finally block always executes.
}

Poikkeustietojen näyttämismenetelmät

Kun poikkeus havaitaan, itse objekti sisältää diagnostiikkatiedot. Voit näyttää ne seuraavilla tavoilla:

Menetelmä Mitä se raportoi
printStackTrace() Tulostaa pinon trace, poikkeuksen nimi ja muu hyödyllinen kuvaus.
toString () Palauttaa tekstiviestin, jossa kuvataan poikkeuksen nimi ja kuvaus.
getMessage() Näyttää poikkeuksen kuvauksen yksinään.

Yhdistä nämä catch-lohkon sisältä otettuun kuvakaappaukseen, niin epäonnistunut suoritus näyttää sekä mikä hajosi että miltä sivu näytti.

UKK

Jokainen WebDriver-poikkeus on tarkistamaton, koska ne kaikki laajentavat RuntimeException-poikkeusta WebDriverException-poikkeuksen kautta. Kääntäjä ei siis koskaan vaadi try-catch-komentoa, mikä on kätevää, mutta se tarkoittaa myös sitä, että suojaamaton paikannusvirhe ilmenee vasta, kun testi todella suoritetaan.

Sijoita elementti uudelleen välittömästi ennen kuin käsittelet sitä sen sijaan, että tallennat viittauksen välimuistiin. Lyhyt uudelleenyrityssilmukka, joka jättää poikkeuksen huomiotta ja hakee solmun uudelleen, käsittelee React- tai Vue-uudelleenrenderöinnit paljon luotettavammin kuin pidempi unitila.

Ne vähentävät sitä jyrkästi, mutta eivät koskaan poista sitä. Eksplisiittinen odotus korjaa vain ajoitusongelmia – väärä paikannus, siepattu klikkaus tai suljettu istunto aiheuttaa silti poikkeuksen, jonka vain catch-lohko voi absorboida.

Selenium Versiossa 4 säilytetään sama hierarkia, mutta odotuskonstruktorit käyttävät nyt kestoa kokonaislukuaikakatkaisun sijaan, ja tiukempi W3C-argumenttien validointi tarkoittaa, että InvalidArgumentException-poikkeus nostaa esiin arvot, jotka Selenium 3 hyväksyttiin ilman valituksia.

Itsekorjautuvat paikannusmoottorit track, jotka valitsimet rikkoutuvat ja vaihtavat toimivan vaihtoehdon, mikä poistaa suuren osan NoSuchElementException-virheistä. Samankaltaiset mallit klusteroivat toistuvan pinon tracjoten aidosti uusi vika ei jää hautaamaan epätasaisten uusintojen sekaan.

Copilot on vahva mallipohjaisesti – try-catch-runko, catch-ketju oikeassa järjestyksessä ja finally-lohko, joka lopettaa ajurin. Se ei voi tietää, mitä poikkeuksia oma sovelluksesi heittää, joten tarkista jokainen luotu catch-hyökkäys.

Ne täydentävät sitä. ITestListener keskittää lokin ja kuvakaappaukset kaikista epäonnistuneista testeistä, mikä pitää testin rungon siistinä. Käytä try-catch-ominaisuutta vain silloin, kun komentosarjan on jatkettava virheen jälkeen sen raportoinnin sijaan.

Siirrä ajuri TakesScreenshot-tiedostoon catch-komennon sisällä tai lopuksi lohkossa ja kirjoita tiedosto ennen istunnon sulkemista. Kuvan nimeäminen testimetodin mukaan tekee epäonnistuneesta CI-ajoista luettavia ilman, että vika toistuu paikallisesti.

Tiivistä tämä viesti seuraavasti: