안 드 로 이 드 자동화 테스트 각종 탄창 처리 방법
팝 업 창의 종류:
앱 을 설치 할 때 시스템 팝 업 창 과 같은 팝 업 창 은 보통 두 가지 가 있 습 니 다.하 나 는 자동화 테스트 상자 초기 화 자체 에 도 앱 을 설치 해 야 합 니 다.예 를 들 어 uiautomator 2 는 atx-agent,com.github.uiautomator 를 설치 합 니 다.이런 팝 업 창 은 환경 을 초기 화 할 때 수 동 으로 눌 러 서 케이스 에 관심 을 가 질 필요 가 없습니다.다른 하 나 는 테스트 된 app 을 설치 하 는 것 입 니 다.아래 와 같은 것 입 니 다.
모두 우리 가 처리 해 야 하 는 것 이다.그렇지 않 으 면 자동화 가 자동 으로 되 지 않 는 다.앱 시작 시 사용 가능 한 팝 업 창
이런 종류의 팝 업 창 은 앱 이 시작 할 때 기본 적 인 권한 을 신청 하 는 것 이다.
앱 내 업무 창
창 처리
본 고 는 uiautomator 2 라 는 자동화 프레임 워 크 를 사용 하여 watcher 대상 을 제공 하고 모니터링 할 요 소 를 설정 할 수 있 습 니 다.여기 서 우리 가 모니터링 할 것 은 바로 페이지 의 팝 업 창 입 니 다.다음은 구체 적 으로 어떻게 하 는 지 보 겠 습 니 다.
watcher 사용
# ,
d.watcher.when(" ").click()
# ANR , ANR Force Close , Force Close
d.watcher("ANR").when(xpath="ANR").when("Force Close").click()
#
d.watcher.when(" ").press("back")
d.watcher.when("//*[@text = 'Out of memory']").call(lambda d: d.shell('am force-stop com.im.qq'))
#
def click_callback(d: u2.Device):
d.xpath(" ").click() # watcher
d.xpath(" ").click() # d.xpath , watcher( 5
# ANR
d.watcher.remove("ANR")
#
d.watcher.remove()
#
d.watcher.start()
d.watcher.start(2.0) # 2.0s
#
d.watcher.run()
#
d.watcher.stop()
# ,
d.watcher.reset()
위 는 watcher 에서 자주 사용 하 는 api 와 해석 으로 github 에서 기원 합 니 다.히히,게 으 르 게 썼어.실전 사례
다음은 B 역 apk 를 예 로 들 어 설치 부터 로그 인 까지 일련의 팝 업 창 을 처리 합 니 다.
import uiautomator2 as u2
import os
import time
base_dir = os.path.dirname(__file__)
apk_path = os.path.join(base_dir, 'apks/bilibili.apk')
d = u2.connect_usb(serial='MDX0220924018819')
# , , ,
d.watcher.when(' ').click()
d.watcher.when(' ').click()
d.watcher.when(' ').click()
d.watcher.when(" ").click()
d.watcher.start()
d.app_install(apk_path)
d.app_start('tv.danmaku.bili')
d(text=' ').click()
time.sleep(3)
if d(resourceId="tv.danmaku.bili:id/btn_change_account").exists:
d(resourceId="tv.danmaku.bili:id/btn_change_account").click()
else:
d(resourceId="tv.danmaku.bili:id/tv_login").click()
time.sleep(3)
d(resourceId="tv.danmaku.bili:id/username").set_text('xxxxxxxxx')
d(resourceId="tv.danmaku.bili:id/userpwd").set_text('xxxxxxxx')
d(resourceId="tv.danmaku.bili:id/log_reg_checkbox").click()
time.sleep(2)
d(resourceId="tv.danmaku.bili:id/btn_login").click()
d(text=' ').click()
팝 업 창 처리 의 핵심 사상 은 스 레 드 를 만 들 고 끊 임 없 는 감청 페이지 에 팝 업 창 이 있 는 지 없 는 지 나타 나 면 클릭 하거나 취소 나 클릭 확인 등 을 클릭 하 는 것 이다.uiautomator 2 탄창 처리 의 핵심 사상
배경 에서 스 레 드 를 실행 하 는 방법(threading 라 이브 러 리 에 의존)을 사용 한 다음 에 일정 시간 마다 Dump 에서 hierarchy 를 실행 하고 요소 와 일치 한 후에 해당 하 는 작업 을 수행 합 니 다.
class Watcher():
def __init__(self, d: "uiautomator2.Device"):
self._d = d
self._watchers = []
self._watch_stop_event = threading.Event()
self._watch_stopped = threading.Event()
self._watching = False # func start is calling
self._triggering = False
self.logger = setup_logger()
self.logger.setLevel(logging.INFO)
def when(self, xpath=None):
return XPathWatcher(self, xpath)
Watcher 개체 self.watchers 속성 은 감시 할 모든 요 소 를 유지 합 니 다.d.watcher.when('계속 설치')은 when 방법 을 호출 한 후에 XPath Watcher 대상 을 되 돌려 주 고 이 대상 의 click 방법 을 호출 하여 감시 요소 에 대한 조작 을 실현 합 니 다.
class XPathWatcher():
def __init__(self, parent: Watcher, xpath: str, name: str = ''):
self._name = name
self._parent = parent
self._xpath_list = [xpath] if xpath else []
def when(self, xpath=None):
self._xpath_list.append(xpath)
return self
def call(self, func):
"""
func accept argument, key(d, el)
d=self._d, el=element
"""
self._parent._watchers.append({
"name": self._name,
"xpaths": self._xpath_list,
"callback": func,
})
def click(self):
def _inner_click(selector):
selector.get_last_match().click()
self.call(_inner_click)
click 방법 은 클릭 한 조작 을 리 셋 함수 에 넣 고 XPath Watcher 대상 의 call 방법 을 호출 하 는 것 입 니 다.이 방법 은 모니터링 규칙 을 생 성하 고 앞에서 언급 한 Watcher 대상 의 self. 에 모니터링 규칙 을 넣 습 니 다.watchers 속성.
def start(self, interval: float = 2.0):
""" stop watcher """
if self._watching:
self.logger.warning("already started")
return
self._watching = True
th = threading.Thread(name="watcher",
target=self._watch_forever,
args=(interval, ))
th.daemon = True
th.start()
return th
그 다음 에 Watcher 대상 의 start 방법 을 호출 하여 스 레 드 를 열 고 지 정 된 간격 에 따라 페이지 dump 정 보 를 통 해 모니터링 할 요소 가 있 는 지 확인 하고 찾 은 후에 리 셋 함 수 를 호출 합 니 다.이상 은 우리 가 탄창 처리 에 관 한 조작 이 었 습 니 다.그러나 위 에서 실전 에서 어디 에 문제 가 있 는 지 발견 하지 못 했 습 니 다.매번 새로운 탄창 이 있 을 때마다 여기에 코드 를 한 줄 써 야 합 니까?그리고 서로 다른 기종 에 맞 출 수 있 습 니까?
안 드 로 이 드 자동화 테스트 에서 각종 팝 업 창 을 어떻게 처리 하 는 지 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 안 드 로 이 드 자동화 테스트 팝 업 창 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 부탁드립니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.