Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .github/workflows/android-maestro.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ on:
- regression
- all
- ci
- offline

permissions:
contents: read
Expand Down Expand Up @@ -68,7 +69,7 @@ jobs:
cancel-in-progress: false
queue: max
env:
MAESTRO_SUITE: ${{ github.event_name == 'workflow_dispatch' && inputs.suite || 'ci' }}
MAESTRO_SUITE: ${{ github.event_name == 'workflow_dispatch' && inputs.suite || 'all' }}
steps:
- uses: actions/checkout@v4
with:
Expand Down
73 changes: 58 additions & 15 deletions .maestro/README.md

Large diffs are not rendered by default.

9 changes: 9 additions & 0 deletions .maestro/flows/offline-exercise-cached.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
appId: com.project200.undabang
name: 실제 단절 후 재실행한 캘린더 목록 상세 캐시
---
# 호스트가 두 라디오와 현재 기본망의 단절을 확인한 뒤 실행합니다.
- stopApp
- runFlow: ../subflows/launch-logged-in.yaml
- tapOn:
id: exercise_nav_graph
- runFlow: ../offline/assert-exercise-record.yaml
46 changes: 46 additions & 0 deletions .maestro/flows/offline-exercise-create.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
appId: com.project200.undabang
name: 오프라인 조회용 실제 운동 기록 생성
---
- runFlow: ../subflows/launch-logged-in.yaml
- tapOn:
id: exercise_nav_graph
- tapOn:
id: exercise_create_btn
- extendedWaitUntil:
visible:
id: exercise_title_input
timeout: 30000
- tapOn:
id: exercise_title_input
- inputText: "${EXERCISE_TITLE}"
- hideKeyboard
- runFlow:
file: ../subflows/set-exercise-time.yaml
env:
TIME_BUTTON: exercise_start_time
TIME_HOUR: "${EXERCISE_START_HOUR}"
TIME_MINUTE: "00"
- runFlow:
file: ../subflows/set-exercise-time.yaml
env:
TIME_BUTTON: exercise_end_time
TIME_HOUR: "${EXERCISE_END_HOUR}"
TIME_MINUTE: "00"
- tapOn:
id: exercise_complete
- extendedWaitUntil:
visible:
id: ".*(confirm_btn|exercise_create_btn)"
timeout: 30000
- runFlow:
when:
visible:
id: confirm_btn
commands:
- tapOn:
id: confirm_btn
- extendedWaitUntil:
visible:
id: exercise_create_btn
timeout: 30000
- runFlow: ../offline/assert-exercise-record.yaml
21 changes: 21 additions & 0 deletions .maestro/flows/offline-exercise-missing.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
appId: com.project200.undabang
name: 운동 캐시 없는 첫 조회는 네트워크 오류
---
# 별도 pm clear와 인증 뒤 운동 화면을 한 번도 열지 않고 실제 망을 끊습니다.
- runFlow: ../subflows/launch-logged-in.yaml
- tapOn:
id: exercise_nav_graph
- scrollUntilVisible:
element:
id: exercise_list_empty_tv
text: "${EXERCISE_END_DATE.split('.').join('-') + ' 운동 기록 목록 네트워크 오류'}"
direction: DOWN
timeout: 30000
- assertVisible:
id: exercise_list_empty_tv
text: "${EXERCISE_END_DATE.split('.').join('-') + ' 운동 기록 목록 네트워크 오류'}"
- assertVisible:
id: exercise_create_btn
# 초기 빈 목록을 성공한 빈 캐시로 오인하지 않습니다.
- assertNotVisible:
text: "${EXERCISE_END_DATE.split('.').join('-') + '( 운동 기록 목록|에 운동 기록이 없습니다)'}"
22 changes: 22 additions & 0 deletions .maestro/flows/offline-timers-after-reconnect.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
appId: com.project200.undabang
name: 접속 복귀 후 폼과 다시 연 목록의 최종 값
---
# launchApp/stopApp 없이 직전 폼을 그대로 관찰합니다.
- runFlow: ../offline/assert-timer-draft.yaml
- back
- back
- back
- scrollUntilVisible:
element:
id: timer_btn
direction: UP
timeout: 30000
# 새 목록 화면을 엽니다. 성공한 원격 GET이나 pending 상태에서의 병합 순서를 증명하지는 않습니다.
- tapOn:
id: timer_btn
- extendedWaitUntil:
visible:
id: custom_timer_list
timeout: 30000
- runFlow: ../offline/assert-timer-list.yaml
- runFlow: ../offline/prepare-timer-draft.yaml
53 changes: 53 additions & 0 deletions .maestro/flows/offline-timers-mutate.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
appId: com.project200.undabang
name: 실제 오프라인 커스텀 타이머 수정 삭제 생성
---
- runFlow: ../offline/open-timer-list.yaml
- scrollUntilVisible:
element:
id: custom_timer_add_card
direction: DOWN
timeout: 30000
- runFlow:
file: ../offline/edit-timer.yaml
env:
EDIT_TIMER_TITLE: "${TIMER_ORIGINAL_TITLE}"
EXPECTED_TIMER_TIME: "00:45"
- tapOn:
id: custom_timer_form_title_field
- eraseText: 255
- inputText: "${TIMER_UPDATED_TITLE}"
- hideKeyboard
- runFlow:
file: ../offline/set-timer-time.yaml
env:
TIMER_TIME_FIELD: custom_timer_form_step_time_0
TIMER_MINUTES: "01"
TIMER_SECONDS: "15"
- tapOn:
id: custom_timer_form_submit_btn
- extendedWaitUntil:
visible:
id: custom_timer_detail
timeout: 30000
- assertVisible: "${TIMER_UPDATED_TITLE}"
- back
- scrollUntilVisible:
element:
text: "${TIMER_DELETE_TITLE}"
direction: DOWN
timeout: 30000
- tapOn: "${TIMER_DELETE_TITLE}"
- tapOn:
id: custom_timer_menu_btn
- tapOn: 삭제하기
- assertVisible: "정말 타이머를 삭제할까요[?]"
- tapOn: 확인
- extendedWaitUntil:
visible:
id: custom_timer_list
timeout: 30000
- runFlow:
file: ../offline/create-timer.yaml
env:
NEW_TIMER_TITLE: "${TIMER_CREATE_TITLE}"
- runFlow: ../offline/assert-timer-list.yaml
13 changes: 13 additions & 0 deletions .maestro/flows/offline-timers-online.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
appId: com.project200.undabang
name: 동기화될 전용 커스텀 타이머 두 개를 UI로 생성
---
- runFlow: ../offline/open-timer-list.yaml
- runFlow:
file: ../offline/create-timer.yaml
env:
NEW_TIMER_TITLE: "${TIMER_ORIGINAL_TITLE}"
- runFlow:
file: ../offline/create-timer.yaml
env:
NEW_TIMER_TITLE: "${TIMER_DELETE_TITLE}"
# 호스트는 실제 서버 GET에서 두 이름과 45초 스텝이 나타나야 다음 단계로 갑니다.
9 changes: 9 additions & 0 deletions .maestro/flows/offline-timers-reconnect.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
appId: com.project200.undabang
name: 실제 서버 업로드 완료 뒤에도 미저장 폼과 화면 값 유지
---
# 호스트의 독립 GET이 create/75초 update/delete/중복 부재를 확인한 뒤 실행합니다.
# 이 단계도 앱을 재실행하지 않아 서버 결과가 작성 중 폼을 대체하는 오류를 잡습니다.
- runFlow: ../offline/assert-timer-draft.yaml
- back
- back
- runFlow: ../offline/assert-timer-list.yaml
19 changes: 19 additions & 0 deletions .maestro/flows/offline-timers-relaunch.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
appId: com.project200.undabang
name: 오프라인 재실행 후 생성 수정 삭제 영속성과 작성 중 폼
---
- stopApp
- runFlow: ../offline/open-timer-list.yaml
- runFlow: ../offline/assert-timer-list.yaml
- runFlow:
file: ../offline/edit-timer.yaml
env:
EDIT_TIMER_TITLE: "${TIMER_CREATE_TITLE}"
EXPECTED_TIMER_TIME: "00:45"
- back
- back
- scrollUntilVisible:
element:
id: custom_timer_add_card
direction: DOWN
timeout: 30000
- runFlow: ../offline/prepare-timer-draft.yaml
33 changes: 33 additions & 0 deletions .maestro/offline/assert-exercise-record.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
appId: com.project200.undabang
---
- runFlow: ../subflows/select-exercise-date.yaml
- scrollUntilVisible:
element:
id: exercise_complete_iv
text: "${'운동 기록이 있는 날짜: ' + EXERCISE_START_DATE.split('.').join('-')}"
direction: UP
timeout: 30000
- assertVisible:
id: exercise_complete_iv
text: "${'운동 기록이 있는 날짜: ' + EXERCISE_START_DATE.split('.').join('-')}"
- scrollUntilVisible:
element:
id: exercise_title_tv
text: "${EXERCISE_TITLE}"
direction: DOWN
timeout: 30000
- assertVisible:
id: exercise_list_cl
containsDescendants:
- id: exercise_title_tv
text: "${EXERCISE_TITLE}"
- id: exercise_time_tv
text: "${EXERCISE_START_HOUR + ':00 ~ ' + EXERCISE_END_HOUR + ':00'}"
- tapOn:
id: exercise_title_tv
text: "${EXERCISE_TITLE}"
- runFlow:
file: ../subflows/assert-exercise-detail.yaml
env:
RECORD_TITLE: "${EXERCISE_TITLE}"
START_MINUTE: "00"
13 changes: 13 additions & 0 deletions .maestro/offline/assert-timer-draft.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
appId: com.project200.undabang
---
- assertVisible:
id: custom_timer_form
- assertVisible:
id: custom_timer_form_title_field
text: "${TIMER_DRAFT_TITLE}"
- assertVisible:
id: custom_timer_form_step_name_0
text: offline-step
- assertVisible:
id: custom_timer_form_step_time_0
text: "02:00"
47 changes: 47 additions & 0 deletions .maestro/offline/assert-timer-list.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
appId: com.project200.undabang
---
- assertVisible:
id: custom_timer_list
- scrollUntilVisible:
element:
text: 심플 타이머
direction: UP
timeout: 30000
# 한 화면의 부재가 아니라 목록 끝의 추가 카드까지 겹치는 영역을 관찰합니다.
- repeat:
times: 200
while:
notVisible:
id: custom_timer_add_card
commands:
- assertNotVisible: "${TIMER_DELETE_TITLE + '|' + TIMER_ORIGINAL_TITLE + '|' + TIMER_DRAFT_TITLE}"
- swipe:
start: "50%, 60%"
end: "50%, 40%"
duration: 2000
- assertVisible:
id: custom_timer_add_card
- assertNotVisible: "${TIMER_DELETE_TITLE + '|' + TIMER_ORIGINAL_TITLE + '|' + TIMER_DRAFT_TITLE}"
- scrollUntilVisible:
element:
text: "${TIMER_CREATE_TITLE}"
direction: UP
timeout: 30000
- assertVisible: "${TIMER_CREATE_TITLE}"
- scrollUntilVisible:
element:
text: 심플 타이머
direction: UP
timeout: 30000
- scrollUntilVisible:
element:
text: "${TIMER_UPDATED_TITLE}"
direction: DOWN
timeout: 30000
- assertVisible: "${TIMER_UPDATED_TITLE}"
# 호출자가 모든 행을 UP 방향으로 찾을 수 있도록 끝으로 돌려놓습니다.
- scrollUntilVisible:
element:
id: custom_timer_add_card
direction: DOWN
timeout: 30000
48 changes: 48 additions & 0 deletions .maestro/offline/create-timer.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
appId: com.project200.undabang
---
- scrollUntilVisible:
element:
id: custom_timer_add_card
direction: DOWN
timeout: 30000
- tapOn:
id: custom_timer_add_card
- extendedWaitUntil:
visible:
id: custom_timer_form_title_field
timeout: 30000
- tapOn:
id: custom_timer_form_title_field
- inputText: "${NEW_TIMER_TITLE}"
- hideKeyboard
- tapOn:
id: custom_timer_form_new_step_name_field
- inputText: offline-step
- hideKeyboard
- runFlow:
file: set-timer-time.yaml
env:
TIMER_TIME_FIELD: custom_timer_form_new_step_time
TIMER_MINUTES: "00"
TIMER_SECONDS: "45"
- tapOn:
id: custom_timer_form_add_step_btn
- assertVisible:
id: custom_timer_form_step_name_0
text: offline-step
- assertVisible:
id: custom_timer_form_step_time_0
text: "00:45"
- tapOn:
id: custom_timer_form_submit_btn
- extendedWaitUntil:
visible:
id: custom_timer_detail
timeout: 30000
- assertVisible: "${NEW_TIMER_TITLE}"
- assertVisible: offline-step
- back
- extendedWaitUntil:
visible:
id: custom_timer_list
timeout: 30000
26 changes: 26 additions & 0 deletions .maestro/offline/edit-timer.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
appId: com.project200.undabang
---
- scrollUntilVisible:
element:
text: "${EDIT_TIMER_TITLE}"
direction: UP
timeout: 30000
- tapOn: "${EDIT_TIMER_TITLE}"
- extendedWaitUntil:
visible:
id: custom_timer_menu_btn
timeout: 30000
- tapOn:
id: custom_timer_menu_btn
- tapOn: 수정하기
- extendedWaitUntil:
visible:
id: custom_timer_form_title_field
text: "${EDIT_TIMER_TITLE}"
timeout: 30000
- assertVisible:
id: custom_timer_form_step_name_0
text: offline-step
- assertVisible:
id: custom_timer_form_step_time_0
text: "${EXPECTED_TIMER_TIME}"
Loading
Loading