İstisna İşleme Selenium Web Sürücüsü (Türler)

⚡ Akıllı Özet

İstisna yönetimi Selenium WebDriver, başarısız olan bir komutun durdurulmasını engeller.ping Tam bir test çalışması. Java try-catch, birden fazla catch bloğu, throw, throws ve son olarak her biri bir komut dosyasına farklı bir kurtarma yöntemi sunar.

  • 🔘 Tanım: İstisna, bir program çalışırken ortaya çıkan bir hatadır ve ele alınmayan bir istisna, programın çalışmasını durdurur.
  • ☑️ Dürbün: Selenium WebDriver, kırktan fazla istisna sınıfı içerir ve bunların her biri WebDriverException'dan türemiştir.
  • Sık sık suç işleyenler: NoSuchElementException, TimeoutException, StaleElementReferenceException ve ElementNotInteractableException, gerçek dünyadaki hataların çoğuna neden olur.
  • 🧪 Taşıma: Bir try-catch bloğu bir hata türünü izole eder, birden fazla catch bloğu çeşitli hataları birbirinden ayırır ve son olarak her zaman çalıştırılır.
  • Escalation: `throw` ve `throws` anahtar kelimeleri, geçerli yöntem bir istisnayı çözemediğinde, istisnayı çağırana geri iletir.
  • 📊 Teşhis: printStackTrace(), toString() ve getMessage() fonksiyonlarının her biri, hatayla ilgili farklı düzeyde ayrıntılı bilgi verir.

İstisna yönetimi Selenium try-catch, throw ve finally ile WebDriver

İstisna nedir?

İstisna, bir programın yürütülmesi sırasında meydana gelen bir hatadır. Program çalışırken, programlama dili ele alınması gereken bir istisna üretir; aksi takdirde program çöker.

Bu istisna, olayın meydana gelebileceğini ancak bu tür olayların nadiren gerçekleştiğini gösterir. Bir metot istisnayı ele alamadığında, istisna çağıran fonksiyona fırlatılır. JavaBu da çoğu şeyi yönlendiriyor. Selenium Bu paketlerde, her WebDriver istisnası denetlenmez, bu nedenle derleyici sizi asla onu yakalamaya zorlamaz; ele alınmayan bir hata yalnızca çalışma zamanında ortaya çıkar.

İstisna Türleri Selenium Web Sürücüsü

WebDriverException, hiyerarşinin temel sınıfıdır ve altındaki her istisna ondan miras alır. Tabloda karşılaşabileceğiniz 41 istisnanın tamamı, her birini ortaya çıkaran koşulla birlikte listelenmiştir.

# Istisna Ne zaman meydana gelir
1 ElementNotVisibleException DOM'da mevcut bir öğenin özellik ayarı "gizli" olarak belirlenmiştir.
2 ElementNotSelectableException Öğe DOM'da mevcut ancak seçilemiyor, bu nedenle etkileşim mümkün değil.
3 NoSuchElementException Bu öğe bulunamadı. lokasyon sağladı.
4 NoSuchFrameException MKS çerçeve Geçiş yapılacak hedef mevcut değil.
5 NoAlertPresentException Bir geçiş uyarı Herhangi bir uyarı görüntülenmediğinde çalışır.
6 NoSuchWindowException Geçiş yapılacak pencere hedefi mevcut değil.
7 StaleElementReferenceException Web öğesi mevcut olandan ayrıldı. KARAR.
8 Oturum Bulunamadı İstisnası WebDriver, tarayıcıyı kapattıktan sonra devreye girer.
9 Zaman Aşımı İstisnası Bir komut zamanında tamamlanmadı; örneğin, aranan öğe bekleme süresi içinde bulunamadı.
10 WebDriverException Diğer WebDriver istisnalarının temel sınıfı; ayrıca tarayıcıyı kapattıktan hemen sonra WebDriver işlem yaptığında da ortaya çıkar.
11 BağlantıKapatıldı İstisnası Sürücüde bir kopukluk var.
12 ElementClickInterceptedException Olayları alan öğe, tıklama isteği gönderilen öğeyi gizliyor.
13 ElementNotInteractableException Öğe DOM'da mevcut, ancak onunla etkileşim kurmak mümkün değil.
14 Yanıt Hatası Etkileşim sırasında bir hata oluştu. Firefox uzantısı veya uzak sürücü sunucusu.
15 Hataİşleyici.BilinmeyenSunucuİstisnası Sunucu yığın izi belirtmeden hata döndürdüğünde yer tutucu olarak kullanılır. trace.
16 ImeActivationFailedException IME motoru etkinleştirme başarısız oldu.
17 ImeNotAvailableException IME desteği mevcut değil.
18 GüvensizSertifikaİstisnası Gezinti, kullanıcı aracısının bir noktaya ulaşmasına neden oldu. sertifika uyarısıGeçersiz veya süresi dolmuş bir TLS sertifikasının neden olabileceği bir durumdur.
19 GeçersizArgüman İstisnası Argüman beklenen türe ait değil.
20 Geçersiz ÇerezAlanİstisnası A kurabiye Mevcut alan adı yerine farklı bir alan adı altında eklenir. URL.
21 GeçersizKoordinatlarİstisnası Eşleşen etkileşim işlemi geçerli değil.
22 GeçersizElementDurumuHatası Öğe geçersiz olduğu için komut tamamlanamıyor.
23 GeçersizOturumKimliğiHatası Verilen oturum kimliği aktif oturumlar arasında yer almıyor, dolayısıyla mevcut değil veya pasif durumda.
24 GeçersizGeçişTargetIstisna Geçiş yapılacak çerçeve veya pencere hedefi mevcut değil.
25 JavascriptIstisna İşlem yürütülürken bir hata oluştu. JavaKullanıcı tarafından verilen script.
26 JsonException Oturum oluşturulmadığında oturum isteği gönderilir.
27 NoSuchAttributeException Bir öğenin özniteliği bulunamadı.
28 HareketTargetSınır Dışı İstisnası ActionChains sınıfının move() metoduna sağlanan hedef geçerli değil; örneğin, belgenin dışında.
29 NoSuchContextException Mobil cihaz testleri yapan ContextAware, istenen bağlamı bulamıyor.
30 NoSuchCookieException Şu anda görüntülenen belgenin çerezleri arasında, verilen yol adıyla eşleşen bir çerez bulunamadı.
31 NotFoundException DOM'da bir öğe bulunmadığında ortaya çıkan WebDriverException alt sınıfı.
32 RemoteDriverServerException Sunucu yanıt vermiyor çünkü açıklanan özellikler uygun değil.
33 Ekran Görüntüsü İstisnası Ekran görüntüsü almak mümkün değil.
34 Oturum Oluşturulmadı İstisnası Yeni bir oturum başarıyla oluşturulamadı.
35 UnableToSetCookieException Sürücü çerez ayarlayamıyor.
36 BeklenmeyenEtiketAdıİstisnası Destek sınıfı, beklendiği gibi bir web öğesi alamadı.
37 İşlenmemişUyarıİstisnası Bir uyarı mevcut, ancak WebDriver uyarı işlemini gerçekleştiremiyor.
38 UnexpectedAlertPresentException Beklenmedik bir uyarı belirdi.
39 BilinmeyenYöntemİstisnası İstenen komut bilinen bir komutla eşleşiyor. URL ama bu özel durum için bir yöntem değil. URL.
40 ErişilemeyenTarayıcıHatası Tarayıcı açılamıyor veya bir nedenden dolayı çöktü.
41 DesteklenmeyenKomutİstisnası Uzak WebDriver, beklendiği gibi geçerli komutlar göndermiyor.

Günlük hata ayıklamada üç temel unsur öne çıkar: NoSuchElementException, yanlış bir işlemi ifade eder. XPath TimeoutException, henüz oluşturulmamış bir öğe için çok kısa bir bekleme süresi anlamına gelir. AJAX yanıt verir ve ardından StaleElementReferenceException hatası oluşur. dinamik Yeniden oluştur.

İstisnalarla Nasıl Başa Çıkılır? Selenium

İşte istisnaları ele almak için kullanılan standart yapılar: Selenium WebDriver. Her biri sade. JavaBu nedenle her durumda işe yarar. WebDriver betiği Ek kütüphaneler olmadan.

Adım 1) Yakalamayı dene

Bu yöntem, `try` ve `catch` anahtar kelimelerinin bir kombinasyonunu kullanarak istisnaları yakalayabilir. `try` komutu bloğun başlangıcını işaretler ve `catch` ise istisnayı çözümlemek için `try` bloğunun sonuna yerleştirilir.

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

Adım 2) Çoklu yakalama blokları

Çeşitli istisna türleri vardır ve tek bir kod bloğu birden fazla istisna oluşturabilir. Birden fazla catch bloğu, her türü kendi koduyla ayrı ayrı ele almanıza olanak tanır. İkiden fazla catch bloğu kullanabilirsiniz ve ekleyebileceğiniz blok sayısında bir sınır yoktur.

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

Adım 3) Atın

Bir istisna oluşturmak istediğinizde, `throw` anahtar kelimesi onu çalışma zamanında işlenmek üzere iletir. İstisnayı mevcut metotta çözümlemek yerine ileriye doğru iletirken `throw` kullanın.

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

Adım 4) Çoklu İstisnalar

`throws` bloğunda çeşitli istisnalardan bahsedebilirsiniz.

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
}

Adım 5) Son olarak

`finally` anahtar kelimesi, `try` bloğunun altına bir blok oluşturur. Bu blok, bir istisna oluşup oluşmadığına bakılmaksızın çalışır; bu da onu bir sürücüyü kapatmak veya bir dosya tanıtıcısını serbest bırakmak için doğru yer yapar.

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

İstisna Bilgilerini Görüntüleme Yöntemleri

Bir istisna yakalandığında, nesnenin kendisi tanısal ayrıntıları içerir. Bunu görüntülemek için aşağıdaki yöntemleri kullanabilirsiniz:

Yöntem Ne bildiriyor?
printStackTrace() Yığın çıktısını verir. trace, istisnanın adı ve diğer yararlı açıklamalar.
toString () Hata adını ve açıklamasını içeren bir metin mesajı döndürür.
getMessage () Hatanın açıklamasını ayrı olarak görüntüler.

Bunları hata yakalama bloğunun içinden alınan bir ekran görüntüsüyle birleştirirseniz, başarısız bir çalıştırma hem neyin bozulduğunu hem de sayfanın nasıl göründüğünü gösterir.

SSS

Her WebDriver istisnası denetlenmez, çünkü hepsi WebDriverException aracılığıyla RuntimeException'ı genişletir. Bu nedenle derleyici hiçbir zaman try-catch bloğu talep etmez; bu kullanışlıdır, ancak aynı zamanda denetlenmeyen bir konum belirleyici hatasının yalnızca test gerçekten çalıştırıldığında ortaya çıkacağı anlamına gelir.

Referansı önbelleğe almak yerine, işlem yapmadan hemen önce öğeyi yeniden konumlandırın. İstisnayı yok sayan ve düğümü tekrar getiren kısa bir yeniden deneme döngüsü, React veya Vue'nun yeniden oluşturma işlemlerini daha uzun bir bekleme süresinden çok daha güvenilir bir şekilde ele alır.

Bekleme süresini önemli ölçüde azaltırlar ancak asla tamamen ortadan kaldırmazlar. Açık bir bekleme işlemi yalnızca zamanlama sorunlarını düzeltir; yanlış bir konum belirleyici, engellenen bir tıklama veya kapatılan bir oturum, yalnızca bir yakalama bloğunun absorbe edebileceği bir istisna oluşturur.

Selenium 4. sürüm aynı hiyerarşiyi koruyor, ancak bekleme kurucuları artık tamsayı zaman aşımı yerine bir Süre alıyor ve daha sıkı W3C argüman doğrulaması, geçersiz değerler için InvalidArgumentException hatasının ortaya çıkmasına neden oluyor. Selenium 3 kişi şikayetsiz kabul edildi.

Kendi kendini onaran konum belirleme motorları track, hangi seçicilerin bozulduğunu ve çalışan bir alternatifle değiştirildiğini belirleyerek, NoSuchElementException hatalarının büyük bir bölümünü ortadan kaldırır. Benzer modeller tekrarlanan yığınları kümelendirir. tracBu sayede gerçekten yeni bir hata, tekrarlanan ve sorunlu sürümlerin arasında kaybolmaz.

Copilot, standart kod kalıpları konusunda oldukça güçlüdür: bir try-catch iskeleti, doğru sırada bir catch zinciri ve sürücüyü sonlandıran bir finally bloğu. Kendi uygulamanızın hangi istisnaları fırlattığını bilemez, bu nedenle oluşturulan her catch bloğunu inceleyin.

Bunlar birbirini tamamlar. Bir ITestListener, başarısız olan her test için günlük kaydını ve ekran görüntülerini merkezileştirerek test gövdesini temiz tutar. Hatayı sadece bildirmek yerine, betiğin hatadan sonra devam etmesi gereken durumlarda try-catch bloğunu kullanın.

Hata ayıklama veya finally bloğu içinde sürücüyü TakesScreenshot'a dönüştürün ve oturum kapanmadan önce dosyayı yazın. Görüntüyü test yönteminin adıyla adlandırmak, yerel olarak hatayı yeniden üretmeden başarısız bir CI çalıştırmasının okunabilir olmasını sağlar.

Bu yazıyı şu şekilde özetleyin: