WebDriver 프로토콜을 준수하는 Appium 테스트를 작성하기 위한 Java 언어 바인딩입니다.
v9부터 클라이언트는 Java 11 이상만 지원합니다. v8에서 v9로의 마이그레이션 가이드를 따라 마이그레이션 프로세스를 간소화하세요.
버전 8부터 Appium Java Client에는 몇 가지 주요 변경 사항이 있어 클라이언트 코드를 업데이트해야 할 수도 있습니다. 마이그레이션 프로세스를 간소화하려면 v7에서 v8로의 마이그레이션 가이드를 따르세요.
pom.xml에 다음을 추가합니다.
< dependency >
< groupId >io.appium</ groupId >
< artifactId >java-client</ artifactId >
< version >${version.you.require}</ version >
< scope >test</ scope >
</ dependency >
build.gradle에 다음을 추가합니다.
dependencies {
testImplementation ' io.appium:java-client:${version.you.require} '
}
Java 클라이언트 프로젝트는 Maven Central에 공식적으로 게시되기 전에도 사용할 수 있습니다. jitpack.io 참조
pom.xml에 다음을 추가합니다.
< repositories >
< repository >
< id >jitpack.io</ id >
< url >https://jitpack.io</ url >
</ repository >
</ repositories >
종속성을 추가합니다.
< dependency >
< groupId >com.github.appium</ groupId >
< artifactId >java-client</ artifactId >
< version >latest commit ID from master branch</ version >
</ dependency >
빌드 파일에 JitPack 저장소를 추가합니다. 저장소 끝의 루트 build.gradle에 추가하십시오.
allprojects {
repositories {
// ...
maven { url ' https://jitpack.io ' }
}
}
종속성을 추가합니다.
dependencies {
implementation ' com.github.appium:java-client:latest commit id from master branch '
}
Appium 자바 클라이언트 | 셀레늄 클라이언트 |
---|---|
9.2.1 (알려진 문제: #2145, #2146), 9.2.2 , 9.2.3 , 9.3.0 | 4.19.0 , 4.19.1 , 4.20.0 , 4.21.0 , 4.22.0 , 4.23.0 |
9.1.0 , 9.2.0 | 4.17.0 , 4.18.0 , 4.18.1 |
9.0.0 | 4.14.1 , 4.15.0 , 4.16.0 (부분적으로 손상됨), 4.16.1 |
해당 없음 | 4.14.0 |
8.5.0 , 8.5.1 , 8.6.0 | 4.9.1 , 4.10.0 , 4.11.0 , 4.12.0 , 4.12.1 (알려진 문제: #2004), 4.13.0 |
8.4.0 | 4.8.2 , 4.8.3 , 4.9.0 |
8.3.0 | 4.7.0 , 4.7.1 , 4.7.2 , 4.8.0 , 4.8.1 |
8.2.1 | 4.5.0 , 4.5.1 , 4.5.2 , 4.5.3 , 4.6.0 |
Selenium 클라이언트는 의미 체계 버전 관리를 따르지 않으므로 패치에서도 주요 변경 사항이 도입될 수 있으며, 이에 대응하여 Appium 팀은 Java 클라이언트를 업데이트해야 합니다.
Appium Java Client는 다양한 빌드 도구에서 다르게 처리되는 공개 버전 범위를 사용하여 Selenium 종속성을 선언합니다. 때때로 사용자는 다양한 이유로 사용된 Selenium 종속성을 고정하려고 할 수 있습니다. Java 테스트 프레임워크에 대한 고정 Selenium 버전 설정에 대한 자세한 내용은 전이적 종속성 관리 문서를 참조하세요.
Appium Java 클라이언트에는 다음 Appium 드라이버를 지원하는 전용 클래스가 있습니다.
위에 나열되지 않은 다른 플랫폼을 자동화하려면 AppiumDriver 또는 해당 사용자 정의 파생물을 사용할 수 있습니다.
Appium Java 클라이언트는 Selenium을 기반으로 구축되었으며 RemoteWebDriver 기반과 동일한 인터페이스를 구현합니다. 그러나 Selenium lib는 대부분 웹 브라우저 자동화에 중점을 두는 반면 Appium은 보편적이며 모바일 및 데스크톱 운영 체제, IOT 장치 등 다양한 플랫폼을 포괄합니다. 따라서 이 패키지의 기본 AppiumDriver
클래스는 RemoteWebDriver
추가 기능으로 확장합니다. , 보다 유연하게 만들어 웹 브라우저 관련 작업에만 엄격하게 집중하지 않습니다.
Appium Java 클라이언트는 Appium 서버 실행을 제어하는 전용 클래스를 제공합니다. 클래스는 AppiumDriverLocalService입니다. 테스트 프레임워크 코드에서 로컬로 Appium 서버를 실행하고 확인할 수 있으며 몇 가지 편리한 바로 가기를 제공합니다. 해당 서비스는 아래와 같이 사용할 수 있습니다.
AppiumDriverLocalService service = AppiumDriverLocalService . buildDefaultService ();
service . start ();
try {
// do stuff with drivers
} finally {
service . stop ();
}
예를 들어 사용자 정의 명령줄 인수를 제공하거나 AppiumServiceBuilder를 사용하여 서버 실행 파일에 대한 경로를 변경하는 등 서비스 동작을 사용자 정의할 수 있습니다.
메모
AppiumDriverLocalService는 로컬이 아닌 호스트에서 서버 관리를 지원하지 않습니다.
UiAutomator2Options options = new UiAutomator2Options ()
. setUdid ( "123456" )
. setApp ( "/home/myapp.apk" );
AndroidDriver driver = new AndroidDriver (
// The default URL in Appium 1 is http://127.0.0.1:4723/wd/hub
new URL ( "http://127.0.0.1:4723" ), options
);
try {
WebElement el = driver . findElement ( AppiumBy . xpath ( "//Button" ));
el . click ();
driver . getPageSource ();
} finally {
driver . quit ();
}
XCUITestOptions options = new XCUITestOptions ()
. setUdid ( "123456" )
. setApp ( "/home/myapp.ipa" );
IOSDriver driver = new IOSDriver (
// The default URL in Appium 1 is http://127.0.0.1:4723/wd/hub
new URL ( "http://127.0.0.1:4723" ), options
);
try {
WebElement el = driver . findElement ( AppiumBy . accessibilityId ( "myId" ));
el . click ();
driver . getPageSource ();
} finally {
driver . quit ();
}
BaseOptions options = new BaseOptions ()
. setPlatformName ( "myplatform" )
. setAutomationName ( "mydriver" )
. amend ( "mycapability1" , "capvalue1" )
. amend ( "mycapability2" , "capvalue2" );
AppiumDriver driver = new AppiumDriver (
// The default URL in Appium 1 is http://127.0.0.1:4723/wd/hub
new URL ( "http://127.0.0.1:4723" ), options
);
try {
WebElement el = driver . findElement ( AppiumBy . className ( "myClass" ));
el . click ();
driver . getPageSource ();
} finally {
driver . quit ();
}
해당 드라이버의 README를 확인하여 드라이버가 지원하는 기능 목록을 확인하세요.
클라이언트의 단위 및 통합 테스트를 확인하면 더 많은 코드 예제를 찾을 수 있습니다.
Appium Java 클라이언트는 다른 모듈의 비공개 멤버에 대한 반사 액세스를 사용하여 페이지 개체 모델과 같은 여러 기능의 적절한 기능을 보장합니다. 런타임 예외가 발생하고 스택 추적에 InaccessibleObjectException
있고 Java 런타임이 버전 16 이상인 경우 다음 Oracle 튜토리얼을 고려하거나 기존 문제에서 가능한 해결 방법을 확인하는 것을 고려하십시오. --add-exports/--add-opens
명령줄 인수를 사용하여 특정 모듈에 대한 액세스를 명시적으로 허용하려는 아이디어입니다.
가능하지만 권장되지 않는 또 다른 해결책은 Java를 버전 15 이하로 다운그레이드하는 것입니다.
이러한 문제는 일반적으로 Appium 서버가 스크립트에 의해 별도로 실행되거나 수동으로 실행되지 않고 프레임워크 코드에서 직접 시작되는 경우에 발생합니다. 서버 프로세스가 시작되는 방식에 따라 현재 활성 쉘 환경을 상속할 수도 있고 상속하지 않을 수도 있습니다. 이것이 바로 변수가 명령줄 해석기에 정의되어 있어도 변수 존재에 대한 오류가 계속 나타날 수 있는 이유입니다. 다시 말하지만, 새로운 서버 프로세스를 가동하는 방법은 다양하므로 이에 대한 보편적인 해결책은 없습니다. 프로세스 환경 문제를 디버깅하고 해결하는 방법에 대한 자세한 내용은 Appium 환경 문제 해결 문서를 확인하는 것이 좋습니다.
버전 간 변경 사항 전체 목록을 보려면 CHANGELOG.md를 방문하세요.
다음을 사용하여 테스트 실행
gradle clean -Dtest.single=IOSAlertTest 테스트