這是用於編寫符合 WebDriver 協定的 Appium 測試的 Java 語言綁定
從 v9 開始,客戶端僅支援 Java 11 及更高版本。請遵循 v8 到 v9 遷移指南來簡化遷移過程。
自從版本 8 Appium Java 用戶端以來,有幾項重大更改,這可能需要更新您的客戶端程式碼。請務必遵循 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 Java 用戶端 | 硒客戶端 |
---|---|
9.2.1 (已知問題: 9.2.3 2145、# 9.3.0 )、 9.2.2 |
|
|
|
9.0.0 | 4.14.1 4.15.0 部分損壞) 4.16.1 4.16.0 |
不適用 | 4.14.0 |
| 4.9.1 (已知問題4.12.1 4.10.0 2004 4.13.0 4.11.0 4.12.0 |
8.4.0 |
|
8.3.0 |
|
8.2.1 | |
Selenium 用戶端不遵循語義版本控制,因此即使在補丁中也可能會引入重大更改,這需要 Appium 團隊更新 Java 用戶端作為回應。
Appium Java 用戶端使用開放版本範圍宣告 Selenium 依賴項,不同的建置工具會以不同方式處理該版本範圍。有時,使用者可能會出於各種原因想要固定使用的 Selenium 依賴項。請關注傳遞依賴管理文章,以了解有關為 Java 測試框架建立固定 Selenium 版本的更多資訊。
Appium java 用戶端有專用的類別來支援以下 Appium 驅動程式:
若要自動化上面未列出的其他平台,您可以使用 AppiumDriver 或其自訂衍生產品。
Appium java 用戶端建構在 Selenium 之上,並實作與基礎 RemoteWebDriver 相同的介面。然而,Selenium lib 主要專注於 Web 瀏覽器自動化,而 Appium 是通用的,涵蓋了廣泛的可能平台,例如行動和桌面作業系統、 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 ();
}
檢查相應驅動程式的自述文件以了解其支援的功能和特性清單。
您可以透過檢查客戶端的單元和整合測試找到更多程式碼範例。
Appium Java 用戶端使用對其他模組的私有成員的反射存取來確保多個功能(例如頁面物件模型)的正常功能。如果您收到執行時期異常且堆疊追蹤中存在InaccessibleObjectException
且您的 Java 執行時間版本為 16 或更高版本,請考慮以下 Oracle 教學課程和/或檢查現有問題以取得可能的解決方案。其想法是使用--add-exports/--add-opens
命令列參數明確允許存取特定模組。
另一個可能但不建議的解決方案是將 Java 降級到版本 15 或更低版本。
當 Appium 伺服器直接從框架程式碼啟動而不是透過腳本或手動單獨執行時,通常會出現此類問題。根據伺服器進程的啟動方式,它可能繼承也可能不繼承目前活動的 shell 環境。這就是為什麼即使這些變數是為命令列解釋器定義的,您仍然可能會收到有關變數存在的錯誤。同樣,沒有通用的解決方案,因為有很多方法可以啟動新的伺服器進程。請考慮查看 Appium 環境故障排除文檔,以取得有關如何偵錯和修復進程環境問題的詳細資訊。
存取 CHANGELOG.md 查看版本之間變更的完整清單。
使用運行測試
gradle clean -Dtest.single=IOSAlertTest 測試