깨진 링크(Broken Links) 란 무엇입니까?
깨진 링크는 도달 할 수없는 링크 또는 URL입니다. 일부 서버 오류로 인해 작동이 중단되었거나 작동하지 않을 수 있습니다.
URL의 유효성은 항상 2xx로 표시됩니다. 다른 용도로 사용되는 다양한 HTTP 상태 코드가 있습니다. 유효하지 않은 요청의 경우 HTTP 상태는 4xx 및 5xx입니다.
상태 코드의 4xx 클래스는 주로 클라이언트 측 오류에 대한 것이고 상태 코드의 5xx 클래스는 주로 서버 응답 오류에 대한 것입니다.
링크를 클릭하고 확인하기 전에는 링크가 작동하는지 여부를 확인할 수 없습니다.
깨진 링크(Broken Links)를 확인해야하는 이유는 무엇입니까?
사용자가 오류 페이지에 착륙해서는 안되기 때문에 항상 사이트에 깨진 링크가 없는지 확인해야합니다.
룰이 올바르게 갱신되지 않거나 요청 된 자원이 서버에 존재하지 않으면 오류가 발생합니다.
링크를 수동으로 확인하는 작업은 지루한 작업입니다. 각 웹 페이지에 많은 링크가있을 수 있으며 모든 페이지에 대해 수동 프로세스를 반복해야하기 때문입니다.
프로세스를 자동화하는 Selenium을 사용하는 자동화 스크립트는보다 적절한 솔루션입니다.
깨진 링크 및 이미지를 확인하는 방법
끊어진 링크를 확인하려면 다음 단계를 수행해야합니다.
- <a> 태그를 기반으로 웹 페이지의 모든 링크를 수집하십시오.
- 링크에 대한 HTTP 요청을 보내고 HTTP 응답 코드를 읽습니다.
- HTTP 응답 코드를 기반으로 링크가 유효한지 또는 손상되었는지 확인하십시오.
- 캡처 된 모든 링크에 대해이를 반복하십시오.
웹 페이지의 깨진 링크 찾기 코드
아래는 유스 케이스를 테스트하는 웹 드라이버 코드입니다.
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 루프를 사용하여 쉽게 처리 할 수 있습니다.
'자동화테스트 > Selenium' 카테고리의 다른 글
Apache Ant with Selenium : 전체 자습서 (0) | 2019.01.02 |
---|---|
Selenium Core Extensions (사용자 확장 프로그램 js) (0) | 2019.01.01 |
Selenium을 이용한 플래시 테스팅 (0) | 2018.12.30 |
Selenium WebDriver를 사용하여 툴팁 확인 (0) | 2018.12.29 |
TestNG 그룹 소개 (0) | 2018.12.28 |