๊ฐ๋ ๊ฐ๋ฐ ๊ด๋ จํ์ฌ ์ฌ๋ฌ ์ฑ๋์ ํตํด ๋ฌธ์๋ฅผ ๋ฐ๊ณ ์๋ต๋๋ค. ์ต๊ทผ ์ง๋ฌธ ๋ฐ์ ๋ด์ฉ ์ค์ ํ๋์ ๋ํด ๊ณต์ ๋๋ ค๋ด ๋๋ค.
Q. ์ํผ์ Appium ์ด ์๋๋ก์ด๋ ์ ๋ฎฌ์์๋ ๋์์ด ๋๋์?
๋ค
Q. xx ์ฑ ๊ตฌ๋ ์ ๋์์ด ์ ์๋ฉ๋๋ค. ๋ฌด์์ด ๋ฌธ์ ์ธ๊ฐ์??
init ์ด๊ธฐ ์ค์ ํด์ฃผ๋ ๊ฐ์ ๋ฌธ์ ์ ์์ธ์ด์์ต๋๋ค. ์ง๋ ๋ฒ์๋ ๋ชจ๋ฐ์ผ ๊ธฐ๊ณ์์ ๋ชจ๋ฐ์ผ ๋งคํฌ๋ก ์๋ํ๋ฅผ ํ ๋ด์ฉ์ ํฌ์คํ
ํ์๋๋ฐ์. ์ฌ์ค ํฌ๊ฒ ๋ค๋ฅด์ง ์์ง๋ง ์ด๋ฒ ์๊ฐ์๋ ์ ๋ฎฌ๋ ์ดํฐ์์ ํ๋ ๋ฐฉ๋ฒ์ ์๊ฐ๋๋ ค๋ณด๊ณ ์ ํฉ๋๋ค.
์ฌ์ ์ Appium ์ค์น๋ฅผ ํ์
์ผ์ง๋ง, ์๋ ๊ธฐ๋ฅ์ด ๋์ํฉ๋๋ค. ์ค์น๊ฐ ๋์ด ์์ง ์๋ค๋ฉด ์๋ ์์์ ์ฐธ๊ณ ํ์
์ ์ค์นํ์๊ณ ๋ ๋ค ํด๋น๊ธ์ ๋ค์ ๋ณด์๋ ๊ฒ์ ์ถ์ฒ๋๋ฆฝ๋๋ค.
๋น ๋ฅธ Appium ์ค์น ๋ฐ ์ค์ ๊ฐ์ด๋
์ด ์ ์๋ ์ ๋ฎฌ๋ ์ดํฐ์์ ๋์ํ๋ค๊ณ ๋ ์ค๋ช
ํ์ง๋ง, ๊ฐ๋จํ ์๋๋ก์ด๋ ์คํ๋์ค๋ฅผ ์ค์นํ์ฌ ๋๋ ์ ๋๋ง ํ์ธ ํ์๊ณ , ์ผ๋ฐ ์ฌ์ฉ์๊ฐ ๋ง์ด ์ฌ์ฉํ๋ PC ์ฑ ํ๋ ์ด์ด์์ ๋์ํ๋ ๋ฐฉ์์
๋๋ค. (ex. ๋
น์ค ์ฑํ๋ ์ด์ด, ๋ฏธ๋ฎค ๋ฑ)
๋ชจ๋ฐ์ผ ์๋๋ก์ด๋๊ฐ ์๋ ๋ถ๋ค์ ์ค์ฒด ๋ชจ๋ฐ์ผ ๊ณต๊ธฐ๊ณ๋ฅผ ๊ตฌ์
ํ์ง ์์๋ PC๊ฐ ์๋ค๋ฉด ํด๋ํฐ์ฒ๋ผ ์ดํ์ ์ค์นํ์ฌ ๋งคํฌ๋ก๋ฅผ ๋์ํ ์ ์์ต๋๋ค. ์ค๋ ๊ณต์ ๋๋ฆฌ๋ ๋ด์ฉ์ ๋
น์ค ์ ๋ฎฌ๋ ์ดํฐ์ + Appium ์ฐ๋ํ์ฌ ์ฑ์ ์คํ์ํค๋ ๋ฐฉ๋ฒ์
๋๋ค.
๋ น์ค ์ฑํ๋ ์ด์ด ์ค์น ๋ฐ ์ค์
* ์ฐธ๊ณ ๋ก Mac์์๋ ์ค์น๋ ๊ฐ๋ฅํ์ง๋ง ์ต๊ทผ์ ์
๋ฐ์ดํธ ๋ Ventura์์๋ 99% ์ค๋ฅ๊ฐ ํด๊ฒฐ์ด ๋์ง ์์ ๊ณ ๋ฏผ์ ๋น ์ ธ์๋ต๋๋ค.
๋
น์ค๋ฅผ ์ค์นํ๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก๋ Android 7์ด ์ค์น๋๋๋ฐ ๋
น์ค ๋งค๋์ โ ๋ฉํฐ ์คํ์์ Android 9 ๋ฒ์ ์ ์ ๋ฎฌ๋ ์ดํฐ๋ฅผ ์ถ๊ฐ ์ค์นํด์ผ ์ต๊ทผ ๋์จ ์ฑ๋ ๋์์ด ๊ฐ๋ฅํฉ๋๋ค.
๋
น์ค ์ค์น ํ, ์ค์น๋ ์ ๋ฎฌ๋ ์ดํฐ๋ฅผ ์คํ ์ํค๋ฉด ์ค์ ์ ๋ค์ด๊ฐ์ ROOT ์ผํค๋ฅผ ๊ผญ ์ฒดํฌํ๊ณ ์ฌ์คํํด์ผ ํฉ๋๋ค. ๋
น์ค ์ฑํ๋ ์ด์ด ์ค์ ์ ์ฌ๊ธฐ๊น์ง๋ง ํ๋ฉด ๊ทธ ๋ค์๋ถํฐ๋ Appium ์ค์ ์
๋๋ค.
Appium ์คํ ๋ฐ ์ฐ๊ฒฐ
์ฐ์ ์ค์น๋ ๋ น์ค ์ ๋ฎฌ๋ ์ดํฐ๊ฐ adb์ ์ ์ฐ๊ฒฐ๋์๋์ง ํ์ธํฉ๋๋ค. ์ฐ๊ฒฐ์ด ๋์๋ค๊ณ ๋จ๋ฉด, ๊ทธ ๋ appium ์๋ฒ ์คํ ํ python ์์ค๋ฅผ ์คํ ์์ผ๋ด ๋๋ค.
adb ํ์ธํ๊ธฐ
python ์์ค
์๋ ์์ค๋ ๊ธฐ๋ณธ์ ์ผ๋ก appium์์ ์ฑ์ ์คํ์ํค๊ธฐ ์ํ ์ต์ํ์ ์์ค์ฝ๋ ์ ๋๋ค.
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.remote.webelement import WebElement
from selenium.webdriver.common.by import By
from appium.webdriver.common.appiumby import AppiumBy
from appium import webdriver
import time
from time import sleep
caps = {
"platformName": "Android",
"appium:platformVersion": "9", #๋
น์ค ์ ๋ฎฌ๋ ์ดํฐ ์๋๋ก์ด๋ ๋ฒ์
"appium:deviceName": "NoxPlayer", #๋
น์ค ์ ๋ฎฌ๋ ์ดํฐ device ์ด๋ฆ
"appium:app": "C:/test/testapp.apk", #ํ
์คํธ ํ๊ณ ์ถ์ ์ฑ apk ํ์ผ ์์น
"appium:automationName": "Appium",
"appium:newCommandTImeout": 3600,
"appium:appPackage": "com.example.package", #ํ
์คํธ ํ๊ณ ์ถ์ ์ฑ ํจํค์ง๋ช
"appium:appActivity": "com.activity.MainActivity", #ํ
์คํธ ํ๊ณ ์ถ์ ์ฑ ๋ฉ์ธ activity
"appium:udid": "127.0.0.1:62001", #๋
น์ค ์ฑํ๋ ์ด์ด ๊ณ ์ id
"appium:noReset": "true",
"appium:fullReset": "false",
"appium:ensureWebviewsHavePages": True,
"appium:nativeWebScreenshot": True, "appium:newCommandTimeout": 3600,
"appium:connectHardwareKeyboard": True
}
try :
print("\nSTART...")
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", caps) #appium ์๋ฒ
sleep(100)
finally:
driver.quit()
print("\nEND...")
์ค์ ๋ น์ค ์ฑํ๋ ์ด์ด ํ๋ฉด
1. python ํ์ผ 1ํ ์ ์ ๋์์ Appium Settings๊ฐ ์ค์น๋ฉ๋๋ค.
- ์ฑ ๊ถํ ์ค์ ๋ฐ ๋ฐฑ๊ทธ๋ผ์ด๋์์๋ ๋์ํ๋๋ก ์ค์
๋ฐฑ๊ทธ๋ผ์ด๋์์ ๋๋ฆฌ๊ธฐ ์ํด ์์คํ ์ค์ ๊ถํ์ ๋ชจ๋ ํ์ฉํ๊ณ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ๋์ ๊ฐ๋ฅํ ์ค์ ๊ณผ ๋ฐฐํฐ๋ฆฌ ์ต์ ํ ์ค์ ์ ํด์ ํฉ๋๋ค. ํด๋ํฐ ์ค์ ๋ง๋ค ๋ค๋ฅผ ์ ์์ง๋ง, ์ผ์ฑ ๊ธฐ๋ณธ ๊ฐ์ด๋๋ฅผ ๊ธฐ์ฌํ์์ต๋๋ค. (https://www.samsungsvc.co.kr/solution/540313)
2. ํ ๋ฒ ๋ python ํ์ผ ์คํ์ test app ์ค์น๋๋ ๊ฒ์ ํ์ธ ํ ์ ์์ต๋๋ค. ์ฑ์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ์ง๋ง ๊ธฐ๋ณธ์ ์ธ ์์คํ
๊ถํ์ ๋ค ๋ถ์ฌํ๋ผ๋ ํ์
์ด ๋น๋๋ค. (test app์ adb๋ฅผ ํตํด ์ง์ ์ถ์ถ์ด ๊ฐ๋ฅํ์ง๋ง, pureapk ์ฌ์ดํธ์์ ๋น ๋ฅด๊ฒ ๋ค์ด๋ก๋ ๋ฐ์ ์ ์์ต๋๋ค.)
3. 3๋ฒ์งธ python ํ์ผ ์คํ ์ ๋ก๊ทธ์ธ์ด default๋ก ์๋ ์ค์ ๋ ๊ฒฝ์ฐ ์ฑ์ด ์ ์์ ์ผ๋ก ์คํ๋๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค. test app์ ์จ๊ธฐ๊ธฐ ์ํด ์ ์ฒด ๋ธ๋ฌ์ฒ๋ฆฌ ๋ ์์์
๋๋ค.
์์์ ๋ณด๋ฉด ํ์ผ ์คํ ์ appium settings ์ฑ์ด ๋จผ์ ๋ฐ์ง ์คํ๋๊ณ ๊ทธ๋ค์ ํ
์คํธ ์ฑ์ด ์คํ๋๋ ๊ฒ์ ํ์ธ ํ ์ ์์ต๋๋ค. ๋์ ์์ด ์ ์์ง๋ง, ๊ถ๊ธํ์ ์ ์์ผ๋ฉด ํธํ ๋๊ธ ๋จ๊ฒจ์ฃผ์ธ์
๋๊ธ