Appium 원하는 기능 Android 에뮬레이터

⚡ 스마트 요약

원하는 기능은 키-값 쌍입니다. Appium 클라이언트는 세션을 열 때 자동화된 테스트를 실행할 플랫폼, 장치, 드라이버 및 애플리케이션을 서버에 알려줍니다.

  • ???? 세션tract: 기능은 새 세션 요청의 JSON 본문에 담겨 전송되며, 이후에는 변경할 수 없습니다.
  • ☑️ Android 골자: appPackage와 appActivity는 애플리케이션과 화면의 이름을 지정합니다. Appium 시작해야 합니다.
  • 대기 시간 변형: appWaitPackage와 appWaitActivity는 실제 진입점 이전에 나타나는 스플래시 화면을 다룹니다.
  • 🧪 Appium 2 접두사: 이제 모든 비표준 기능에는 `appium:` 공급업체 접두사가 필요하며, 그렇지 않으면 서버에서 거부합니다.
  • 🛠️ 현대 Java 고객: DesiredCapabilities는 UiAutomator2Options 및 XCUITestOptions로 대체되었습니다. Selenium 4.
  • 📊 값 찾기: adb dumpsys 쿼리 또는 PackageManager 클래스를 사용하면 패키지 및 활동 이름을 확인할 수 있습니다.

Appium 원하는 기능 키-값 쌍 Android 에뮬레이터 세션

원하는 기능이란 무엇입니까

'원하는 기능'을 사용하면 자동화 중에 서버의 동작을 수정할 수 있습니다. Appium 이는 명령을 전송하는 데 사용되는 해시맵 또는 키-값 쌍입니다. Appium 클라이언트의 모든 명령이 세션 컨텍스트 내에서 실행되는 서버입니다.

예를 들어, 클라이언트는 JSON 객체를 포함하는 POST /session 요청을 보냅니다. Appium 서버.

따라서 서버에 요청을 보내거나 세션을 유지하려면 키와 값 쌍으로 이루어진 집합이 사용됩니다. 이를 '요구되는 기능(Desired Capabilities)'이라고 합니다.

import io.appium.java_client.AppiumDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
{
        DesiredCapabilities capabilities = new DesiredCapabilities();
        capabilities.setCapability("deviceName","Android Emulator");
        capabilities.setCapability("platformVersion", "4.4");
}

원하는 역량의 중요한 역할

  • 'DesiredCapabilities'는 사용자가 서버와의 세션 요청을 제어하는 ​​데 도움이 됩니다. 예를 들어, iOS 세션의 경우 platformName = iOS로 설정하고, 다른 플랫폼 세션의 경우 다른 플랫폼으로 설정합니다. Android 세션 플랫폼 이름 = Android.
  • 'DesiredCapabilities'는 WebDriver 인스턴스를 설정하는 데 사용됩니다. 예를 들어 Firefox드라이버, ChromeDriver 또는 InternetExplorerDriver.
  • DesiredCapability는 다음과 같은 경우에 매우 유용합니다. Selenium 그리드는 예를 들어 서로 다른 브라우저와 운영 체제에서 서로 다른 테스트 케이스를 실행하는 데 사용됩니다. 명시된 기능에 따라 그리드 허브는 해당 노드를 가리킵니다. 노드는 'set' 속성 메서드를 사용하여 정의됩니다.
    DesiredCapabilities obj = new DesiredCapabilities(); 
    obj.setBrowserName("firefox"); 
    obj.setVersion("18.0.1"); 
    obj.setPlatform(org.openqa.selenium.Platform.WINDOWS);					
    
  • 원하는 기능(DesiredCapabilities)은 라이브러리에서 정의된 패키지입니다. 'DesiredCapabilities'를 사용하기 전에 아래 라이브러리에서 가져와야 합니다.
    Org.openqa.selenium.remote.DesiredCapabilities

Appium 둘 다 지원 Android 그리고 iOS도 있으므로 별도의 설정 세트가 있습니다. Appium 각 플랫폼별 서버 기능.

아래 표는 일반적으로 사용되는 몇 가지를 보여줍니다. Android 역량과 활용해야 할 값들.

기능 기술설명 가치/용도
앱 패키지 원하는 것을 전화하세요 Java 포장하다 Android 사용자가 실행하고자 하는 것

값= com.example.myapp/

Obj.setCapability("appPackage", "com.whatsapp");

앱 활동 사용자가 패키지에서 실행하고자 하는 애플리케이션 활동입니다.

값= MainActivity, .Settings

Obj.setCapability("appActivity", "com.whatsapp.Main");

앱WaitPackage 애플리케이션이 기다려야 하는 패키지 값=com.example.android.myapp
앱대기활동 모든 품종 Android 사용자가 기다려야 하는 활동

값= 스플래시액티비티

Capability.setCapability("appWaitActivity", "com.example.game.SplashActivity")

참고: 다음을 참조하십시오. Appium 선적 서류 비치 더 보려면 Android 기능.

아래 표는 일반적으로 사용되는 iOS 기능과 사용해야 할 값을 보여줍니다.

기능 기술설명 마케팅은:
실행 시간 초과 계측을 기다리는 총 시간(ms)입니다. 2000
UDID 연결된 물리적 장치의 고유 장치 번호를 식별하기 위해 166애스투4

참고: 다음을 참조하십시오. Appium 역량 가이드 iOS의 더 많은 기능을 보려면 클릭하세요.

원하는 역량은 어떻게 변화했는가 Appium 2

위의 예시들은 다음에서 가져온 것입니다. Appium 한 시대였고 여전히 기능 세트의 형태를 보여주지만 두 가지 규칙이 바뀌었고 둘 다 최신 세션 시작을 막을 것입니다.

첫째, W3C WebDriver 사양은 표준 기능 중 일부만을 정의하고 있습니다. platformName browserName 여기서 중요한 것은 다른 모든 기능은 공급업체 확장 기능이며 콜론으로 끝나는 네임스페이스 접두사를 포함해야 한다는 점입니다. Appium's 접두사는 appium:. 그래서 deviceName 된다 appium:deviceName platformVersion 된다 appium:platformVersion. Appium 2번도 필요합니다 appium:automationName드라이버가 서버에 포함되어 있지 않고 별도로 설치되기 때문입니다.

둘째, 접두사를 반복하는 것은 지루해지므로 Appium 단일 수락 appium:options 객체 값을 갖는 기능입니다. 해당 객체 내의 기능에는 접두사가 필요하지 않으며, 이름이 객체 내부와 외부에 모두 나타나는 경우 내부 값이 우선합니다.

{
    "platformName": "iOS",
    "appium:options": {
        "automationName": "XCUITest",
        "platformVersion": "16.0",
        "app": "/path/to/your.app",
        "deviceName": "아이폰 12",
        "noReset": true
    }
}

⚠️ 버전 참고: 를 시청하여 이에 대해 더 많은 정보를 얻을 수 있습니다. Java 측면, Selenium 4 및 Appium Java 클라이언트 8은 더 이상 사용하지 않습니다. DesiredCapabilities 앞서 보여준 클래스. 드라이버별 빌더는 상속받은 것에서 파생됩니다. BaseOptions 교체하세요 — UiAutomator2Options 을 통한 Android XCUITestOptions iOS용 - 1:1 지도 지원ping 각각의 오래된 것에서 setCapability 호출. 위의 원래 코드는 역사적 예시로 여기에 보관되어 있습니다.

Extrac패키지 및 액티비티 정보

패키지는 파일이나 클래스를 묶어 놓은 것입니다. 패키지는 모듈식 프로그래밍에 체계적인 구조를 제공합니다. Java여러 패키지가 하나의 JAR 파일에 저장되고, 사용자는 해당 JAR 파일을 호출하여 전체 내용을 실행할 수 있습니다. 모바일 애플리케이션 개발에서도 이와 유사한 개념이 적용됩니다.

. Android 운영 체제에서 모든 응용 프로그램은 다음과 같은 형태로 설치됩니다. Java 패키지입니다. 예를 들면,tract 패키지 경로 정보, Android PackageManager 클래스가 사용됩니다.

이 기능은 기기에 사전 설치된 애플리케이션과 사후 설치된 애플리케이션의 패키지 및 활동 정보를 검색합니다.

getPackageManager() 메서드를 호출하여 PackageManager 클래스의 인스턴스를 얻을 수 있습니다. 이 메서드를 통해 설치된 애플리케이션의 패키지 및 관련 권한에 접근하고 조작할 수 있습니다.

예 :

PackageManager pManager = getPackageManager();
List<ApplicationInfo> list = pManager.getInstalledApplications(PackageManager.GET_META_DATA)

adb를 사용하여 appPackage와 appActivity를 찾는 방법

위의 PackageManager 경로는 애플리케이션 내부에서 작동합니다. 테스터는 일반적으로 설치된 빌드만 가지고 있으므로, 더 빠른 방법은 쿼리를 사용하는 것입니다. ADB 연결된 장치 또는 에뮬레이터에 대해.

기기에서 애플리케이션을 수동으로 실행한 다음, platform-tools 폴더의 터미널에서 아래 명령 중 하나를 실행하세요. 이 명령은 현재 포커스가 있는 창을 출력하며, 값은 다음과 같은 형식으로 표시됩니다. package/activity.

adb shell dumpsys window | find "mCurrentFocus"
adb shell dumpsys window windows | grep -i "mCurrentFocus"

첫 번째 양식을 사용하세요 Windows 첫 번째는 명령 프롬프트에서, 두 번째는 유닉스 셸 또는 Git Bash에서 실행합니다. 결과를 두 부분으로 나누어 읽으세요. 슬래시(/) 앞의 내용이 해당 값입니다. appPackage그리고 그 이후의 모든 것은 값입니다. appActivity.

두 가지 주의 사항이 있습니다. 우선, 초점이 맞춰진 활동은 그 순간 화면에 표시되는 활동이며, 이는 애플리케이션이 시작될 때의 활동과 항상 일치하는 것은 아닙니다. 드라이버 초기화 중에 세션이 실패하면 앱을 새로 실행하고 값을 다시 읽어야 합니다. 또한, 스플래시 화면이 먼저 나타나는 경우, 진입 활동은 최종적으로 검증하려는 활동과 다를 수 있으며, 이는 바로 그러한 경우입니다. appWaitActivity 존재한다.

시각적인 대안은 다음과 같습니다. uiautomator뷰어현재 화면 계층 구조를 캡처하여 각 노드의 패키지와 클래스를 표시합니다.

일반적인 요구 기능 오류 및 해결 방법

대부분 실패했다 Appium 테스트 단계가 하나도 실행되기 전에 세션이 종료되는 경우가 있는데, 그 원인은 거의 항상 테스트 자체보다는 기능 세트에 있습니다. 아래 표는 각 메시지에 대한 일반적인 해결 방법을 보여줍니다.

메시지 가능한 원인 수정
유효하지 않거나 지원되지 않는 WebDriver 기능 비표준 기능이 벤더 접두사 없이 전송되었습니다. 앞에 `appium:`을 붙이거나, `appium:options` 안으로 옮기세요.
원하는 기능에는 automationName 또는 platformName 중 하나가 반드시 포함되어야 합니다. Appium 2는 운전자를 선택할 수 없습니다. platformName과 appium:automationName을 명시적으로 설정하세요.
앱을 시작할 수 없습니다. 원래 오류: 앱을 시작하는 데 사용된 액티비티가 존재하지 않습니다. appActivity가 매니페스트와 일치하지 않습니다. 위의 dumpsys 명령어를 사용하여 값을 다시 읽어보세요.
세션이 시작되지 않았습니다: 장치를 찾을 수 없습니다 에뮬레이터나 핸드셋이 연결되어 있지 않습니다. 실행하기 전에 adb devices 명령어로 장치를 확인하세요.
타임아웃 이후에는 새 세션을 생성할 수 없습니다. 스플래시 화면은 진입 활동을 지연시킵니다. appWaitActivity를 설정하고 appWaitDuration을 증가시키세요
실행 간에 애플리케이션 상태가 초기화되지 않습니다. 기본 재설정 동작이 재정의되었습니다. Rev원하는 실행에 대해 `appium:noReset`과 `appium:fullReset`을 살펴보세요.

세션이 시작되지 않으면 다음을 읽어보세요. Appium 클라이언트 스택이 아닌 서버 로그 trace. 서버는 충족할 수 없었던 기능을 명시하고, 해당 줄에는 해결 방법이 나와 있습니다.

자주 묻는 질문

아니요. platformName과 browserName은 W3C 표준 기능이며 접두사 없이 그대로 사용됩니다. 다른 모든 것은 Appium deviceName 및 platformVersion을 포함한 기능은 공급업체 확장 기능이며 appium: 접두사가 필요합니다.

디바이스 클라우드의 머신 러닝 도구는 빌드 및 대상 디바이스에서 기능 세트를 제안하고 유사한 세션에서 실패한 값을 표시합니다. 출력 결과를 초안으로 간주하고 드라이버 설명서와 대조하여 각 이름을 확인하십시오.

Copilot은 일반적인 기능 블록을 완료했지만, 훨씬 더 많은 것을 기반으로 훈련되었습니다. Appium 1번 코드는 종종 접두사를 생략하거나 더 이상 사용되지 않는 DesiredCapabilities 클래스를 제안합니다. 각 제안 사항을 최신 지침과 비교하여 확인하십시오.

appPackage는 패키지 이름을 지정합니다. Appium 실행됩니다. appWaitPackage는 패키지 이름을 지정합니다. Appium 실행 화면이나 스플래시 화면이 다른 패키지를 먼저 로드하는 경우, 제어권을 반환하기 전에 화면이 나타날 때까지 기다립니다.

platformName을 iOS로, appium:automationName을 XCUITest로 설정해야 합니다. XCUITest 드라이버는 appium:app, appium:bundleId 또는 browserName 중 하나 이상을 필요로 하며, 그렇지 않으면 홈 화면에서 세션을 엽니다.

서버가 클라이언트의 다음 명령 전송을 기다리는 시간(초)입니다. 이 대기 시간을 초과하면 서버는 클라이언트가 연결을 끊었다고 판단하고 세션을 종료합니다. 이는 종종 임의의 오류처럼 보일 수 있습니다.

noReset은 일반적인 초기화 과정을 건너뛰어 앱 데이터가 세션 동안 유지되도록 합니다. fullReset은 재현성을 극대화하기 위해 앱 제거 후 재설치하는 추가 단계를 포함합니다. 두 옵션 모두 기본값은 false이며, 함께 사용해서는 안 됩니다.

아니요. 기능은 세션을 시작하기 위한 매개변수이며, 세션이 생성되면 고정됩니다. 드라이버가 세션 도중에 동작을 변경할 수 있도록 하려면 설정 API를 통해 설정을 노출합니다.

이 게시물을 요약하면 다음과 같습니다.