Appium

1 개요[ | ]

Appium
애피엄
  • 모바일기기 테스트 자동화를 위한 프레임워크
  • 네이티브 애플리케이션, 모바일 웹 애플리케이션, 하이브리드 애플리케이션을 테스트하기 위한 오픈소스 자동화 도구
  • 네이티브, 하이브리드, 웹앱을 포함한 모든 애플리케이션 테스트를 자동화할 수 있다.
  • 웹드라이버를 사용하여 Android 또는 iOS에서 스크립트를 실행한다.
  • 2021년 현재, 최신 android와 iOS에서는 버그가 많다.

Appium.png

  • java로 구현한 예제가 많으며, Cucumber / TestNG 도 곁들여 사용한다. TestNG를 이용한 예제는 아래와 같다.
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 서버 기동이 필수

Appium서버.png

  • UIautomator 을 이용하여 application 화면 내 resource-id, class, index 등을 알아 낼수 있다.
    • 버튼이나 이미지를 클릭할때 유용하다

Uiautomator.jpg

2 같이 보기[ | ]

3 참고[ | ]

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}