Kırık Bağlantılar Nasıl Bulunur? Selenium
Kırık Linkler Nedir?
Kırık bağlantılar, ulaşılamayan bağlantılar veya URL'lerdir. Bazı sunucu hataları nedeniyle kapalı veya çalışmıyor olabilirler
Bir URL her zaman geçerli olan 2xx durumuna sahip olacaktır. Farklı amaçlara sahip farklı HTTP durum kodları vardır. Geçersiz bir istek için HTTP durumu 4xx ve 5xx'tir.
4xx durum kodu sınıfı esas olarak istemci tarafı hatası içindir ve 5xx durum kodu sınıfı esas olarak sunucu yanıt hatası içindir.
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?
Kullanıcının hata sayfasına gitmemesi için sitede her zaman bozuk bağlantı olmadığından emin olmalısınız.
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 sıkıcı bir iştir çünkü her web sayfasında çok sayıda bağlantı bulunabilir ve manuel işlemin tüm sayfalar için tekrarlanması gerekir.
Kullanan bir Otomasyon betiği 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.
- Web sayfasındaki tüm bağlantıları etikete göre toplayın.
- Bağlantı için HTTP isteği gönderin ve HTTP yanıt kodunu okuyun.
- HTTP yanıt koduna göre bağlantının geçerli mi yoksa bozuk mu olduğunu öğrenin.
- Yakalanan tüm bağlantılar için bunu tekrarlayın.
Bir web sayfasındaki Kırık Bağlantıları Bulma Kodu
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 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ı tanımlayın ve bunları Listede saklayın.
List<WebElement> links = driver.findElements(By.tagName("a"));
Listede gezinmek için Yineleyiciyi edinin.
Iterator<WebElement> it = links.iterator();
3. Adım: URL'yi Tanımlama ve Doğrulama
Bu bölümde URL'nin Üçüncü parti alana ait olup olmadığını veya URL'nin boş/null olup olmadığını kontrol edeceğiz.
Bağlantı etiketinin hrefini 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ı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; }
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.
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öndermek ve HTTP yanıt kodunu yakalamak için yöntemlere sahiptir. Dolayısıyla, openConnection() yönteminin (URLConnection) çıktısı, HttpURLConnection'a türetilen türdür.
huc = (HttpURLConnection)(new URL(url).openConnection());
İstek tipini “GET” yerine “HEAD” olarak ayarlayabiliriz. 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 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"); }
Böylece web sayfasındaki tüm linkleri elde edebilir 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ı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() yöntemi, a etiketli Web Öğelerinin bir listesini döndürür. For-each döngüsü kullanılarak her öğeye 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.
- Görüntü bağlantılarına erişim By.cssSelector() ve By.xpath() yöntemleri kullanılarak yapılır.
Sorun giderme
İstisnai bir durumda, kodun eriştiği ilk bağlantı “Ana Sayfa” Bağlantısı olabilir. Böyle bir durumda, 1. eylem bir tarayıcı açmak olduğundan, Driver.navigate.back() eylemi boş bir sayfa gösterecektir. Sürücü boş bir tarayıcıda diğer tüm bağlantıları bulamayacaktır. Yani IDE bir istisna atacak ve kodun geri kalanı çalışmayacaktır. Bu, If döngüsü kullanılarak kolayca yapılabilir.