| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
- xpath
- IOS
- WDA
- XCUITest
- 포그라운드
- Appium Inspector
- appium
- XCUIElementStaticText
- XCode Console
- Web Driver Agent
- push notification
- foreground
- 자동화 테스트
- java
- 푸시알림
- iOS Class Chain
- Today
- Total
목록전체 글 (26)
성장기의 히동
🌼이전 글에서 푸시 알림이 동작했는가?를 검증하기 위해 시스템 로그를 직접 열어보는 과정에 대해 포스팅 했다.이번에는 앱이 백그라운드에서 동작할 때 푸시 알림이 동작했는지에 대해 검증하기 위해 OCR을 활용한다.OCR 작업을 위해 tesseract를 활용했고, Java를 이용해 자동화 하고 있어 tess4j 래퍼 라이브러리를 사용했다.💭 OCR 도입 배경푸시 알림이 동작했는가? 를 검증하기 위해 다양한 방법을 시도했다.푸시 알림이 동작했음을 로그로 검증할 수 있었지만, 조금 불완전한 방법이라는 생각이 들었다.시스템 로그로 검증함으로써 "푸시 알림 배너가 UI에 등장했다"는 검증할 수 있었지만 몇 가지 아쉬운 점이 있었다. - 만약 테스트 도중 다른 앱에서 보낸 푸시 알림이 도착하고, UI에 표시된 경..
🌼이번 글에서는 iOS 앱 테스트를 진행하면서, 포그라운드 앱 PUSH 알림 테스트에 여러 번 실패한 과정을 기록했다.테스트한 어플에서는 포그라운드에서 푸시 알림이 왔을 때 알림 센터에 적재되지 않았다.따라서 이번 글에서는 포그라운드에서 푸시 알림이 동작했을 때, 알림 센터에 적재되지 않는 경우의 자동화를 다뤘다. 어떻게 해결했는지! 가 궁금하다면 길고 긴 글의 후반부를 보면 될 것이다. 아래의 사진에서 볼 수 있듯이, 타이머가 종료되면 앱 푸시 알림이 와야 한다.기본적으로 앱 푸시 알림은, 앱 서버가 아니라 외부 서버에서 앱 서버로 "밀어넣는" 방식이다. 이것을 간과했다. 타이머가 정상적으로 종료됐을 때, Push 알림은 아래와 같은 규칙을 지닌다.1. Title :타이머 이름 + 종료! (미리 등록..
이번에 겪은 문제는 같은 accessibility id를 가진 "checkmark" 요소가 다른 화면에 보일 때 객체의 로케이터 값을 재설정 하지 않은 상태로 다시 한 번 click() 메서드를 수행할 때 요소를 찾지 못하는 에러다. 📍 에러 발생 상황두 장의 사진에서 확인할 수 있는 체크 버튼이 있다. 다른 UI에 존재하지만, 같은 버튼이다.이 체크 버튼의 accessibility id는 "checkmark"로 동일하다.같은 로케이터를 사용하기 때문에, 이미 찾아둔 객체를 해당 화면에서 다시 클릭 한다고 해도 문제가 없을 거라고 생각해 아래와 같이 checkmark 객체를 재사용하도록 코드를 작성했다. 객체 타입이 없는 이유는 클래스 변수로 선언했기 때문이다.enterBasicInformation..
🌼 이번 글에는 TypePickerWheel을 이용해야 하는 자동화 테스트 코드를 작성하면서 마주한 에러의 해결과정을 담았다.글이 길어 가독성이 떨어질 수 있을 것 같아, 사전에 순서를 정리하겠다.[ 이벤트 테스트 ]1. 이벤트 생성 테스트 중, TypePickerWheel을 이용해 종료 시간을 한 시간 늦추는 함수 작성2. 비슷한 상황에서 해당 메서드를 활용하려고 하니 에러 발생3. 로케이터가 계층 변화에 취약한 구조로 이뤄져 있었기 때문에 요소를 찾지 못한 것으로 원인 파악4. TypePickerWheel 로케이터 리팩토링[ 루틴 테스트 ]5. 루틴 테스트 진행 중 한 시간 늦추는 것을 넘어 원하는 시간까지 스와이프 해야 하는 메서드가 필요해짐6. Appium에서 제공하는 selectPickerWh..
지인이 개발한 앱 테스트를 진행하던 중, 기능 및 UI 변경이 이뤄져 기존 TC를 변경해야 할 상황에 놓였다.따라서, 앱 화면 및 기능을 분석하고 TC를 도출한 과정을 자료로 남기고자 한다. 원래 TC는 Google Sheets로 작성해 관리하고 있었고, 지금 업로드하는 자료는 화면 단위로 많은 버튼이 존재해 이를 직접 분석하고 정리하기 위해 작성한 노트로 볼 수 있겠다. 해당 사진에 작성된 TC는 Google Sheets에 고스란히 옮겨두었다.Appium Inspector는 App Bundle Id로 동작하는데, 푸시 알람을 어떻게 테스트 해야 할지 조금 막막한 기분이다.생각보다 어려울 것 같지만, 그래도 분석해보고 한 번 도전해보겠다🤞🏻
이번 문제 또한, 테스트 코드를 작성하던 중 직면했다.아래 사진 처럼, type은 XCUIElementTypeStaticText로 동일한 경우에 두 요소 중 원하는 요소를 찾아내기 위한 과정을 기술했다. 🎀 이해를 돕기 위한 사전 설명- 할 일이라는 객체를 루틴이라는 객체가 감싸고 있고, 루틴과 할 일은 1:N 관계를 이룬다.- 할 일은 루틴 내부 + 버튼을 통해 추가로 생성할 수 있으며, 우측에 보이는 "3시간 15분"이라는 값은 사용자가 직접 설정한 타이머의 시간이다.- "루틴 생성과 동시에 할 일 생성" 은 루틴 제목이고, "할 일 타이머 시간 임의로 설정"은 할 일의 제목이다.- 루틴 제목 아래에 있는 "3시간 15분"은 루틴 내 모든 할 일의 시간의 총합이다.- 할 일 시간의 총 합계가 UI ..
(시간이 없으시면 맨 마지막에 결론 부분을 보시면 됩니다요) 지인이 만든 앱 테스트를 진행하면서, accessibility id가 없는 경우가 많아 iOS Class Chain이나 iOS Predicate String을 활용해야 할 경우가 많았다. 어김없이 iOS Class Chain을 통해 요소를 찾고 자동화 테스트 코드를 작성하던 도중, 화면에서 요소를 찾지 못하는 에러를 맞닥뜨렸다. 에러를 맞닥뜨린 상황은 아래와 같다. 1. 알람 선택기는 총 두 개가 있고, 첫 번째 알람 선택기에서 "없음"을 선택해야 함2. 알람 설정 TC의 테스트 자동화를 위해 아래와 같이 자바 코드를 작성함3. Appium Inspector 상에 표시된 iOS Class Chain 값을 사용했음에도 불구하고, 화면에서 요소를..
Appium을 설치하고 실행하기 위해 많은 레퍼런스를 찾아봤지만, 설치하라는 것도 많고 이름도 비슷한 데다 헷갈리는 부분들이 많았다.스스로 개념을 정리하기 위함과 Appium을 이용해 테스트 자동화를 시도하는 사람들의 개념 정리에 조금이나마 도움이 되길 바라는 마음으로 작성했다.🎀 Appium오픈 소스 모바일 자동화 테스트 프레임워크로, iOS와 Android를 모두 지원하며 다양한 앱을 테스트 할 수 있다. Appium은, Node.js를 사용해 작성된 HTTP 서버 이다.그래서 Appium을 설치하기 전에, Node.js를 반드시 설치해야 한다. 하지만 대부분은 이미 설치되어 있는 경우가 많을 것이다.그렇다면, Appium의 가장 큰 특징은 무엇일까?크로스 플랫폼을 지원한다는 점, 오픈 소스라 무료..
import java.util.*;class Solution { public int[] solution(String[] genres, int[] plays) { ArrayList answer = new ArrayList(); HashMap genresCnt = new HashMap(); // 장르별 총 재생횟수 HashMap> musicCnt = new HashMap(); // 장르별, 인덱스별 for(int i = 0; i index = new HashMap(); index.put(i, plays[i]); musicCnt.put(genres[i], index); } else..
보호되어 있는 글입니다.