Apa itu Pautan Pecah?
Pautan yang rosak adalah pautan atau URL yang tidak dapat dicapai. Mereka mungkin tidak berfungsi atau tidak berfungsi kerana beberapa kesalahan pelayan
URL akan sentiasa mempunyai status dengan 2xx yang sah. Terdapat kod status HTTP yang berbeza yang mempunyai tujuan yang berbeza. Untuk permintaan yang tidak sah, status HTTP adalah 4xx dan 5xx.
Kelas 4xx kod status terutamanya untuk ralat sisi pelanggan, dan kelas kod status 5xx terutamanya untuk ralat tindak balas pelayan.
Kami kemungkinan besar tidak dapat mengesahkan sama ada pautan itu berfungsi atau tidak sehingga kami mengklik dan mengesahkannya.
Mengapa anda mesti memeriksa Pautan yang rosak?
Anda harus selalu memastikan bahawa tidak ada pautan yang rosak di laman web kerana pengguna tidak boleh masuk ke halaman kesalahan.
Kesalahan berlaku sekiranya peraturan tidak diperbarui dengan betul, atau sumber yang diminta tidak ada di pelayan.
Pemeriksaan pautan secara manual adalah tugas yang membosankan, kerana setiap laman web mungkin mempunyai sebilangan besar pautan & proses manual harus diulang untuk semua halaman.
Skrip Automasi menggunakan Selenium yang akan mengotomatisasi proses adalah penyelesaian yang lebih tepat.
Cara memeriksa Pautan dan gambar yang rosak
Untuk memeriksa pautan yang rosak, anda perlu melakukan langkah-langkah berikut.
- Kumpulkan semua pautan di laman web berdasarkan tag .
- Kirim permintaan HTTP untuk pautan dan baca kod respons HTTP.
- Ketahui sama ada pautan itu sah atau rosak berdasarkan kod respons HTTP.
- Ulangi ini untuk semua pautan yang ditangkap.
Kod untuk Mencari pautan Rosak di laman web
Berikut adalah kod pemacu web yang menguji kes penggunaan kami:
automatik pakejPrice;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;kelas awam BrokenLinks {pemacu WebDriver statik peribadi = null;utama kekosongan statik awam (String [] args) {// TODO Kaedah penjanaan automatikString homePage = "http://www.zlti.com";Rentetan url = "";HttpURLConnection huc = null;int respCode = 200;pemacu = ChromeDriver baru ();driver.manage (). window (). maksimalkan ();driver.get (homePage);Senaraipautan = driver.findElements (By.tagName ("a"));Iterator it = links.iterator ();sementara (ia.selanjutnya ()) {url = it.next (). getAttribute ("href");System.out.println (url);jika (url == null || url.isEmpty ()) {System.out.println ("URL sama ada tidak dikonfigurasikan untuk anchor tag atau kosong");teruskan;}jika (! url.startsWith (homePage)) {System.out.println ("URL milik domain lain, melewatkannya.");teruskan;}cuba {huc = (HttpURLConnection) (URL baru (url) .openConnection ());huc.setRequestMethod ("KEPALA");huc.connect ();respCode = huc.getResponseCode ();jika (respCode> = 400) {System.out.println (url + "adalah pautan yang rosak");}lain {System.out.println (url + "adalah pautan yang sah");}} tangkapan (MalformedURLException e) {// TODO blok tangkapan yang dihasilkan secara automatike.printStackTrace ();} tangkapan (IOException e) {// TODO blok tangkapan yang dihasilkan secara automatike.printStackTrace ();}}driver.quit ();}}
Menjelaskan kod Contoh
Langkah 1: Import Pakej
Import pakej di bawah sebagai tambahan kepada pakej lalai:
import java.net.HttpURLConnection;
Dengan menggunakan kaedah dalam paket ini, kami dapat mengirim permintaan HTTP dan menangkap kod respons HTTP dari respons tersebut.
Langkah 2: Kumpulkan semua pautan di laman web
Kenal pasti semua pautan di laman web dan simpan dalam Senarai.
Senaraipautan = driver.findElements (By.tagName ("a"));
Dapatkan Iterator untuk melintasi Senarai.
Iteratorit = links.iterator ();
Langkah 3: Mengenal dan Mengesahkan URL
Di bahagian ini, kami akan memeriksa sama ada URL milik domain pihak ketiga atau sama ada URL kosong / tidak ada.
Dapatkan href anchor tag dan simpan dalam pemboleh ubah url.
url = it.next (). getAttribute ("href");
Periksa sama ada URL kosong atau Kosong dan langkau langkah selebihnya jika syaratnya dipenuhi.
jika (url == null || url.isEmpty ()) {System.out.println ("URL sama ada tidak dikonfigurasikan untuk anchor tag atau kosong");teruskan;}
Periksa sama ada URL milik domain utama atau pihak ketiga. Langkau langkah yang selebihnya jika milik domain pihak ketiga.
jika (! url.startsWith (homePage)) {System.out.println ("URL milik domain lain, melewatkannya.");teruskan;}
Langkah 4: Hantar permintaan http
Kelas HttpURLConnection mempunyai kaedah untuk menghantar permintaan HTTP dan menangkap kod respons HTTP. Oleh itu, output kaedah openConnection () (URLConnection) adalah jenis yang dilemparkan ke HttpURLConnection.
huc = (HttpURLConnection) (URL baru (url) .openConnection ());
Kita boleh menetapkan jenis Permintaan sebagai "KEPALA" dan bukannya "DAPATKAN". Sehingga hanya tajuk yang dikembalikan dan bukan badan dokumen.
huc.setRequestMethod ("KEPALA");
Apabila menggunakan kaedah connect (), sambungan sebenar ke url dibuat dan permintaan dihantar.
huc.connect ();
Langkah 5: Mengesahkan Pautan
Dengan menggunakan kaedah getResponseCode () kita boleh mendapatkan kod respons untuk permintaan tersebut
respCode = huc.getResponseCode ();
Berdasarkan kod tindak balas, kami akan cuba memeriksa status pautan.
jika (respCode> = 400) {System.out.println (url + "adalah pautan yang rosak");}lain {System.out.println (url + "adalah pautan yang sah");}
Oleh itu, kita dapat memperoleh semua pautan dari laman web dan mencetak sama ada pautan itu sah atau rosak.
Semoga tutorial ini membantu anda dalam memeriksa Pautan yang rosak menggunakan selenium.
Cara mendapatkan SEMUA Pautan Laman Web
Salah satu prosedur biasa dalam Pengujian web adalah menguji apakah semua pautan yang terdapat di dalam laman berfungsi. Ini dapat dilakukan dengan mudah menggunakan kombinasi Java untuk setiap kaedah loop , findElements () & By.tagName ("a") .
Kaedah findElements (), mengembalikan senarai Elemen Web dengan tag a. Menggunakan gelung untuk setiap, setiap elemen diakses.
Kod WebDriver di bawah memeriksa setiap pautan dari laman utama Mercury Tours untuk menentukan yang berfungsi dan yang masih dalam pembinaan.
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. *;kelas awam P1 {utama kekosongan statik awam (String [] args) {String baseUrl = "http://demo.guru99.com/test/newtours/";System.setProperty ("webdriver.chrome.driver", "G: \\ chromedriver.exe");Pemacu WebDriver = ChromeDriver baru ();String underConsTitle = "Dalam Pembinaan: Mercury Tours";driver.manage (). timeout (). secara implisitWait (5, TimeUnit.SECONDS);driver.get (baseUrl);SenarailinkElements = driver.findElements (By.tagName ("a"));Rentetan [] linkTexts = Rentetan baru [linkElements.size ()];int i = 0;// ekstrak teks pautan setiap elemen pautanuntuk (WebElement e: linkElements) {linkTexts [i] = e.getText ();saya ++;}// uji setiap pautanuntuk (String t: linkTexts) {driver.findElement (By.linkText (t)). klik ();jika (driver.getTitle (). sama dengan (underConsTitle)) {System.out.println ("\" "+ t +" \ ""+ "sedang dalam pembinaan.");} lain {System.out.println ("\" "+ t +" \ ""+ "sedang berfungsi.");}pemandu. navigasi (). belakang ();}driver.quit ();}}
Hasilnya harus serupa dengan yang ditunjukkan di bawah.
Penyelesaian masalah
Dalam kes terpencil, pautan pertama yang diakses oleh kod boleh menjadi Pautan "Rumah". Dalam kes sedemikian, tindakan driver.navigate.back () akan menunjukkan halaman kosong kerana tindakan pertama membuka penyemak imbas. Pemandu tidak dapat mencari semua pautan lain dalam penyemak imbas kosong. Jadi IDE akan membuang pengecualian dan selebihnya kod tidak akan dilaksanakan. Ini dapat ditangani dengan mudah menggunakan gelung If.