셀레니움 화면에 찾는게 있는지 없는지 체크하는 법 (how to check element is present or not in selenium)

2022. 9. 6. 21:50QA

728x90
반응형

 

 

여러가지 찾는 방법이 있겠지만 대표적으로는 아마 두 가지 방식으로 처리를 할 것입니다.

첫 번째 방법으로는 try catch 를 이용하여 selenium exceptions 중에서

NoSuchElementException 을 통해서 처리하는 방법이 있을 것 입니다.

try:
    driver.implicitly_wait(3)
    # 다음 버튼 클릭
    nextBtn =  driver.find_element(By.XPATH, android_script.TUTORIAL_POPUP)
    nextBtn.click()
except NoSuchElementException:
    pass
    # 무언가 처리 하겠죠?

하지만 위의 방법을 사용하게되면 저의 경험으로는 Timeout이 발생하기 까지

대기를 하게 될 것이고 대기를 하는 동안 만큼의 시간 Lose가 있을 것입니다.

(물론 driver setting 시 capability 를 설정할 때 Timeout을 조정하면 되긴합니다)

그래서 저 같은 경우에는 많이 사용하지는 않는 편입니다.

하지만 상황에 따라 어떤 것을 선택하는 것에 대해서는 각자 선택하는 영역이기 때문에 방법만 공유를 합니다.

https://www.selenium.dev/documentation/webdriver/elements/information/#is-displayed

두 번째 방법으로는 is_displayed() 라는 것을 활용하여 처리 합니다.

def isBottomSheetExist(self):
    driver = self.driver
    Logger("Bottom 시트가 있는지 Check ")
    blChk = driver.find_element(By.ID,'marketing_image').is_displayed()
    if blChk:
        Logger("BottomSheet 존재!")
        return True
    else:
        Logger("BottomSheet 없음!")
        return False

위에는 아주 간단하게 처리를 하는 방식을 예시로 들었습니다.

is_displayed() 라는 메서드는 연결된 Element가 현재 화면에 표시여부에 따라

bool 형식으로 값을 반환합니다.

 

 

저 같은 경우에는 Appium 에서도 동일하게 사용하고 있고,

Selenium에서 똑같은 방식으로 이 두 번째 방식을 선호하여 사용하고 있습니다.

주로 모바일 화면에서나 요즘 웹사이트의 경우 언제 뜨게 될지 모르는 팝업이나

이벤트 화면이 발생했을 때 이런 것을 처리를 해주어야 오류가 없이

자동화를 할 수 있을 것 입니다.

그래서 안전하게 처리를 하고자 할 때 저는 이 방식을 선호하여 진행하고 있습니다

def isShown(self, xP):
    # 어떠한 Element 들이 다 보여진 상태를 체크하는 함수
    if self.driver.find_element(By.XPATH, xP).is_displayed():
        return True
    else:
        return False

위와 같이 값을 넣고 유연하게 사용할 수 있도록 함수를 만들어서 사용해도 되겠죠?

 

 

 

 

728x90
반응형