자동화테스트/Selenium2018. 12. 31. 08:00


깨진 링크(Broken Links) 란 무엇입니까?

깨진 링크는 도달 할 수없는 링크 또는 URL입니다. 일부 서버 오류로 인해 작동이 중단되었거나 작동하지 않을 수 있습니다.

URL의 유효성은 항상 2xx로 표시됩니다. 다른 용도로 사용되는 다양한 HTTP 상태 코드가 있습니다. 유효하지 않은 요청의 경우 HTTP 상태는 4xx 및 5xx입니다.

상태 코드의 4xx 클래스는 주로 클라이언트 측 오류에 대한 것이고 상태 코드의 5xx 클래스는 주로 서버 응답 오류에 대한 것입니다.

링크를 클릭하고 확인하기 전에는 링크가 작동하는지 여부를 확인할 수 없습니다.

깨진 링크(Broken Links)를 확인해야하는 이유는 무엇입니까?

사용자가 오류 페이지에 착륙해서는 안되기 때문에 항상 사이트에 깨진 링크가 없는지 확인해야합니다.

룰이 올바르게 갱신되지 않거나 요청 된 자원이 서버에 존재하지 않으면 오류가 발생합니다.

링크를 수동으로 확인하는 작업은 지루한 작업입니다. 각 웹 페이지에 많은 링크가있을 수 있으며 모든 페이지에 대해 수동 프로세스를 반복해야하기 때문입니다.

프로세스를 자동화하는 Selenium을 사용하는 자동화 스크립트는보다 적절한 솔루션입니다.

깨진 링크 및 이미지를 확인하는 방법

끊어진 링크를 확인하려면 다음 단계를 수행해야합니다.

  1. <a> 태그를 기반으로 웹 페이지의 모든 링크를 수집하십시오.
  2. 링크에 대한 HTTP 요청을 보내고 HTTP 응답 코드를 읽습니다.
  3. HTTP 응답 코드를 기반으로 링크가 유효한지 또는 손상되었는지 확인하십시오.
  4. 캡처 된 모든 링크에 대해이를 반복하십시오.

웹 페이지의 깨진 링크 찾기 코드

아래는 유스 케이스를 테스트하는 웹 드라이버 코드입니다.

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

List를 통과하기 위해서 Iterator를 취득합니다.

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

3 단계 : URL 식별 및 확인

이 부분에서는 URL이 타사 도메인에 속하는지 또는 URL이 비어 있는지 여부를 확인합니다.

앵커 태그의 href를 가져 와서 url 변수에 저장하십시오.

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

URL이 null 또는 Empty인지 확인하고 조건이 충족되면 나머지 단계를 건너 뜁니다.

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

URL이 메인 도메인 또는 제 3 자에 속하는지 확인하십시오. 타사 도메인에 속한 경우 나머지 단계는 건너 뜁니다.

 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) (새 URL (url) .openConnection ());

우리는 요청 유형을 "GET"대신 "HEAD"로 설정할 수 있습니다. 따라서 헤더 만 반환되며 문서 본문은 반환되지 않습니다.

huc.setRequestMethod ( "HEAD");

connect () 메소드를 호출하면 url에 대한 실제 연결이 설정되고 요청이 전송됩니다.

huc.connect ();

5 단계 : 링크 유효성 검사

getResponseCode () 메소드를 사용하여 요청에 대한 응답 코드를 얻을 수 있습니다.

respCode = huc.getResponseCode ();

응답 코드에 따라 링크 상태를 확인하려고합니다.

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

따라서 웹 페이지에서 모든 링크를 가져와 링크가 유효한지 또는 부적절한지를 인쇄 할 수 있습니다.

희망이 튜토리얼 셀레늄을 사용하여 깨진 링크를 확인하는 데 도움이되기를 바랍니다.

문제 해결

고립 된 경우 코드에 의해 액세스되는 첫 번째 링크는 "홈"링크 일 수 있습니다. 이 경우 driver.navigate.back () 액션은 첫 번째 액션이 브라우저를 여는 것처럼 빈 페이지를 표시합니다. 드라이버는 빈 브라우저에서 다른 모든 링크를 찾을 수 없습니다. 따라서 IDE는 예외를 던지고 나머지 코드는 실행되지 않습니다. 이것은 If 루프를 사용하여 쉽게 처리 할 수 ​​있습니다.

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
Posted by 프리스케이터