Kırık Bağlantılar Nasıl Bulunur? Selenium

⚡ Akıllı Özet

Bozuk bağlantıları bulma Selenium WebDriver, her bir bağlantı etiketini toplamayı ve her birine bir HTTP HEAD isteği göndermeyi içerir. URLve yanıt kodunu okuyoruz. 400 veya üzeri yanıt kodu döndüren bağlantılar bozuk olarak işaretlenirken, geçerli bağlantılar 2xx kodları döndürür.

  • 🔗 Tanım: Kırık bir bağlantı şudur: URL Ulaşılamayan adres, genellikle 4xx veya 5xx hatası döndürür.
  • 🧭 Neden Önemlidir: Bozuk bağlantılar kullanıcı deneyimine ve SEO'ya zarar verir, bu nedenle yavaş manuel doğrulamanın yerini otomatik kontroller alır.
  • 📥 Bağlantıları Topla: Sayfadaki tüm bağlantı öğelerini bir listeye toplamak için `findElements` işlevini `By.tagName("a")` ile birlikte kullanın.
  • 📡 HEAD isteği gönder: Bir HTTP sayfası açın.URLBağlantıyı kurun, yöntemi HEAD olarak ayarlayın ve yanıt kodunu okuyun. URL.
  • Durumu Doğrula: 400 veya üzeri yanıt kodlarını bozuk, 2xx kodlarını ise çalışan bağlantı olarak değerlendirin.

Kırık Bağlantılar Nasıl Bulunur? Selenium

Kırık Linkler Nedir?

Kırık bağlantılar, bağlantılar veya URLUlaşılamayan bağlantılar. Bunlar, bir sunucu hatası nedeniyle çalışmıyor veya kapalı olabilir.

A URL Her zaman geçerli olan 2xx durum koduna sahip olacaktır. Farklı amaçlara hizmet eden farklı HTTP durum kodları vardır. Geçersiz bir istek için HTTP durum kodları 4xx ve 5xx'tir.

4xx durum kodu sınıfı çoğunlukla istemci tarafı hataları için, 5xx durum kodu sınıfı ise çoğunlukla sunucu yanıt hataları için kullanılır.

Büyük ihtimalle bu bağlantının çalışıp çalışmadığını tıklayıp onaylayana kadar doğrulayamayacağız.

Kırık bağlantıları neden kontrol etmelisiniz?

Sitede bozuk bağlantı olmadığından her zaman emin olmalısınız, çünkü kullanıcı bir hata sayfasına yönlendirilmemelidir.

Hata, kuralların doğru şekilde güncellenmemesi veya istenen kaynakların sunucuda mevcut olmaması durumunda ortaya çıkar.

Bağlantıların manuel olarak kontrol edilmesi zahmetli bir iştir, çünkü her web sayfasında çok sayıda bağlantı olabilir ve manuel işlem tüm sayfalar için tekrarlanmalıdır.

Otomasyon komut dosyası kullanılarak Selenium süreci otomatikleştirecek daha uygun bir çözümdür.

Kırık Bağlantılar ve Görseller nasıl kontrol edilir? Selenium

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

  1. Etikete göre web sayfasındaki tüm bağlantıları toplayın.
  2. Bağlantı için bir HTTP isteği gönderin ve HTTP yanıt kodunu okuyun.
  3. HTTP yanıt koduna bakarak bağlantının geçerli mi yoksa bozuk mu olduğunu öğrenin.
  4. Yakalanan tüm bağlantılar için bunu tekrarlayın.

Code Bir web sayfasındaki bozuk bağlantıları bulmak

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

package automationPractice;

import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
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 {

    private static WebDriver driver = null;

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        String homePage = "http://www.zlti.com";
        String url = "";
        HttpURLConnection huc = null;
        int respCode = 200;

        driver = new ChromeDriver();

        driver.manage().window().maximize();

        driver.get(homePage);

        List<WebElement> links = driver.findElements(By.tagName("a"));

        Iterator<WebElement> it = links.iterator();

        while(it.hasNext()){

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

            System.out.println(url);

            if(url == null || url.isEmpty()){
                System.out.println("URL is either not configured for anchor tag or it is empty");
                continue;
            }

            if(!url.startsWith(homePage)){
                System.out.println("URL belongs to another domain, skipping it.");
                continue;
            }

            try {
                huc = (HttpURLConnection)(new URL(url).openConnection());

                huc.setRequestMethod("HEAD");

                huc.connect();

                respCode = huc.getResponseCode();

                if(respCode >= 400){
                    System.out.println(url+" is a broken link");
                }
                else{
                    System.out.println(url+" is a valid link");
                }

            } catch (MalformedURLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

        driver.quit();

    }
}

Kırık Bağlantıların Kodunu Açıklamak

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

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

import java.net.HttpURLConnection;

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

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

Bir web sayfasındaki tüm bağlantıları belirleyin ve bunları bir Listeye kaydedin.

List<WebElement> links = driver.findElements(By.tagName("a"));

Listeyi dolaşmak için bir yineleyici (iterator) elde edin.

Iterator<WebElement> it = links.iterator();

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

Bu bölümde, bir şeyin olup olmadığını kontrol edeceğiz. URL üçüncü bir tarafa ait bir alan adına ait olup olmadığı veya URL boş/geçersiz.

Bağlantı etiketinin href özniteliğini alın ve url değişkenine kaydedin.

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

Kontrol edin URL Değer boş veya null ise, koşul sağlanıyorsa kalan adımları atlayın.

if(url == null || url.isEmpty()){
              System.out.println("URL is either not configured for anchor tag or it is empty");
              continue;
     }

Olup olmadığını kontrol edin URL Ana alana veya üçüncü tarafa ait olabilir. Üçüncü taraf bir alana aitse kalan adımları atlayın.

 if(!url.startsWith(homePage)){
           System.out.println("URL belongs to another domain, skipping it.");
           continue;
   }

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. Dolayısıyla, openConnection() yönteminin çıktısı (URLBağlantı) HTTP'ye dönüştürülür.URLBağ.

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

İstek türünü "GET" yerine "HEAD" olarak ayarlayabiliriz; böylece yalnızca başlıklar döndürülür, belge gövdesi döndürülmez.

huc.setRequestMethod("HEAD");

`connect()` metodu çağrıldığında, URL ile gerçek bağlantı kurulur ve istek gönderilir.

huc.connect();

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

getResponse'u kullanmaCode() metodu ile isteğe verilen yanıt kodunu alabiliriz.

respCode = huc.getResponseCode();

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

if(respCode >= 400){
        System.out.println(url+" is a broken link");
}
else{
        System.out.println(url+" is a valid link");
}

Bu sayede bir web sayfasındaki tüm bağlantıları alabilir ve bağlantıların geçerli mi yoksa bozuk mu olduğunu yazdırabiliriz.

Bir Web Sayfasının TÜM Bağlantılarını Nasıl Alabilirim?

Web'deki yaygın prosedürlerden biri Test yapmak sayfadaki tüm bağlantıların çalışıp çalışmadığını test etmektir. Bu, aşağıdakilerin bir kombinasyonu kullanılarak rahatlıkla yapılabilir: Java her döngü için, findElements() & By.tagName(“a”) yöntemi.

`findElements()` metodu, `a` etiketine sahip Web öğelerinin bir listesini döndürür. Her bir öğeye `for-each` döngüsü kullanılarak erişilir.

Bir Web Sayfasının TÜM Bağlantılarını Alın

Aşağıdaki WebDriver kodu, her bağlantıyı kontrol eder. Mercury Çalışan ve inşaatı devam edenleri belirlemek için ana sayfayı turlayın.

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import java.util.List;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.*;

public class P1 {

    public static void main(String[] args) {
        String baseUrl = "https://demo.guru99.com/test/newtours/";
        System.setProperty("webdriver.chrome.driver", "G:\\chromedriver.exe");
        WebDriver driver = new ChromeDriver();

        String underConsTitle = "Under Construction: Mercury Tours";
        driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);

        driver.get(baseUrl);
        List<WebElement> linkElements = driver.findElements(By.tagName("a"));
        String[] linkTexts = new String[linkElements.size()];
        int i = 0;

        //extract the link texts of each link element
        for (WebElement e : linkElements) {
            linkTexts[i] = e.getText();
            i++;
        }

        //test each link
        for (String t : linkTexts) {
            driver.findElement(By.linkText(t)).click();
            if (driver.getTitle().equals(underConsTitle)) {
                System.out.println("\"" + t + "\""
                        + " is under construction.");
            } else {
                System.out.println("\"" + t + "\""
                        + " is working.");
            }
            driver.navigate().back();
        }
        driver.quit();
    }
}

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

  • Resim bağlantılarına erişim, By.cssSelector() ve By.xpath() yöntemleri kullanılarak yapılır.

Bir Web Sayfasının TÜM Bağlantılarını Alın

Sorun giderme

Tekil bir durumda, kodun eriştiği ilk bağlantı "Ana Sayfa" bağlantısı olabilir. Böyle bir durumda, driver.navigate.back() eylemi boş bir sayfa gösterecektir, çünkü ilk eylem bir tarayıcı açmaktır. Sürücü, boş bir tarayıcıda diğer tüm bağlantıları bulamayacaktır. Bu nedenle IDE bir istisna fırlatacak ve kodun geri kalanı çalışmayacaktır. Bu, bir If döngüsü kullanılarak kolayca ele alınabilir.

SSS

Selenium Tüm bağlantı etiketlerini toplar ve her birine bir HTTP HEAD isteği gönderir. URLve 400 veya daha yüksek bir hata kodu döndüren tüm bağlantıları bozuk olarak işaretler.

4xx kodu, eksik sayfa gibi istemci tarafında bir sorunu gösterirken, 5xx kodu isteğin işlenmesi sırasında sunucu tarafında bir hatayı gösterir.

Evet. Resim kaynakları By.cssSelector() veya By.xpath() ile toplanır ve ardından her bir src dosyası işlenir. URL Doğrulama işlemi HTTP yanıt kodu aracılığıyla yapılır.

Evet. Yapay zekâ tabanlı tarayıcılar sayfaları tarar, bağlantıları takip eder ve bozuk veya yönlendirme yapan bağlantıları işaretler. URLmanuel kodlama gerektirmeden.

Yapay zeka, zaman içinde bağlantı sağlığını izler, arızaları tahmin eder ve değiştirme önerilerinde bulunur; böylece tekrarlanan manuel bağlantı denetimlerini azaltır.

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