티스토리 뷰

728x90
반응형

저번 포스팅에서는 파이썬과 셀레니움을 이용하여 웹 테스트 자동화를 구축하는 방법에 대해 알아보았습니다.이전 포스팅 내용이 궁금하시다면 아래 링크 참조 바랍니다.

 

Python, Selenium 기반 웹 자동화 테스트 구현하기

웹 사이트에서 정보를 추출하는 크롤링 또는 테스트 자동화를 구현할 때 셀레니움 (Selenium) 라이브러리를 많이 사용합니다. 이번 포스팅에서는파이썬 개발환경 구축과 셀레니움으로 웹 테스트

it-techtree.tistory.com

셀레니움을 이용하여 웹 테스트 자동화를 많이 구현하지만, 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 컨텍스트로 이동할 수 있습니다.

728x90
반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
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 31
글 보관함