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.

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.
- Etikete göre web sayfasındaki tüm bağlantıları toplayın.
- Bağlantı için bir HTTP isteği gönderin ve HTTP yanıt kodunu okuyun.
- HTTP yanıt koduna bakarak bağlantının geçerli mi yoksa bozuk mu olduğunu öğrenin.
- 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.
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.
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.


.png)