2022. 9. 6. 21:50ㆍQA
여러가지 찾는 방법이 있겠지만 대표적으로는 아마 두 가지 방식으로 처리를 할 것입니다.
첫 번째 방법으로는 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
위와 같이 값을 넣고 유연하게 사용할 수 있도록 함수를 만들어서 사용해도 되겠죠?
'QA' 카테고리의 다른 글
[QA] NotionAPI to SlackAPI 긁어서 파이썬으로 슬랙 주기적으로 보내기 with PythonAnywhere (0) | 2023.06.29 |
---|---|
Appium 이미지 인식 후 버튼 클릭 python (pyautoGUI) (0) | 2022.10.06 |
(QA) AWS Device Farm Python을 이용하여 Appium 원격 자동화 (0) | 2022.09.20 |
[MacOS] Appium 기본 환경설정 (0) | 2022.09.13 |
C# 원하는 비율대로 특정 문자를 배치하기 (0) | 2021.10.21 |