टूटे हुए लिंक कैसे खोजें? Selenium

टूटी कड़ियाँ क्या हैं?

टूटे हुए लिंक ऐसे लिंक या URL होते हैं जिन तक पहुंचा नहीं जा सकता। वे सर्वर में किसी त्रुटि के कारण काम नहीं कर रहे हैं या काम नहीं कर रहे हैं

एक URL में हमेशा 2xx वाली स्थिति होगी जो वैध है। अलग-अलग HTTP स्थिति कोड हैं जिनके अलग-अलग उद्देश्य हैं। अमान्य अनुरोध के लिए, HTTP स्थिति 4xx और 5xx है।

स्थिति कोड का 4xx वर्ग मुख्य रूप से क्लाइंट साइड त्रुटि के लिए है, और स्थिति कोड का 5xx वर्ग मुख्य रूप से सर्वर प्रतिक्रिया त्रुटि के लिए है।

जब तक हम उस पर क्लिक करके पुष्टि नहीं कर लेते, हम संभवतः यह पुष्टि नहीं कर पाएंगे कि वह लिंक काम कर रहा है या नहीं।

आपको टूटे हुए लिंक की जांच क्यों करनी चाहिए?

आपको हमेशा यह सुनिश्चित करना चाहिए कि साइट पर कोई भी लिंक टूटा हुआ न हो, क्योंकि उपयोगकर्ता को किसी त्रुटि वाले पृष्ठ पर नहीं जाना चाहिए।

यह त्रुटि तब होती है जब नियम सही ढंग से अद्यतन नहीं किए जाते हैं, या अनुरोधित संसाधन सर्वर पर मौजूद नहीं होते हैं।

लिंकों की मैन्युअल जांच एक कठिन कार्य है, क्योंकि प्रत्येक वेबपेज में बड़ी संख्या में लिंक हो सकते हैं और सभी पृष्ठों के लिए मैन्युअल प्रक्रिया को दोहराना पड़ता है।

एक स्वचालन स्क्रिप्ट का उपयोग कर Selenium जो प्रक्रिया को स्वचालित करेगा वह अधिक उपयुक्त समाधान है।

टूटे हुए लिंक और छवियों की जांच कैसे करें? Selenium

टूटे हुए लिंक की जांच के लिए आपको निम्नलिखित चरण करने होंगे।

  1. टैग के आधार पर वेब पेज में सभी लिंक एकत्रित करें।
  2. लिंक के लिए HTTP अनुरोध भेजें और HTTP प्रतिक्रिया कोड पढ़ें.
  3. HTTP प्रतिक्रिया कोड के आधार पर पता लगाएं कि लिंक वैध है या टूटा हुआ है।
  4. सभी कैप्चर किए गए लिंक के लिए इसे दोहराएं।

Code किसी वेबपेज पर टूटे हुए लिंक ढूंढना

नीचे वेब ड्राइवर कोड दिया गया है जो हमारे उपयोग मामले का परीक्षण करता है:

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

    }
}

टूटे हुए लिंक के कोड की व्याख्या

चरण 1: पैकेज आयात करें

डिफ़ॉल्ट पैकेज के अतिरिक्त नीचे दिए गए पैकेज को आयात करें:

import java.net.HttpURLConnection;

इस पैकेज में विधियों का उपयोग करके, हम HTTP अनुरोध भेज सकते हैं और प्रतिक्रिया से HTTP प्रतिक्रिया कोड प्राप्त कर सकते हैं।

चरण 2: वेब पेज में सभी लिंक एकत्रित करें

वेबपेज में सभी लिंक की पहचान करें और उन्हें सूची में संग्रहीत करें।

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

सूची में से गुजरने के लिए इटरेटर प्राप्त करें।

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

चरण 3: URL की पहचान करना और उसे मान्य करना

इस भाग में, हम जाँच करेंगे कि URL किसी तृतीय पक्ष डोमेन से संबंधित है या URL रिक्त/शून्य है।

एंकर टैग का href प्राप्त करें और इसे url वेरिएबल में संग्रहीत करें।

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

जाँच करें कि URL शून्य या रिक्त है या नहीं और यदि शर्त पूरी हो तो शेष चरणों को छोड़ दें।

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

जाँचें कि URL मुख्य डोमेन या तीसरे पक्ष से संबंधित है या नहीं। यदि यह तीसरे पक्ष के डोमेन से संबंधित है तो शेष चरणों को छोड़ दें।

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

चरण 4: http अनुरोध भेजें

HttpURLConnection क्लास में HTTP अनुरोध भेजने और HTTP प्रतिक्रिया कोड कैप्चर करने के तरीके हैं। इसलिए, openConnection() विधि (URLConnection) का आउटपुट HttpURLConnection में टाइप कास्ट किया जाता है।

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

हम अनुरोध प्रकार को “GET” के बजाय “HEAD” के रूप में सेट कर सकते हैं। ताकि केवल हेडर ही लौटाए जाएँ और दस्तावेज़ बॉडी नहीं।

huc.setRequestMethod("HEAD");

connect() विधि को लागू करने पर, url से वास्तविक कनेक्शन स्थापित हो जाता है और अनुरोध भेजा जाता है।

huc.connect();

चरण 5: लिंक मान्य करना

getResponse का उपयोग करनाCode() विधि का उपयोग करके हम अनुरोध के लिए प्रतिक्रिया कोड प्राप्त कर सकते हैं।

respCode = huc.getResponseCode();

प्रतिक्रिया कोड के आधार पर हम लिंक स्थिति की जांच करने का प्रयास करेंगे।

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

इस प्रकार, हम वेब पेज से सभी लिंक प्राप्त कर सकते हैं और प्रिंट कर सकते हैं कि लिंक वैध हैं या टूटे हुए हैं।

आशा है कि यह ट्यूटोरियल आपको सेलेनियम का उपयोग करके टूटे हुए लिंक की जांच करने में मदद करेगा।

किसी वेब पेज के सभी लिंक कैसे प्राप्त करें

वेब में सामान्य प्रक्रियाओं में से एक परीक्षण इसका उद्देश्य यह जांचना है कि क्या पेज पर मौजूद सभी लिंक काम कर रहे हैं। यह आसानी से निम्नलिखित के संयोजन का उपयोग करके किया जा सकता है Java प्रत्येक लूप के लिए, तत्व खोजें() & By.tagName(“a”) विधि.

findElements() विधि, टैग a के साथ वेब तत्वों की एक सूची लौटाती है। for-each लूप का उपयोग करके, प्रत्येक तत्व तक पहुँचा जाता है।

किसी वेब पेज के सभी लिंक प्राप्त करें

नीचे दिया गया WebDriver कोड प्रत्येक लिंक की जाँच करता है Mercury टूर्स के होमपेज पर जाकर यह पता लगाया जा सकता है कि कौन से प्रोजेक्ट काम कर रहे हैं और कौन से अभी निर्माणाधीन हैं।

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

आउटपुट नीचे दर्शाए गए आउटपुट के समान होना चाहिए।

  • छवि लिंक तक पहुंच By.cssSelector() और By.xpath() विधियों का उपयोग करके की जाती है।

किसी वेब पेज के सभी लिंक प्राप्त करें

समस्या निवारण

एक अलग मामले में, कोड द्वारा एक्सेस किया गया पहला लिंक "होम" लिंक हो सकता है। ऐसे मामले में, driver.navigate.back() क्रिया एक खाली पृष्ठ दिखाएगी क्योंकि पहली क्रिया ब्राउज़र खोल रही है। ड्राइवर खाली ब्राउज़र में अन्य सभी लिंक नहीं ढूँढ पाएगा। इसलिए IDE एक अपवाद फेंक देगा और बाकी कोड निष्पादित नहीं होगा। इसे If लूप का उपयोग करके आसानी से संभाला जा सकता है।

इस पोस्ट को संक्षेप में इस प्रकार लिखें: