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.
- Kumpulkan semua link di halaman web berdasarkan tag.
- Kirim permintaan HTTP untuk tautan dan baca kode respons HTTP.
- Cari tahu apakah tautan tersebut valid atau rusak berdasarkan kode respons HTTP.
- 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.
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().
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.