Cách tìm tất cả / liên kết bị hỏng bằng Selenium Webdriver

Mục lục:

Anonim

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 máy chủ

URL sẽ luôn có trạng thái với 2xx là hợp lệ. Có các mã 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 mã trạng thái 4xx chủ yếu dành cho lỗi phía máy khách và loại mã trạng thái 5xx chủ yếu dành cho lỗi phản hồi máy 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 tại máy 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à quy 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ẻ .
  2. Gửi yêu cầu HTTP cho liên kết và đọc mã 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 mã 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.

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

Dưới đây là mã trình điều khiển web kiểm tra trường hợp sử dụng của chúng tôi:

gói tự động hóanhập java.io.IOException;nhập java.net.HttpURLConnection;nhập java.net.MalformedURLException;nhập java.net.URL;nhập java.util.Iterator;nhập java.util.List;nhập org.openqa.selenium.By;nhập org.openqa.selenium.WebDriver;nhập org.openqa.selenium.WebElement;nhập org.openqa.selenium.chrome.ChromeDriver;lớp công khai BrokenLinks {trình điều khiển WebDriver tĩnh riêng = null;public static void main (String [] args) {// VIỆC CẦN LÀM Sơ khai phương thức được tạo tự độngString homePage = "http://www.zlti.com";Chuỗi url = "";HttpURLConnection huc = null;int respCode = 200;driver = new ChromeDriver ();driver.manage (). window (). Maxim ();driver.get (trang chủ);List  links = driver.findElements (By.tagName ("a"));Iterator  it = links.iterator ();while (it.hasNext ()) {url = it.next (). getAttribute ("href");System.out.println (url);if (url == null || url.isEmpty ()) {System.out.println ("URL không được định cấu hình cho thẻ liên kết hoặc nó trống");tiếp tục;}if (! url.startsWith (homePage)) {System.out.println ("URL thuộc về một miền khác, bỏ qua nó.");tiếp tục;}thử {huc = (HttpURLConnection) (URL mới (url) .openConnection ());huc.setRequestMethod ("HEAD");huc.connect ();respCode = huc.getResponseCode ();if (Mã phản ứng> = 400) {System.out.println (url + "là một liên kết bị hỏng");}khác {System.out.println (url + "là một liên kết hợp lệ");}} catch (MalformedURLException e) {// VIỆC CẦN LÀM Khối bắt được tạo tự độnge.printStackTrace ();} catch (IOException e) {// VIỆC CẦN LÀM Khối bắt được tạo tự độnge.printStackTrace ();}}driver.quit ();}}

Giải thích mã Ví dụ

Bước 1: Nhập gói

Nhập gói bên dưới cùng với các gói mặc định:

nhập java.net.HttpURLConnection;

Sử dụng các phương pháp trong gói này, chúng tôi có thể gửi các yêu cầu HTTP và nắm bắt mã 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  links = driver.findElements (By.tagName ("a"));

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

Iterator  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 tên 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 mãn.

if (url == null || url.isEmpty ()) {System.out.println ("URL không được định cấu hình cho thẻ liên kết hoặc nó trống");tiếp tục;}

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 thuộc về một miền khác, bỏ qua nó.");tiếp tục;}

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 mã 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) (URL mới (url) .openConnection ());

Chúng tôi 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 gọi 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 mã phản hồi cho yêu cầu

respCode = huc.getResponseCode ();

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

if (Mã phản ứng> = 400) {System.out.println (url + "là một liên kết bị hỏng");}khác {System.out.println (url + "là một liên kết hợp lệ");}

Vì vậy, 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.

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.

Mã 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.

nhập org.openqa.selenium.By;nhập org.openqa.selenium.WebDriver;nhập org.openqa.selenium.chrome.ChromeDriver;nhập java.util.List;nhập java.util.concurrent.TimeUnit;nhập org.openqa.selenium. *;lớp công cộng P1 {public static void main (String [] args) {String baseUrl = "http://demo.guru99.com/test/newtours/";System.setProperty ("webdriver.chrome.driver", "G: \\ chromedriver.exe");Trình điều khiển WebDriver = mới ChromeDriver ();String underConsTitle = "Đang xây dựng: Mercury Tours";driver.manage (). timeouts (). implicitWait (5, TimeUnit.SECONDS);driver.get (baseUrl);Danh sách  linkElements = driver.findElements (By.tagName ("a"));String [] linkTexts = new String [linkElements.size ()];int i = 0;// trích xuất các văn bản liên kết của từng phần tử liên kếtcho (WebElement e: linkElements) {linkTexts [i] = e.getText ();i ++;}// kiểm tra từng liên kếtfor (Chuỗi t: linkTexts) {driver.findElement (By.linkText (t)). click ();if (driver.getTitle (). bằng (underConsTitle)) {System.out.println ("\" "+ t +" \ ""+ "đang được xây dựng.");} khác {System.out.println ("\" "+ t +" \ ""+ "đang hoạt động.");}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 mã 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. Trình điều khiển 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 mã 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.