본문 바로가기

자동화/Selenium

selenium element locator 실행 시간 비교해보기 (class_name vs xpath)

728x90

selenium 자동화를 구현하면 가장 많이 사용하는게 find_element 일텐데요.

find_element 코드를 사용할 때 ID, class, xpath, link_text, name 등 다양하게 사용할텐데 각각의 속도 차이가 있는지 궁금해졌습니다.

(자동화에서 코드 실행 시간을 줄일 수 있으면 최고!!)

 

 

selenium locator 설명을 보면 xpath를 사용할 때 속도가 느려지는 단점이 있다고 설명이 되어 있는데 실제로 차이가 많이 나는지 확인을 해보고 싶어서 간단하게 테스트를 해보았습니다.

https://www.selenium.dev/documentation/test_practices/encouraged/locators/

 

샘플 URL은 다음 메인홈 (https://daum.net) 을 선택하였고

샘플 시나리오는 아래와 같이 선택하였습니다.

(class명이 있고 최대한 단순하게 링크를 이동하는 방식들로 선정)

 

1. 연예, 부동산 등 각 뉴스 카테고리 이동

2. 검색어 입력 후 검색

3. 회원가입, 로그인 영역 관련 링크 이동 

 

모든 동작으로 링크를 이동한 후에는 driver.back() 코드를 사용하였습니다.

 

동일한 시나리오를 3번 반복해서 실행시간을 콘솔에 출력하는 형태로 작성하였습니다.

실행시간을 측정하기 위해 time().time() 코드를 사용하였습니다.

 

start = time.time()
print("실행시간 :" + str(time.time() - start))

 

class_name과 xpath로만 사용한 코드 실행 시간 결과는 아래와 같습니다.

 

실행시간 class_name xpath
1-1 14.29초 14.43초
1-2 11.34초 11.83초
1-3 11.23초 11.98초
2-1 13.98초 16.10초
2-2 12.16초 11.99초
2-3 10.55초 11.09초
3-1 13.88초 14.72초
3-2 11.00초 11.84초
3-3 11.59초 11.27초

 

class_name 평균시간: 11.11초

xpath 평균시간: 12.80초

 

9번 반복 체크 결과 class_name과 xpath 평균 시간 차이는 약 1초 정도 발생하였습니다.

적은 반복 횟수와 간단한 코드이지만 코드가 길어질수록 차이가 더 많이 발생할 것으로 추측할 수 있었습니다.

 

결국 코드에서 xpath는 해당 코드가 어느 부분인지 확인할 수 없는 단점과 selenium 가이드에서 간결하고 읽기 쉽게 유지하는 걸 권장하고 있기 떄문에 xpath 외 다른 locator를 사용하여 코드를 구현하는걸 추천드립니다.

 

# class_name
driver.find_element(By.CLASS_NAME, 'txt_pctop.link_cafe').click()
driver.back()
driver.find_element(By.CLASS_NAME, 'txt_pctop.link_news').click()
driver.back()
driver.find_element(By.CLASS_NAME, 'txt_pctop.link_stock').click()

# xpath
driver.find_element(By.XPATH, '//*[@id="daumHead"]/div[2]/div/div[1]/ul/li[1]/a').click()
driver.back()
driver.find_element(By.XPATH, '//*[@id="daumHead"]/div[2]/div/div[1]/ul/li[3]/a').click()
driver.back()
driver.find_element(By.XPATH, '//*[@id="daumHead"]/div[2]/div/div[1]/ul/li[5]/a').click()
driver.back()

xpath의 경우 검색 범위가 넓고 어떤 element인지 확인이 어렵다.

728x90