Selenium Webdriver kullanarak Tümünü / Bozuk bağlantıları Bulma

İçindekiler:

Anonim

Kırık Linkler nedir?

Bozuk bağlantılar, ulaşılamayan bağlantılar veya URL'lerdir. Bazı sunucu hatalarından dolayı çalışmıyor olabilirler veya çalışmıyor olabilirler.

Bir URL her zaman geçerli olan 2xx ile bir duruma sahip olacaktır. Farklı amaçları olan farklı HTTP durum kodları vardır. Geçersiz bir istek için HTTP durumu 4xx ve 5xx'dir.

4xx durum kodu sınıfı, esas olarak istemci tarafı hatası içindir ve 5xx sınıfı durum kodları, esas olarak sunucu yanıt hatası içindir.

Biz tıklayıp onaylayana kadar bu bağlantının çalışıp çalışmadığını büyük olasılıkla onaylayamayacağız.

Neden Bozuk bağlantıları kontrol etmelisiniz?

Her zaman sitede kırık bağlantı olmadığından emin olmalısınız çünkü kullanıcı bir hata sayfasına girmemelidir.

Hata, kurallar doğru şekilde güncellenmezse veya istenen kaynaklar sunucuda mevcut değilse ortaya çıkar.

Bağlantıların manuel olarak kontrol edilmesi sıkıcı bir iştir, çünkü her web sayfasında çok sayıda bağlantı olabilir ve manuel işlemin tüm sayfalar için tekrarlanması gerekir.

Süreci otomatikleştirecek Selenium kullanan bir Otomasyon betiği daha uygun bir çözümdür.

Kırık Bağlantılar ve görüntüler nasıl kontrol edilir

Bozuk bağlantıları kontrol etmek için aşağıdaki adımları uygulamanız gerekecektir.

  1. etiketine göre web sayfasındaki tüm bağlantıları toplayın.
  2. Bağlantı için HTTP isteği gönderin ve HTTP yanıt kodunu okuyun.
  3. Bağlantının HTTP yanıt koduna göre geçerli veya bozuk olup olmadığını öğrenin.
  4. Yakalanan tüm bağlantılar için bunu tekrarlayın.

Bir web sayfasındaki Bozuk bağlantıları Bulmak için Kod

Kullanım durumumuzu test eden web sürücüsü kodu aşağıdadır:

paket otomasyonujava.io.IOException'ı içe aktarın;java.net.HttpURLConnection'ı içe aktarın;import java.net.MalformedURLException;java.net.URL dosyasını içe aktarın;import java.util.Iterator;import java.util.List;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;public class BrokenLinks {özel statik WebDriver sürücüsü = boş;public static void main (String [] args) {// TODO Otomatik oluşturulan yöntem saplamasıString homePage = "http://www.zlti.com";Dize url = "";HttpURLConnection huc = boş;int respCode = 200;sürücü = yeni ChromeDriver ();driver.manage (). window (). maximize ();driver.get (homePage);List  bağlantıları = driver.findElements (By.tagName ("a"));Yineleyici  it = links.iterator ();while (it.hasNext ()) {url = it.next (). getAttribute ("href");System.out.println (url);eğer (url == null || url.isEmpty ()) {System.out.println ("URL, bağlantı etiketi için yapılandırılmamış veya boş");devam et;}eğer (! url.startsWith (homePage)) {System.out.println ("URL başka bir etki alanına ait, atlanıyor.");devam et;}Deneyin {huc = (HttpURLConnection) (yeni URL (url) .openConnection ());huc.setRequestMethod ("HEAD");huc.connect ();respCode = huc.getResponseCode ();eğer (respCode> = 400) {System.out.println (url + "bozuk bir bağlantıdır");}Başka{System.out.println (url + "geçerli bir bağlantıdır");}} catch (MalformedURLException e) {// TODO Otomatik oluşturulan yakalama bloğue.printStackTrace ();} catch (IOException e) {// TODO Otomatik oluşturulan yakalama bloğue.printStackTrace ();}}driver.quit ();}}

Kod Örneğini Açıklamak

Adım 1: Paketleri İçe Aktarın

Varsayılan paketlere ek olarak aşağıdaki paketi içe aktarın:

java.net.HttpURLConnection'ı içe aktarın;

Bu paketteki yöntemleri kullanarak HTTP istekleri gönderebilir ve yanıttan HTTP yanıt kodlarını yakalayabiliriz.

2. Adım: Web sayfasındaki tüm bağlantıları toplayın

Bir web sayfasındaki tüm bağlantıları tanımlayın ve bunları Listede saklayın.

List  bağlantıları = driver.findElements (By.tagName ("a"));

Listede gezinmek için Yineleyici edinin.

Yineleyici  it = links.iterator ();

3. Adım: URL'yi Tanımlama ve Doğrulama

Bu bölümde, URL'nin Üçüncü taraf etki alanına ait olup olmadığını veya URL'nin boş / boş olup olmadığını kontrol edeceğiz.

Bağlantı etiketinin href'ini alın ve url değişkeninde saklayın.

url = it.next (). getAttribute ("href");

URL'nin boş mu yoksa boş mu olduğunu kontrol edin ve koşul karşılanırsa kalan adımları atlayın.

eğer (url == null || url.isEmpty ()) {System.out.println ("URL, bağlantı etiketi için yapılandırılmamış veya boş");devam et;}

URL'nin bir ana alana mı yoksa üçüncü tarafa mı ait olduğunu kontrol edin. Üçüncü taraf etki alanına aitse kalan adımları atlayın.

 eğer (! url.startsWith (homePage)) {System.out.println ("URL başka bir etki alanına ait, atlanıyor.");devam et;}

4. Adım: http isteği gönderin

HttpURLConnection sınıfı, HTTP isteği gönderme ve HTTP yanıt kodunu yakalama yöntemlerine sahiptir. Bu nedenle, openConnection () yönteminin (URLConnection) çıktısı HttpURLConnection'a dönüştürülen türdür.

huc = (HttpURLConnection) (yeni URL (url) .openConnection ());

İstek türünü "GET" yerine "HEAD" olarak belirleyebiliriz. Böylece belge gövdesi değil, yalnızca başlıklar döndürülür.

huc.setRequestMethod ("HEAD");

Connect () yöntemi çağrıldığında, url'ye gerçek bağlantı kurulur ve istek gönderilir.

huc.connect ();

Adım 5: Bağlantıları Doğrulama

GetResponseCode () yöntemini kullanarak istek için yanıt kodu alabiliriz

respCode = huc.getResponseCode ();

Yanıt koduna göre bağlantı durumunu kontrol etmeye çalışacağız.

eğer (respCode> = 400) {System.out.println (url + "bozuk bir bağlantıdır");}Başka{System.out.println (url + "geçerli bir bağlantıdır");}

Böylelikle tüm linkleri web sayfasından alabilir ve linklerin geçerli veya bozuk olup olmadığını yazdırabiliriz.

Umarım bu eğitim, selenyum kullanarak Kırık bağlantıları kontrol etmenize yardımcı olur.

Bir Web Sayfasının TÜM Bağlantılarına Nasıl Ulaşılır?

Web Testindeki yaygın prosedürlerden biri, sayfada bulunan tüm bağlantıların çalışıp çalışmadığını test etmektir. Bu, her döngü için Java , findElements () & By.tagName ("a") yönteminin bir kombinasyonu kullanılarak rahatlıkla yapılabilir .

FindElements () yöntemi, a etiketine sahip Web Öğelerinin bir listesini döndürür. Her bir döngü için, her öğeye erişilir.

Aşağıdaki WebDriver kodu, çalışan ve halen yapım aşamasında olanları belirlemek için Mercury Tours ana sayfasındaki her bir bağlantıyı kontrol eder.

import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.chrome.ChromeDriver;import java.util.List;içe aktar java.util.concurrent.TimeUnit;import org.openqa.selenium. *;public class P1 {public static void main (String [] args) {String baseUrl = "http://demo.guru99.com/test/newtours/";System.setProperty ("webdriver.chrome.driver", "G: \\ chromedriver.exe");WebDriver sürücüsü = yeni ChromeDriver ();String underConsTitle = "Yapım Aşamasında: Mercury Tours";driver.manage (). timeout (). örtük olarak Bekleme (5, TimeUnit.SECONDS);driver.get (baseUrl);List  linkElements = driver.findElements (By.tagName ("a"));Dize [] linkTexts = new String [linkElements.size ()];int i = 0;// her bağlantı elemanının bağlantı metinlerini çıkariçin (WebElement e: linkElements) {linkTexts [i] = e.getText ();i ++;}// her bir bağlantıyı test edinfor (String t: linkTexts) {driver.findElement (By.linkText (t)) tıklayın ();eğer (driver.getTitle (). equals (underConsTitle)) {System.out.println ("\" "+ t +" \ ""+ "yapım aşamasındadır.");} Başka {System.out.println ("\" "+ t +" \ ""+ "çalışıyor.");}sürücü.navigate (). geri ();}driver.quit ();}}

Çıktı aşağıda belirtilene benzer olmalıdır.

  • Görüntü bağlantılarına erişim By.cssSelector () ve By.xpath () yöntemleri kullanılarak yapılır.
  • Sorun giderme

    İzole bir durumda, kod tarafından erişilen ilk bağlantı "Ana Sayfa" Bağlantısı olabilir. Bu durumda, driver.navigate.back () eylemi, 1. eylem tarayıcı açarken boş bir sayfa gösterecektir. Sürücü, boş bir tarayıcıda diğer tüm bağlantıları bulamayacaktır. Böylece IDE bir istisna atacak ve kodun geri kalanı çalışmayacaktır. Bu, bir If döngüsü kullanılarak kolayca işlenebilir.