Cara Menemukan Tautan Rusak di Selenium

Apa itu Tautan Rusak?

Broken link adalah link atau URL yang tidak dapat dijangkau. Mereka mungkin tidak aktif atau tidak berfungsi karena beberapa kesalahan server

Sebuah URL akan selalu memiliki status 2xx yang valid. Ada kode status HTTP berbeda yang memiliki tujuan berbeda. Untuk permintaan yang tidak valid, status HTTP adalah 4xx dan 5xx.

Kode status kelas 4xx terutama untuk kesalahan sisi klien, dan kode status kelas 5xx terutama untuk kesalahan respons server.

Kemungkinan besar kami tidak dapat mengonfirmasi apakah tautan tersebut berfungsi atau tidak hingga kami mengeklik dan mengonfirmasinya.

Mengapa Anda harus memeriksa Tautan rusak?

Anda harus selalu memastikan bahwa tidak ada tautan yang rusak di situs karena pengguna tidak akan masuk ke halaman kesalahan.

Kesalahan terjadi jika aturan tidak diperbarui dengan benar, atau sumber daya yang diminta tidak ada di server.

Pemeriksaan link secara manual adalah tugas yang membosankan, karena setiap halaman web mungkin memiliki banyak link & proses manual harus diulang untuk semua halaman.

Skrip Otomatisasi menggunakan Selenium yang akan mengotomatiskan proses adalah solusi yang lebih tepat.

Cara cek Link dan Gambar Rusak di Selenium

Untuk memeriksa tautan yang rusak, Anda perlu melakukan langkah-langkah berikut.

  1. Kumpulkan semua link di halaman web berdasarkan tag.
  2. Kirim permintaan HTTP untuk tautan dan baca kode respons HTTP.
  3. Cari tahu apakah tautan tersebut valid atau rusak berdasarkan kode respons HTTP.
  4. Ulangi ini untuk semua tautan yang diambil.

Kode untuk Menemukan Tautan Rusak di halaman web

Di bawah ini adalah kode driver web yang menguji kasus penggunaan kami:

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

    }
}

Menjelaskan kode Broken Link

Langkah 1: Impor Paket

Impor paket di bawah ini selain paket default:

import java.net.HttpURLConnection;

Dengan menggunakan metode dalam paket ini, kita dapat mengirim permintaan HTTP dan menangkap kode respons HTTP dari respons tersebut.

Langkah 2: Kumpulkan semua tautan di halaman web

Identifikasi semua tautan di halaman web dan simpan di Daftar.

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

Dapatkan Iterator untuk melintasi Daftar.

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

Langkah 3: Mengidentifikasi dan Memvalidasi URL

Di bagian ini, kami akan memeriksa apakah URL milik domain pihak ketiga atau apakah URL kosong/null.

Dapatkan href dari tag jangkar dan simpan dalam variabel url.

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

Periksa apakah URL null atau Kosong dan lewati langkah selanjutnya jika kondisinya terpenuhi.

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

Periksa apakah URL milik domain utama atau pihak ketiga. Lewati langkah selanjutnya jika itu milik domain pihak ketiga.

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

Langkah 4: Kirim permintaan http

Kelas HttpURLConnection memiliki metode untuk mengirim permintaan HTTP dan menangkap kode respons HTTP. Jadi, output dari metode openConnection() (URLConnection) adalah tipe yang dilemparkan ke HttpURLConnection.

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

Kita dapat mengatur jenis Permintaan sebagai “HEAD” dan bukan “GET”. Sehingga hanya header yang dikembalikan dan bukan isi dokumen.

huc.setRequestMethod("HEAD");

Saat memanggil metode connect(), koneksi aktual ke url dibuat dan permintaan dikirim.

huc.connect();

Langkah 5: Memvalidasi Tautan

Dengan menggunakan metode getResponseCode() kita bisa mendapatkan kode respons untuk permintaan tersebut

respCode = huc.getResponseCode();

Berdasarkan kode respons kami akan mencoba memeriksa status tautan.

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

Dengan demikian, kita dapat memperoleh semua link dari halaman web dan mencetak apakah link tersebut valid atau rusak.

Semoga tutorial ini membantu Anda dalam memeriksa Tautan rusak menggunakan Selenium.

Cara mendapatkan SEMUA Tautan Halaman Web

Salah satu prosedur umum di web pengujian adalah untuk menguji apakah semua tautan yang ada di halaman berfungsi. Hal ini dapat dengan mudah dilakukan dengan menggunakan kombinasi dari Java untuk setiap loop, temukanElemen() & Oleh.tagName(“a”) Metode.

Metode findElements(), mengembalikan daftar Elemen Web dengan tag a. Menggunakan loop for-each, setiap elemen diakses.

Dapatkan SEMUA Tautan Halaman Web

Kode WebDriver di bawah ini memeriksa setiap tautan dari Mercury Tur beranda untuk menentukan mana yang berfungsi dan mana yang masih dalam pembangunan.

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 = "http://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();			
    }		
}

Outputnya harus serupa dengan yang ditunjukkan di bawah ini.

  • Pengaksesan link gambar dilakukan menggunakan metode By.cssSelector() dan By.xpath().

Dapatkan SEMUA Tautan Halaman Web

Penyelesaian masalah

Dalam kasus yang terisolasi, tautan pertama yang diakses oleh kode tersebut bisa jadi adalah Tautan “Beranda”. Dalam kasus seperti itu, tindakan driver.navigate.back() akan menampilkan halaman kosong saat tindakan pertama membuka browser. Pengemudi tidak akan dapat menemukan semua tautan lain di browser kosong. Jadi IDE akan mengeluarkan pengecualian dan kode lainnya tidak akan dieksekusi. Ini dapat dengan mudah ditangani menggunakan loop If.