Cách tìm các liên kết hỏng Find All/Broken links sử dụng Selenium WebDriver

Liên kết bị hỏng là gì?

Liên kết bị hỏng là các liên kết hoặc URL không thể truy cập được. Chúng có thể không hoạt động hoặc không hoạt động do một số lỗi codey chủ

URL sẽ luôn có trạng thái với 2xx là hợp lệ. Có các code trạng thái HTTP khác nhau có các mục đích khác nhau. Đối với một yêu cầu không hợp lệ, trạng thái HTTP là 4xx và 5xx.

Loại code trạng thái 4xx chủ yếu dành cho lỗi phía codey khách và loại code trạng thái 5xx chủ yếu dành cho lỗi phản hồi codey chủ.

Rất có thể chúng tôi sẽ không thể xác nhận liệu liên kết đó có hoạt động hay không cho đến khi chúng tôi nhấp vào và xác nhận nó.

Tại sao bạn nên kiểm tra Liên kết bị hỏng?

Bạn phải luôn đảm bảo rằng không có liên kết bị hỏng nào trên trang web vì người dùng không nên truy cập vào một trang lỗi.

Lỗi xảy ra nếu các quy tắc không được cập nhật chính xác hoặc các tài nguyên được yêu cầu không tồn tại trên codey chủ.

Kiểm tra thủ công các liên kết là một công việc tẻ nhạt, bởi vì mỗi trang web có thể có một số lượng lớn các liên kết và quá trình thủ công phải được lặp lại cho tất cả các trang.

Tập lệnh Tự động hóa sử dụng Selenium sẽ tự động hóa quy trình là một giải pháp phù hợp hơn.

Cách kiểm tra các liên kết và hình ảnh bị hỏng

Để kiểm tra các liên kết bị hỏng, bạn sẽ cần thực hiện các bước sau.

  1. Thu thập tất cả các liên kết trong trang web dựa trên thẻ <a>.
  2. Gửi yêu cầu HTTP cho liên kết và đọc code phản hồi HTTP.
  3. Tìm hiểu xem liên kết có hợp lệ hay bị hỏng dựa trên code phản hồi HTTP.
  4. Lặp lại điều này cho tất cả các liên kết được chụp.

Code để tìm các liên kết bị hỏng trên một trang web

Dưới đây là code Driver web kiểm tra trường hợp sử dụng của chúng tôi:

package autocodetionPractice;

import java.io.IOException;

import java.net.HttpURLConnection;

import java.net.codelformedURLException;

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 codein(String[] args) {

        // TODO Auto-generated method stub

        String homePage = “http://www.zlti.com”;

        HttpURLConnection huc = null;

        int respCode = 200;

        driver = new ChromeDriver();

        driver.codenage().window().codeximize();

        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 docodein, skipping it.”);

            }

            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 (codelformedURLException e) {

                // TODO Auto-generated catch block

                e.printStackTrace();

            } catch (IOException e) {

                // TODO Auto-generated catch block

                e.printStackTrace();

            }

        }

        driver.quit();

    }

}

Giải thích code

Bước 1: Import package

Import package bên dưới cùng với các package mặc định:

import java.net.HttpURLConnection;

Sử dụng các phương pháp trong package này, chúng tôi có thể gửi các yêu cầu HTTP và nắm bắt các code phản hồi HTTP từ phản hồi.

Bước 2: Thu thập tất cả các liên kết trong trang web

Xác định tất cả các liên kết trong một trang web và lưu trữ chúng trong Danh sách.

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

Có được Iterator để xem qua Danh sách.

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

Bước 3: Xác định và xác thực URL

Trong phần này, chúng tôi sẽ kiểm tra xem URL có thuộc miền của bên thứ ba hay không hoặc URL có trống / null hay không.

Nhận href của thẻ liên kết và lưu trữ nó trong biến url.

url = it.next (). getAttribute (“href”);

Kiểm tra xem URL là null hay Empty và bỏ qua các bước còn lại nếu điều kiện được thỏa coden.

if(url == null || url.isEmpty()){

              System.out.println(“URL is either not configured for anchor tag or it is empty”);

              continue;

     }

Kiểm tra xem URL thuộc về miền chính hay bên thứ ba. Bỏ qua các bước còn lại nếu nó thuộc về miền của bên thứ ba.

if(!url.startsWith(homePage)){

           System.out.println(“URL belongs to another domain, skipping it.”);

           continue;

   }

   }

Bước 4: Gửi yêu cầu http

Lớp HttpURLConnection có các phương thức để gửi yêu cầu HTTP và nắm bắt code phản hồi HTTP. Vì vậy, đầu ra của phương thức openConnection () (URLConnection) được nhập vào HttpURLConnection.

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

Chúng ta có thể đặt loại Yêu cầu là “HEAD” thay vì “GET”. Vì vậy, chỉ các tiêu đề được trả về chứ không phải nội dung tài liệu.

huc.setRequestMethod (“HEAD”);

Khi package phương thức connect (), kết nối thực tế tới url được thiết lập và yêu cầu được gửi đi.

huc.connect ();

Bước 5: Xác thực các liên kết

Sử dụng phương thức getResponseCode (), chúng ta có thể nhận được code phản hồi cho yêu cầu

respCode = huc.getResponseCode ();

Dựa trên code phản hồi, chúng tôi sẽ cố gắng kiểm tra trạng thái liên kết.

if(respCode >= 400){

        System.out.println(url+” is a broken link”);

}

else{

        System.out.println(url+” is a valid link”);

}

Do đó, chúng tôi có thể lấy tất cả các liên kết từ trang web và in xem các liên kết có hợp lệ hay bị hỏng hay không.

Hy vọng hướng dẫn này sẽ giúp bạn trong việc kiểm tra Liên kết bị hỏng bằng cách sử dụng selen.

Cách lấy TẤT CẢ các liên kết của một trang web

Một trong những quy trình phổ biến trong Kiểm tra web là kiểm tra xem tất cả các liên kết có trong trang có hoạt động hay không. Điều này có thể được thực hiện một cách thuận tiện bằng cách sử dụng kết hợp phương thức Java for-each loop , findElements () & By.tagName (“a”) .

Phương thức findElements (), trả về danh sách các Phần tử Web với thẻ a. Sử dụng vòng lặp for-each, mỗi phần tử được truy cập.

code WebDriver bên dưới kiểm tra từng liên kết từ trang chủ Mercury Tours để xác định những liên kết đang hoạt động và những liên kết vẫn đang được xây dựng.

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

    }

}

Đầu ra phải tương tự như được chỉ ra bên dưới.

Việc truy cập các liên kết hình ảnh được thực hiện bằng các phương thức By.cssSelector () và By.xpath ().

Xử lý sự cố

Trong trường hợp cá biệt, liên kết đầu tiên được code truy cập có thể là Liên kết “Trang chủ”. Trong trường hợp đó, hành động driver.navigate.back () sẽ hiển thị một trang trống khi hành động đầu tiên đang mở trình duyệt. Driver sẽ không thể tìm thấy tất cả các liên kết khác trong một trình duyệt trống. Vì vậy, IDE sẽ ném một ngoại lệ và phần còn lại của code sẽ không thực thi. Điều này có thể được xử lý dễ dàng bằng cách sử dụng vòng lặp If.

Back to top button