Appium 集成
与 Appium 的集成使您能够利用 UFT Mobile 的功能运行 Appium 脚本。
准备环境
要准备运行自动化 Appium 测试的环境,需要配置工作环境(如 Visual Studio 或 Eclipse)以识别 Appium 项目。

要使用 Appium 设置 ”Visual Studio“ 环境,请执行以下步骤:
- 创建在 Visual Studio 中的新单元测试项目。
- 右键单击解决方案资源管理器中的”引用“,然后选择”添加管理 Nuget 包“。
- 搜索(对于 Appium Webdriver),然后单击”安装“。这将更新引用以包括 Appium 驱动程序。
- 搜索表示“Selenium WebDriver”,然后单击”安装“。这将更新引用以包括 Selenium 驱动程序。
- 实例化 Appium Web 驱动程序。
- 按 UFT Mobile Appium 功能 中所述设置所需的功能。

要设置 ”Eclipse“ 环境,请执行以下步骤:
-
下载以下项的最新归档文件:
-
Selenium WebDriver Java 客户端
-
用于 Appium Mobile WebDriver 的 Java 客户端
-
- 提取下载的归档文件的内容。
- 在 Eclipse 中,选择 Appium 项目,然后从右键菜单中选择”选择属性“。
- 单击(位于 ” Java 内部版本路径“节点上),然后选择”库“选项卡。
-
在”添加外部 JAR “ 上单击并添加下载的 JAR,一次一个:
-
从 Selenium Java 客户端下载中提取的 ”Java-client“jar 文件
-
提取的 Selenium 客户机下载的”libs“文件夹中的 jar 文件
-
从 Java - Client for Appium 下载中提取的 ”Java-client“jar 文件
-
- 单击”确定“以关闭属性对话框。
准备 Appium 测试
准备要在 UFT Mobile 上运行的 Appium 测试:
-
在启动会话的代码中,使用以下格式将 Appium 服务器 URL 和端口替换为 URL 和端口 UFT Mobile (有关示例,请参见下文):
driver = new Android驱动程序(newURL("http://<my UFT Mobile服务器>:<port>/wd/hub"),capabilities);
driver = new IOSDriver (newURL(" http: //< my UFT Mobile服务器>:<port>/wd/hub"),capabilities);
-
通过将个应用程序上载到 UFT Mobile,使其可用于测试。有关详细信息,请参阅 管理个应用程序。
”注意:“在 iOS 设备上安装个应用程序不需要 Mac 计算机。
Appium 脚本执行
运行 Appium 测试时应考虑以下准则:
-
匿名运行 Appium 测试时,会将用户分配到默认工作区。有关详细信息,请参阅 实验室和工作区管理。备注表明 LDAP 不支持 Appium 匿名访问。
-
Linux 和 Windows 不支持 Safari 驱动程序。
-
在 Windows 上,Appium V2 不支持 Node.js 的全局安装,这将导致使用 Appium V2 运行的测试失败。
-
通过 UFT Mobile 运行 Appium 测试时,可以指示在脚本执行期间使用的自动化方法。
iOS UFT Mobile 使您可以在 iOS 设备上运行测试,而无需使用 Mac 计算机。用于 iOS 的默认自动化方法是 XCUITest。 如果明确要使用 UIA 自动化,请将 ”automationName“ Appium 功能 设置为 ”uiAutomation“。此功能仅适用于 iOS 版本 9.3 到 11.1。在 11.1 以上的 iOS 版本中,不支持该功能,所有测试都将使用 XCUITest。
AndroidOS.0 及更高版本 UiAutomator2 是默认的自动化引擎。uiAutomator2 驱动程序使用 Google 的 UiAutomator2 技术在设备或仿真器上实现自动化。要覆盖默认值并使用 UiAutomator1,请将 ”automationName“ Appium 功能 设置为" android"。 AndroidOS< 5.0 UiAutomator1(“Android”)是 AndroidOS< 5.0 的默认值。只能将 UiAutomator1 用作自动化引擎。
将 Appium 与 SSL 配合使用
要使用 Appium 和 UFT Mobile 使用 SSL,Appium 客户端需要信任 UFTM 证书。如果 SSL 证书未经已知证书颁发机构签名,则可以导出 UFTM 证书并配置 Appium 客户端以信任它(推荐),或者配置客户端以忽略 SSL 警告。有关导出证书的详细信息,请参见 使用 SSL 和证书。
Appium 设置代码段
以下代码段显示 Androidnative 个应用程序、Chrome、iOSnative 个应用程序和 iOSSafari 的示例设置。必须填写粗体行。
有关 UFT Mobile 中的常用功能及其支持的列表,请参见 UFT Mobile Appium 功能。
”重要信息:“ 这些代码段使用 Java 客户端 v7.x。如果计划使用 v8 或更高版本,请参阅 github 上的 Java-Client 官方迁移指南 。有关其他代码示例,请参见 UFTM github 存储库。

DesiredCapabilities = new DesiredCapabilities ();
abilities.setCapability (" platformName" ,"Android");
abilities.setCapability (" oauthClientId" ," oauth2-...");
abilities.setCapability (" oauthClientSecret" ," ke1SUI…");
abilities.setCapability (" appPackage" ," com.Advantage.aShopping");
abilities.setCapability (" appActivity" ," com.Advantage.aShopping.SplashActivity");

DesiredCapabilities = new DesiredCapabilities ();
abilities.setCapability (" platformName" ,"Android");
abilities.setCapability (" oauthClientId" ," oauth2-...");
abilities.setCapability (" oauthClientSecret" ," ke1SUI…");
abilities.setCapability (" browserName" ," chrome");

DesiredCapabilities = new DesiredCapabilities ();
abilities.setCapability (" platformName" ,"iOS");
abilities.setCapability (" oauthClientId" ," oauth2-...");
abilities.setCapability (" oauthClientSecret" ," ke1SUI…");
abilities.setCapability (" bundle Id" ," com.Advantage.aShopping");

DesiredCapabilities = new DesiredCapabilities ();
abilities.setCapability (" platformName" ,"iOS");
abilities.setCapability (" oauthClientId" ," oauth2-...");
abilities.setCapability (" oauthClientSecret" ," ke1SUI…");
abilities.setCapability (" browserName" ," safari");
有关其他代码示例,请参见 Appium 代码示例- Java 和 Appium 模拟。
常见 Appium API 调用
使用以下 Appium API 调用管理个应用程序。
终止应用程序
Kill API 调用将停止应用程序。它不只是最小化个应用程序,而是终止进程。脚本名称为 ”mc: application: kill“,必须使用以下参数之一:
-
”appPackage“(Android)或”bundleId“(iOS)
-
”id“ 或 ”uuid“,如 REST API 参考 UFT Mobile -应用程序安装/卸载中所使用。
appPackage | ”Androidonly“。 标识个应用程序的软件包名称,在个应用程序详细信息卡中显示为包 ID。例如 com.Advantage.aShopping |
bundle ID | ”仅 iOS“。 唯一标识符,个应用程序的 BundleID,在个应用程序详细信息卡中显示为包 ID。例如 com.mf.iShopping |
ID | 应用程序标识符(字符串)。例如: com.mf.iShopping。 |
uuid | 通用唯一标识符(UUID)。这是 UFT Mobile 分配的唯一应用程序特定 ID。例如,“bf441f2b - 3f16- 4bb5- 950d-4e3eaf2efffb”。 |
以下示例代码终止 AndroidAdvantage 个应用程序:
Map < String ,Object > params = new HashMap < String ,Object > ();
params.put (" appPackage" ," com.Advantage.aShopping");
appiumDriver.executeScript (" mc: application: kill" ,params);
以“params.put”开头的行可以替换为以下任一选项:
-
params.put (" bundle Id" ," com.mf.iShopping");
-
params.put (" uuid" ," bf441f2b-3f16- 4bb5- 950- 4e3eaf2efffb");
-
params.put (" id" ," com.Advantage.aShopping");
有关其他代码示例,请参见 Appium 代码示例- Java 和 Appium 模拟。
Network Virtualization 功能
有关如何在 Network Virtualization 中添加网络虚拟化功能的示例,请参考 UFT Mobile 帮助中心 。
检索 Appium 日志
在执行 Appium 测试期间会生成一个日志文件。
要检索日志,请使用 ”mc-wd: downloadLogs“ 脚本并指定编码。
当连接器收到此命令时,将检索当前 Appium 进程中所有会话的日志。将字符串附加到响应正文。
Appium 用户的测试代码使用响应正文中的字符串并相应地对其进行处理。
例如:
HashMap < String ,String > encoding = new HashMap < String ,String > ();
encoding.put (" encoding" ," UTF-8");
String logFileContents = (String)wd.executeScript (" mc-wd: downloadLogs" ,encoding);
有关其他代码示例,请参见 Appium 代码示例- Java 和 Appium 模拟。
并行测试
可以在 UFT Mobile 上运行并行 Appium 和 Selenium 测试。
您可以通过编码或使用配置项(持续集成)工具(如 Jenkins)来实现此目的。有关如何在 Jenkins 中运行并行测试的示例,请参见 Jenkins Wiki。
另请参见: