1 개요[ | ]
- Appium
- 애피엄
- 모바일기기 테스트 자동화를 위한 프레임워크
- 네이티브 애플리케이션, 모바일 웹 애플리케이션, 하이브리드 애플리케이션을 테스트하기 위한 오픈소스 자동화 도구
- 네이티브, 하이브리드, 웹앱을 포함한 모든 애플리케이션 테스트를 자동화할 수 있다.
- 웹드라이버를 사용하여 Android 또는 iOS에서 스크립트를 실행한다.
- 2021년 현재, 최신 android와 iOS에서는 버그가 많다.
- java로 구현한 예제가 많으며, Cucumber / TestNG 도 곁들여 사용한다. TestNG를 이용한 예제는 아래와 같다.
Java
Copy
import io.appium.java_client.MobileElement;
import io.appium.java_client.android.AndroidDriver;
import java.net.MalformedURLException;
import java.net.URL;
import org.openqa.selenium.By;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.Assert;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
public class ioSampleTest {
public AndroidDriver<MobileElement> driver;
public WebDriverWait wait;
//Elements By
By jobsBy = By.id("com.isinolsun.app:id/rootRelativeView");
By allowWhenUsingBy = By.id("com.android.permissioncontroller:id/permission_allow_foreground_only_button");
By searchingJobBy = By.id("com.isinolsun.app:id/bluecollar_type_button");
By animationBy = By.id("com.isinolsun.app:id/animation_view");
By toolBarTitleBy = By.id("com.isinolsun.app:id/toolbarTitle");
@BeforeMethod
public void setup() throws MalformedURLException {
DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability("deviceName", "Pixel XL API 30");
caps.setCapability("udid", "emulator-5554"); //DeviceId from "adb devices" command
caps.setCapability("platformName", "Android");
caps.setCapability("platformVersion", "11.0");
caps.setCapability("skipUnlock", "true");
caps.setCapability("appPackage", "com.isinolsun.app");
caps.setCapability("appActivity", "com.isinolsun.app.activities.SplashActivity");
caps.setCapability("noReset", "false");
driver = new AndroidDriver<MobileElement>(new URL("http://127.0.0.1:4723/wd/hub"), caps);
wait = new WebDriverWait(driver, 10);
}
@Test
public void basicTest() throws InterruptedException {
//Click and pass Splash
wait.until(ExpectedConditions.visibilityOfElementLocated(animationBy)).click();
//Click I am searching a job
wait.until(ExpectedConditions.visibilityOfElementLocated(searchingJobBy)).click();
//Notification Allow
if (wait.until(ExpectedConditions.visibilityOfElementLocated(allowWhenUsingBy)).isDisplayed()) {
wait.until(ExpectedConditions.visibilityOfElementLocated(allowWhenUsingBy)).click();
}
//Click Second Job
wait.until(ExpectedConditions.visibilityOfAllElementsLocatedBy(jobsBy)).get(1).click();
//Do a simple assertion
String toolBarTitleStr = wait.until(ExpectedConditions.visibilityOfElementLocated(toolBarTitleBy)).getText();
Assert.assertTrue(toolBarTitleStr.toLowerCase().contains("detay"));
}
@AfterMethod
public void teardown() {
driver.quit();
}
}
- 모바일기기,Emulator 를 제어하기위해 appium 서버 기동이 필수
- UIautomator 을 이용하여 application 화면 내 resource-id, class, index 등을 알아 낼수 있다.
- 버튼이나 이미지를 클릭할때 유용하다
- appium은 Native 는 물론 Hybrid app 까지 제어가 가능하다
- Native app : android 혹은 iOS 전용으로 개발한 app
- Hybrid app : app 내 webpage를 넣어 개발한 app
- 갤럭시S20, appium 1.22.0 로 테스트한결과 Hybrid app은 제어가 잘안된다. 최신 Chrome driver 연동에 문제가 있는듯
- 안드로이드 폰 내부 설정 -> 개발자설정 -> WebView 구현 -> Chrome Version 확인 가능
- 참고 URL : https://stackguides.com/questions/63422642/cant-get-uiautomator-dump-on-webview-based-applications-when-webview-of-system#
- 아래 튜토리얼을 참고
- appium tutorial : https://www.guru99.com/introduction-to-appium.html
- TestNG tutorial : https://www.javatpoint.com/testng-tutorial
- cucumber tutorial : https://cucumber.io/docs/guides/10-minute-tutorial/
2 같이 보기[ | ]
3 참고[ | ]
편집자 Jmnote 118.235.10.198 에어컨 118.235.3.1
로그인하시면 댓글을 쓸 수 있습니다.