这是用于编写符合 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 | 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.1 4.16.0 |
不适用 | 4.14.0 |
8.5.0 8.5.1 8.6.0 | 4.9.1 (已知问题4.12.1 4.10.0 2004 4.13.0 4.11.0 4.12.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 客户端使用开放版本范围声明 Selenium 依赖项,不同的构建工具会以不同方式处理该版本范围。有时,用户可能出于各种原因想要固定使用的 Selenium 依赖项。请关注传递依赖管理文章,了解有关为 Java 测试框架建立固定 Selenium 版本的更多信息。
Appium java 客户端有专用的类来支持以下 Appium 驱动程序:
要自动化上面未列出的其他平台,您可以使用 AppiumDriver 或其自定义衍生产品。
Appium java 客户端构建在 Selenium 之上,并实现与基础 RemoteWebDriver 相同的接口。然而,Selenium lib 主要专注于 Web 浏览器自动化,而 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 ();
}
检查相应驱动程序的自述文件以了解其支持的功能和特性列表。
您可以通过检查客户端的单元和集成测试找到更多代码示例。
Appium Java 客户端使用对其他模块的私有成员的反射访问来确保多个功能(例如页面对象模型)的正常功能。如果您收到运行时异常并且堆栈跟踪中存在InaccessibleObjectException
并且您的 Java 运行时版本为 16 或更高版本,请考虑以下 Oracle 教程和/或检查现有问题以获取可能的解决方案。其想法是使用--add-exports/--add-opens
命令行参数显式允许访问特定模块。
另一种可能但不建议的解决方案是将 Java 降级到版本 15 或更低版本。
当 Appium 服务器直接从框架代码启动而不是通过脚本或手动单独运行时,通常会出现此类问题。根据服务器进程的启动方式,它可能继承也可能不继承当前活动的 shell 环境。这就是为什么即使这些变量是为命令行解释器定义的,您仍然可能会收到有关变量存在的错误。同样,没有通用的解决方案,因为有很多方法可以启动新的服务器进程。请考虑查看 Appium 环境故障排除文档,以获取有关如何调试和修复进程环境问题的更多信息。
访问 CHANGELOG.md 查看版本之间更改的完整列表。
使用运行测试
gradle clean -Dtest.single=IOSAlertTest 测试