티스토리 뷰
저번 포스팅에서는 파이썬과 셀레니움을 이용하여 웹 테스트 자동화를 구축하는 방법에 대해 알아보았습니다.이전 포스팅 내용이 궁금하시다면 아래 링크 참조 바랍니다.
셀레니움을 이용하여 웹 테스트 자동화를 많이 구현하지만, iframe 내부에 있는 html 태그를 찾지 못하는 상황이 발생하여 테스트 자동화를 구현하는데 많은 어려움을 겪을 거라 생각합니다. 이번 포스팅에서는 셀레니움에서 iframe내부의 태그를 찾지 못하는 원인과 그리고 이를 해결하는 방법에 대해 알아보겠습니다.
iframe에서 태그를 찾지 못하는 이유
iframe이란 html 태그 내부에 또 다른 html을 삽입할 수 있는 태그입니다. iframe내부에 html 태그가 그대로 저장되어 있다면, 태그를 찾는데 문제가 없겠지만, iframe 내부의 html를 URL로부터 가져오지 못하였는데 셀레니움에서 iframe 내부의 태그를 찾도록 시도한다면, 셀레니움은 iframe의 내부 태그를 찾지 못합니다.
해당 페이지가 동적으로 html을 로딩하는지 확인하려면, 브라우저에서 개발자 도구를 활성화하여 iframe의 태그를 보면, 아래와 같이 iframe에 src가 지정되어 있다면, 동적 페이지로 구성되었다는 것을 알 수 있습니다.
셀레니움에서 iframe내부의 태그 찾는 방법
해결방법은 iframe 내부의 html 태그를 전부 로딩될 떄 까지 기다린 후 태그 찾기를 시도하는 것입니다. try 구분을 이용하여 iframe 내부 태그 찾기를 시도한 후, 2초 sleep후 다시 재시도하는 방법을 사용하면 iframe이 전부 로딩 될 때 까지 기다리게 되고, 태그가 발견되면 자동화를 계속 진행할 수 있습니다.
isLoad = False
for i in range(1, 5):
try:
document = driver.find_elements_by_tag_name('iframe')[0]
driver.switch_to.frame(document)
name = driver.find_element_by_xpath('/html/body/h3').text
if name == 'XXX화면':
isLoad = True
break
except:
print('XXX화면이 로딩되지 않았습니다. 2초 뒤에 재시도 합니다...')
driver.switch_to.default_content()
sleep(2)
pass
if not isLoad:
print('XXX화면을 찾지 못하였습니다')
return
html 상위 태그에서 하위 iframe 태그로 진입할 떄는 driver.switch_to.frame() 함수를 사용하여 DOM의 컨텍스트를 변경해주어야 합니다. iframe 내부에서 다시 상위 html태그로 이동할 경우 driver.swtich_to.default_content()함수로 부모 DOM 컨텍스트로 이동할 수 있습니다.
'IT 기술' 카테고리의 다른 글
[AWS] API Gateway 캐싱 원리 및 사용 방법 (0) | 2023.03.04 |
---|---|
Python, Selenium 기반 웹 자동화 테스트 구현하기 (0) | 2023.02.20 |
[Node.js] Promise.all을 활용한 비동기 코드 작성법 (0) | 2022.09.16 |
[Node.js] Promise, Await, Async로 동기, 비동기 작성하기 (0) | 2022.09.16 |
디자인 패턴 - 책임 연쇄(Chain of Responsibility) (0) | 2022.09.16 |
- Total
- Today
- Yesterday
- notion 업무일정관리
- TCP/UDP
- springboot rest api 서버
- codesmell 유형
- springboot 실행
- C++
- 코드스멜 유형
- 멀티코어 멀티프로세서
- 클린코드작성원칙
- token
- API Gateway 캐싱
- 디자인패턴
- MPA
- 스프링부트 restapi
- AWS
- iframe 태그 찾기
- selenium
- 디자인패턴 구조패턴
- 테스팅 자동화
- 스프링부트실행
- springboot build
- oracle 메모리
- SPA
- 클린코드작성법
- springboot restapi
- oracle pga sga
- notion
- 스프링부트빌드
- python
- OSI 7계층
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |