"Appium"의 두 판 사이의 차이

85번째 줄: 85번째 줄:


==같이 보기==
==같이 보기==
* [[ ]]
* [[selinium]]
* [[  ]]
* [[  ]]
* [[  ]]
* [[  ]]
* [[  ]]


==참고==
[[분류: appium  ]]
* {{위키백과}}
* {{위키낱말사전}}
* {{다음사전}}
* {{다음백과}}
* {{네이버사전}}
* {{네이버백과}}
* {{나무위키}}
* {{리브레위키}}
 
[[분류:   ]]
[[분류:  ]]

2021년 10월 31일 (일) 21:51 판

1 개요

모바일기기 테스트 자동화를 위한 프레임워크
네이티브, 하이브리드 및 웹 앱을 포함한 모든 애플리케이션을 자동화 할 수 있다 ( 최신 android와 iOS에서는 버그가 많음 )
https://appium.io/index.html?lang=ko

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.png

  • appium은 Native 는 물론 Hybrid app 까지 제어가 가능하다
    • Native app : android 혹은 iOS 전용으로 개발한 app
    • Hybrid app : app 내 webpage를 넣어 개발한 app
      • 갤럭시S20, appium 1.22.0 로 테스트한결과 Hybrid app은 제어가 안된다


2 같이 보기

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