Appium 테스트 하기 (3) - 확장성있는 기능을 만들자

garaming·2023년 12월 29일
0

automation

목록 보기
6/6
post-thumbnail

빡센 하드코딩의 흔적.........


때는 2023년 12월.. 여러 항목을 탭하는 테스트 코드를 작성하던 나..

appium에서 제공해주는 클릭 메소드는 id 하나하나에 접근해 실행시킨다.

하지만 이젠 하드코딩은 그만하고 싶어.. 아이디를 찾는 것 까진 오케이 > 근데 비슷한 아이디의 형태가 주어진다면 혹은 아이디에 공통적인 규칙이 있다면 해당 아이디를 모두 조회해서 리스트로 뽑을 순 없을 까?🤔


그래서 찾은게 iOS Predicate

predicate란 fetch 혹은 메모리 내에서 어떤 값을 가져올때 메모리의 filter에 대한 제약 조건

appium에서도 IOS_PREDICATE 라는 메소드로 해당 기능 제공한다. 즉 어떤 값을 가져올 때 조건을 걸 수 있다는 얘기!

[참고] 애플 공식문서

iOS Predicate 활용 예시

나의 경우 데이터에 따라 계속해서 id나 name값이 변하는 element가 있었다. 이를 partical하게 조회하기 위한 방법을 찾던 중 iOS Predicate를 알게되었다.

ex) 예를 들어 내가 찾고자 하는 항목의 id값이 데이터의 개수에 따라서 변한다면

  • len(data) = 5
  • element ID: 'element_id_5'
  • len(data) = 3
  • element ID: 'element_id_3'

해당 id의 공통 부분은 element_id 이며 이를 통해 유니크한 id값 하나가 아닐지라도 iOS Predicate를 이용해 해당 항목에 접근할 수 있다.

#  iOS Predicate 사용
element = driver.find_element(by=AppiumBy.IOS_PREDICATE, value="name CONTAINS 'element_id_'")

반복되는 코드 iOS Predicate를 사용해 모듈화 시키기

해당 메소드 기능을 활용해 반복되는 부분을 리팩토링하자!


	# 해당 글자가 포함되는 아이디 리스트를 elements_list 변수에 저장
    elements_list = driver.find_elements(by=MobileBy.IOS_PREDICATE, value="name CONTAINS 'element_id_'")
    
    # for문으로 해당 리스트의 항목들 클릭
   	for i in range(len(elements_list)):
    	elements[i].click()
        
profile
Connecting the dots

0개의 댓글