[์นด์นด์˜ค๋ทฐ ์ž๋™ํ™”] ์นด๋ทฐ ๊ด€๋ฆฌ ์ž๋™ํ™”๋ฅผ ์œ„ํ•œ appium ์‚ฌ์šฉ ๋ง›๋ณด๊ธฐ 1๋‹จ๊ณ„
๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๋””์ง€ํ„ธ ๊ฟ€ํŒ

[์นด์นด์˜ค๋ทฐ ์ž๋™ํ™”] ์นด๋ทฐ ๊ด€๋ฆฌ ์ž๋™ํ™”๋ฅผ ์œ„ํ•œ appium ์‚ฌ์šฉ ๋ง›๋ณด๊ธฐ 1๋‹จ๊ณ„

by ์ผ์ƒ์„ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค 2022. 9. 13.

์˜ˆ๋ž‘์ด๊ฐ€ ์ด๋Ÿฐ ํ…Œ์ŠคํŠธ ์ž๋™ํ™” ํ”„๋กœ๊ทธ๋žจ์ด ์žˆ๋‹ค๋Š” ๊ฑธ ์•Œ๋ ค์ค˜์„œ ์ ‘ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ฒ˜์Œ ํ•ด๋ณด๋Š” ๊ฒƒ์ด๋ผ์„œ ๋‚ฏ์„ค์—ˆ์ง€๋งŒ, ๋‹ค๋ฅธ ์–ธ์–ด๋“ค์ฒ˜๋Ÿผ ์ฒซ ์…‹ํŒ…๋งŒ ์ž˜ํ•ด๋ณด๋ฉด ๋‹ค ๋น„์Šทํ•˜๊ณ  ๊ฒฐ๊ตญ์—” python์œผ๋กœ ์ฝ”๋”ฉ ๋ช‡ ์ค„์„ ํ•˜๋ฉด ๋™์ผํ•œ ๋™์ž‘์„ ๋งคํฌ๋กœ์ฒ˜๋Ÿผ ์ž๋™ํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค. ์ €๋„ ํ•œ ์‚ผ์ผ์€ ๊ณ ํ†ต๋ฐ›๋‹ค๊ฐ€ ์ด์ œ ์ต์ˆ™ํ•ด์ง„ ์ƒํ™ฉ์— ์กฐ๊ธˆ์ด๋‚˜๋งˆ ์ •๋ฆฌํ•ด๋ด…๋‹ˆ๋‹ค.

๋ชฉ์ 

์นด์นด์˜ค๋ทฐ๊ฐ€ ๋” ์ด์ƒ ์›น์—์„œ ๋งˆ์ด๋ทฐ๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— PC๊ฐ€ ์•„๋‹Œ ๋ชจ๋ฐ”์ผ์—์„œ ์ž๋™ํ™”๋ฅผ ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ์•„์•ผ๋งŒ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” ๊ณผ๊ฑฐ์— ์•ˆ๋“œ๋กœ์ด๋“œ ์•ฑ์„ ์ž ๊น ๊ฐœ๋ฐœํ•˜๊ณ  ์• ๋ฎฌ๋ ˆ์ดํ„ฐ๋ฅผ ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•œ ์ ์€ ์žˆ์ง€๋งŒ, ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ํ•ด๋ณธ ์ ์ด ์—†์–ด์„œ ์ด๋Ÿฐ ์„œ๋น„์Šค๊ฐ€ ์žˆ๋Š”์ง€ ๋ชฐ๋ž์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ž‘์ด๋„ 2017๋…„์— ์ž ๊น ํ–ˆ์—ˆ๋‹ค๊ณ  ํ•˜๋”๋ผ๊ตฌ์š”. ์š”์ฆ˜ ์•ˆ๋“œ๋กœ์ด๋“œ ๊ฐœ๋ฐœ์ž๋Š” ๋Œ€๋ถ€๋ถ„ ์•Œ๊ณ  ์žˆ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
appium์€ ํšŒ์‚ฌ์—์„œ ๊ฐœ๋ฐœํ•œ ์•ฑ์„ ํ…Œ์ŠคํŠธ ์ž๋™ํ™” ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๋„ ๋งŽ์ง€๋งŒ ๊ฒŒ์ž„ ๋งคํฌ๋กœ๋ฅผ ๋Œ๋ฆฌ๊ธฐ ์œ„ํ•ด ํ•˜์‹œ๋Š” ๋ถ„๋“ค๋„ ์žˆ๋‹ค๋Š” ๊ฑธ ์•Œ์•˜๋‹ต๋‹ˆ๋‹ค. ์—ฌํ•˜ํŠผ ์ €๋Š” ์นด๋ทฐ ๋ชจ๋ฐ”์ผ ์ž๋™ ์‚ฌ์šฉ์„ ์œ„ํ•ด ์ด์šฉํ•˜๋Š” ์„œ๋น„์Šค(?)๋ผ๊ณ  ์ƒ๊ฐํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ ํˆด

  1. ์•ˆ๋“œ๋กœ์ด๋“œ ์ŠคํŠœ๋””์˜ค ์™€ ์•ˆ๋“œ๋กœ์ด๋“œ ์• ๋ฎฌ๋ ˆ์ดํ„ฐ ๋˜๋Š” ์‹ค๋ฌผ ์•ˆ๋“œ๋กœ์ด๋“œ ๋””๋ฐ”์ด์Šค(๋‘˜ ์ค‘์— ํƒ 1)
  2. Appium Server(๋””๋ฐ”์ด์Šค์™€ ํ†ต์‹ ํ•  ์„œ๋ฒ„), Appium Inspector(์›น์ฒ˜๋Ÿผ Xpath๋ฅผ ์•Œ๊ธฐ ์œ„ํ•ด์„  ํ•„์š”)
  3. pure apk์—์„œ ํ•„์š”ํ•œ ์•ฑ์„ ๋‹ค์šด๋กœ๋“œํ•˜์—ฌ ์‚ฌ์šฉ (ex. ์นด์นด์˜คํ†ก ๋“ฑ)
    • ์•„์ดํฐ (= iOS(ipa)) ์•ฑ ํŒŒ์ผ์€ ์‹ค์ œ ์ธ์ฆ( = ์‚ฌ์ด๋‹?) ํ•  ์ˆ˜ ์—†์–ด์„œ ์ž์ฒด ๊ฐœ๋ฐœ ํ•œ ์•ฑ์ด ์•„๋‹ˆ๋ฉด ์‚ฌ์šฉ์ด ์–ด๋ ค์šธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ ํƒ€ ์•ฑ์„ ํ•  ๊ฒฝ์šฐ ํšŒ์‚ฌ์— ์‚ฌ์ด๋‹ ์•ˆ๋œ ํŒŒ์ผ์„ ์š”์ฒญ๋ฐ›์•„์„œ ์ž‘์—…์„ ํ•ด์•ผ ํ•˜์ง€ ์•Š์„๊นŒ ์‹ถ์Šต๋‹ˆ๋‹ค. 

* ๊ธฐํƒ€ : adb ์„ค์น˜๊ฐ€ ํ•„์š”ํ•˜๋ฉด ํ•ด์•ผ ๋ฉ๋‹ˆ๋‹ค. python ์„ค์น˜ ํ›„ selenium ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์น˜๋„ ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค. ์–ธ์–ด๋Š” nodejs ๋กœ๋„ ๊ฐ€๋Šฅํ•˜๊ณ  java๋กœ๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

* mac์—์„œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์งœ๊ณ  ํ•  ๊ฒฝ์šฐ ์•ˆ๋“œ๋กœ์ด๋“œ ๊ธฐ๊ธฐ ์—ฐ๊ฒฐ ์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•œ samsung smart switch ํ”„๋กœ๊ทธ๋žจ๋„ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ( ๋งํฌ : https://www.samsung.com/sec/apps/smart-switch/)

์•ˆ๋“œ๋กœ์ด๋“œ ์ŠคํŠœ๋””์˜ค๋ฅผ ์„ค์น˜ํ•ด์„œ ์• ๋ฎฌ๋ ˆ์ดํ„ฐ๋ฅผ ๋Œ๋ ค์„œ ๊ฐ€์ƒ ์•ˆ๋“œ๋กœ์ด๋“œ๋ฅผ ํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ์•„๋ฌด๋ž˜๋„ ์นด์นด์˜คํ†ก์„ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋‹ค ๋ณด๋‹ˆ ์ €๋Š” ์‹ค์ œ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํฐ์—์„œ ํ•˜๋Š” ๊ฒŒ ํŽธ๋ฆฌํ•˜์˜€๋‹ต๋‹ˆ๋‹ค.

๋ง›๋ณด๊ธฐ ํ™”๋ฉด

appium GUI Server

์ž…๋ง›์— ๋งž๊ฒŒ ๊ตฌํ˜„๋„ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ์ผ๋‹จ ์„œ๋ฒ„๋Š” ์ œ๊ณตํ•ด์ฃผ๋Š” ์„œ๋น„์Šค๋ฅผ ์ด์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

appium GUI Inspector

์ฒ˜์Œ์—” ์„œ๋ฒ„๋งŒ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  ์–ด๋–ป๊ฒŒ ํ• ์ง€ ๋ชฐ๋ผ ์–ด๋ ค์› ๋Š”๋ฐ, inspector๊ฐ€ ํ•„์š”ํ•œ ๊ฑธ ์•Œ๊ฒŒ ๋ผ์„œ ๋‹ค์šด๋กœ๋“œํ•˜์—ฌ ์‚ฌ์šฉ๋ฒ•์„ ๊ฐ ์žก๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์šด๋กœ๋“œํ•˜๋ฉด ๋˜๊ฒŒ ๊ฐ„๋‹จํ•œ ์‘์šฉํ”„๋กœ๊ทธ๋žจ์ž…๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•„์š”ํ•œ ์„ค์ •๊ฐ’์„ ์ž…๋ ฅํ•˜๋ฉด json ํŒŒ์ผ๋กœ ๊ตฌ์„ฑ๋˜๊ณ  start session ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด ๋””๋ฐ”์ด์Šค์™€ ์„œ๋ฒ„๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด ํ…Œ์ŠคํŠธํ•  ์•ฑ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹คํ–‰์„ ํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ๋ชจ๋ฐ”์ผ ์•ฑ์˜ UI xpath ๊ฐ’์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•ˆ๋“œ๋กœ์ด๋“œ ์ŠคํŠœ๋””์˜ค

์•ˆ๋“œ๋กœ์ด๋“œ ์ŠคํŠœ๋””์˜ค๋ฅผ ์„ค์น˜ํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ๊ฐ€์ƒ ์• ๋ฎฌ๋ž˜์ดํ„ฐ(๊ฐ€์ƒ ํฐ)๋ฅผ ์„ค์น˜ํ•˜์—ฌ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•ˆ๋“œ๋กœ์ด๋“œ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” ์ด๋ ‡๊ฒŒ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹๊ธฐ๋Š” ํ•œ๋ฐ, ๋ฉ”๋ชจ๋ฆฌ ๋งŽ์ด ์žก์•„๋จน์–ด์„œ ์กฐ๊ธˆ ์‚ฌ์–‘ ์ข‹์€ ์ปดํ“จํ„ฐ์—์„œ ์‚ฌ์šฉํ•˜์‹œ๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

๋ฐ˜์‘ํ˜•

ADB๋กœ ์•ฑ ์ •๋ณด ํ™•์ธํ•˜๊ธฐ

adb ์„ค์น˜ ํ›„ ์„œ๋ฒ„๋ฅผ ์‹คํ–‰์‹œ์ผœ์„œ ๊ฐ„๋‹จํ•œ ๋ช…๋ น์–ด๋กœ ์‚ฌ์šฉํ•˜๋Š” ์•ฑ์˜ ํŒจํ‚ค์ง€ ๋ช…๊ณผ MainActivity ์ด๋ฆ„์„ ๊ฐ€์ง€๊ณ  ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

[android]๋กœ๊ทธ ์ˆ˜์ง‘ ํ•˜๋Š” ๋ฐฉ๋ฒ•

Android ๋ฒ„์ „์ด ์—…๋ฐ์ดํŠธ ๋˜๋ฉด์„œ ๊ธฐ๊ธฐ์—์„œ ๋ฐ”๋กœ ๋กœ๊ทธ ์ถ”์ถœ์ด ๋ถˆ๊ฐ€ํ•ด์กŒ๋‹ค. ์•Œ์•„๋‘๋ฉด ์ข‹์€ ๋กœ๊ทธ ์ˆ˜์ง‘ํ•˜๋Š” ๋ฐฉ๋ฒ•(adb tool ์‚ฌ์šฉ๋ฐฉ๋ฒ•)์„ ๊ธฐ๋กํ•ด๋ณธ๋‹ค. ์œˆ๋„์šฐ์—์„œ ์•ˆ๋“œ๋กœ์ด๋“œ ๋กœ๊ทธ ์ˆ˜์ง‘ ๋งค๋‰ด์–ผ [์‚ฌ์ „์ค€๋น„]

odaily.tistory.com

1. ํŒจํ‚ค์ง€๋ช… : adb shell pm list packages -f ๋ช…๋ น์–ด ์ž…๋ ฅ -> ์ฐพ์œผ๋ ค๋Š” ์•ฑ ๋ช… ๊ฒ€์ƒ‰

2.๋ฉ”์ธ Activity๋ช… : adb shell pm dump ํŒจํ‚ค์ง€๋ช… ๋ช…๋ น์–ด ์ž…๋ ฅ -> android.intent.action.MAIN ๊ฒ€์ƒ‰

๋ง›๋ณด๊ธฐ ์˜์ƒ

์‹ค์ œ ๋””๋ฐ”์ด์Šค์—์„œ ๊ตฌ๋™ํ•œ ๊ฒƒ์„ ๋ณด์—ฌ๋“œ๋ฆฌ๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์กฐ๊ธˆ ํ๋ฆฟํ•˜๊ฒŒ ์ดฌ์˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•ธ๋“œํฐ์— ๋น„์นœ ์ œ ๋ชจ์Šต์ด ์กฐ๊ธˆ ์ฐฝํ”ผํ•˜๊ตฐ์š”. ์ด๋ ‡๊ฒŒ ์„œ๋ฒ„๋ฅผ ๋„์›Œ๋‘๊ณ  python์— ๊ฐ„๋‹จํžˆ ์ฝ”๋“œ ์ž…๋ ฅ ํ›„ ๋””๋ฒ„๊น…์„ ํ•˜๋ฉด ์นด์นด์˜คํ†ก์ด ์—ด๋ฆฐ๋‹ต๋‹ˆ๋‹ค. ์›น์—์„œ key ์ด๋ฒคํŠธ๋ฅผ ์ค˜์„œ ๋™์ž‘ํ•˜๊ฒŒ ํ•˜๋ฉด, ๋ชจ๋ฐ”์ผ์—์„œ๋„ ํŽธ๋ฆฌํ•˜๊ฒŒ ์ž๋™ํ™”ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋‚ด์ผ๋ถ€ํ„ฐ๋Š” ์ž๋™ํ™” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์งค ์˜ˆ์ •์ž…๋‹ˆ๋‹ค

๋‹ค์Œ ๊ธ€์—์„œ๋Š” appium ์ดˆ๊ธฐ ์„ค์ • ๋ฐฉ๋ฒ•์ด๋‚˜ ๋™์ž‘์‹œ ํ•„์š”ํ•œ value์— ๋Œ€ํ•ด ์ฐจ๊ทผ์ฐจ๊ทผ ์ฝ˜ํ…์ธ ๋ฅผ ์ž‘์„ฑํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์นด๋ทฐ๊ฐ€ ์›น์—์„œ ์ง€์› ์ข…๋ฃŒ๊ฐ€ ๋˜์–ด ์•„์‰ฌ์› ๋Š”๋ฐ, ๋น ๋ฅธ ์‹œ์ผ ๋‚ด์— ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์„ ์ฐพ์•„์„œ ๋งค์šฐ ๊ธฐ๋ถ„์ด ์ข‹์•˜์Šต๋‹ˆ๋‹ค.


Appium ์„ค์ • ๊ฐ€์ด๋“œ ์˜์ƒ


Appium ์ดˆ๊ธฐ ์„ค์ • ๊ฐ€์ด๋“œ ์˜์ƒ์ž…๋‹ˆ๋‹ค. ์•ž์œผ๋กœ ๋” ์ข‹์€ ์ฝ˜ํ…์ธ ๋กœ ์ฐพ์•„์˜ค๊ฒ ์Šต๋‹ˆ๋‹ค. ์œ ํŠœ๋ธŒ ๊ตฌ๋… ์ข‹์•„์š” ์„ค์ • ๋ถ€ํƒ๋“œ๋ ค์š”.

[์นด์นด์˜ค๋ทฐ ์ž๋™ํ™”] ์นด์นด์˜คํ†ก ์ž๋™ ์‹คํ–‰ ํ›„ ์ฑ„๋„ ์ ‘์†ํ•˜์—ฌ ์‹ ๊ทœ ๋ณด๋“œ ์ •๋ณด ๊ฐ€์ ธ์˜ค๊ธฐ 2๋‹จ๊ณ„

๊ฒฐ๊ตญ์—” ๋ชจ๋ฐ”์ผ์—์„œ python ๋Œ๋ฆฌ๋Š” ๊ฒƒ์ด๋ผ๋Š” ๊ฑธ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ต๋‹ˆ๋‹ค. ๋‹ค๋งŒ ์Šคํฌ๋กค์ด๋‚˜ ์ด๋Ÿฐ ๋ถ€๋ถ„์ด ์›น์ด๋ž‘ ๋‹ฌ๋ผ์„œ ๋ชจ๋ฐ”์ผ ๊ธฐ๋Šฅ๋งŒ ์ตํžˆ๊ณ  ์žˆ๋‹ค๋ฉด ๊ธˆ๋ฐฉ ๊ตฌํ˜„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ์‹œ๊ฐ„์—๋Š” ์นด๋ทฐ๋ฅผ ๋ชจ๋ฐ”

odaily.tistory.com

๋Œ“๊ธ€