学习 DesiredCapabilities

DesiredCapabilities简介

Desired Capabilities 携带了一些配置信息,在启动session的时候是必须提供,如启动模式、apk/app配置、package/activity配置、浏览器配置、键盘配置等。

Desired Capabilities关键字

Desired Capabilities的重要作用是在启动时传递信息给Appium Server。

下表中列举了Appium常用的 Desired Capabilities 关键字。

关键字 描述 实例
platformName 手机操作系统 iOS,Android,FirefoxOS
platformVersion 手机操作系统版本 例如: 7.1, 4.4
deviceName 手机类型或模拟器类型 iPhone Simulator, iPad Simulator, Android Emulator, Galaxy S4等。在 iOS 上,这个关键字的值必须是使用 instruments -s devices 得到的可使用的设备名称之一。在 Android 上,这个关键字目前不起作用。
app .ipa 或者 .apk(也可以使是包含他们的zip)文件所在的本地绝对路径或者远程路径 Appium会先尝试安装路径对应的应用在适当的真机或模拟器上。针对Android系统,如果你指定app-package和app-activity(具体见下面)的话,那么就可以不指定app。
browserName 需要进行自动化测试的手机 web 浏览器名称。如果是对应用进行自动化测试,这个关键字的值应为空。 iOS 系统上可以用 ‘Safari‘ ,Android 系统上可以用 ‘Chrome‘, ‘Chromium‘, 或 ‘Browser‘。
automationName 自动化测试引擎 Appium,Selendroid
appActivity 要从应用包中启动的 Android Activity 名称。 它通常需要在前面添加 . (如:使用.MainActivity 而不是 MainActivity) MainActivity, .Settings
appPackage 你想运行的Android应用的包名 比如com.example.android.myApp
appWaitActivity 你想要等待启动的 Android Activity 名称 SplashActivity
unicodeKeyboard 是否在测试过程中切换到能支持多国语言输入的输入法 true 表示是,false 表示否
resetKeyboard 是否在测试完成后自动切换回原有输入法 true 表示是,false 表示否

Session简介

Session 是指我们的测试脚本从打开应用到最终执行完毕关闭应用的整个过程。

对于测试脚本,从申请到退出一个 session 的整个过程如下:

public class DemoWithoutJunit{

    public static void main(String[] args) throws MalformedURLException{
        ...
        // 打开应用,也可以称为 “申请一个 session”
        AndroidDriver driver = new AndroidDriver<>(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);

        // 此处的所有代码处于一个 session 中。
        ...

        // 关闭应用,也可以称为 “退出一个 session”
        driver.quit();

Desired Capabilities使用

现在,我们来尝试通过设置 Desired Capabilities 安装并启动指定的应用。

第一步,记录下我们的 apk 的绝对路径。例如 C:\test.apk

使用 windows 的同学请留意:在 Java 代码中 \\ 才代表一个反斜杠符号。因此在后续的代码中上面的 C:\test.apk 应该写成 C:\\test.apk

第二步,首先,我们在 Eclipse 里面新建一个带有 main 方法的类(勾选“public static void main(String[] args)”),类名为 OpenAndCloseApplication。如无意外,建立后的文件内容应该如下:\

public class OpenAndCloseApplication {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

    }

}

第三步,在 main 方法中设置 Desired Capabilities ,让脚本知道我们将要在什么环境下测试什么应用:

import org.openqa.selenium.remote.DesiredCapabilities;
import io.appium.java_client.android.AndroidDriver;
...

    public static void main(String[] args) {
        DesiredCapabilities capabilities = new DesiredCapabilities();

        capabilities.setCapability("deviceName", "Android Device");
        capabilities.setCapability("platformName", "Android");
        capabilities.setCapability("platformVersion", "4.4");
        capabilities.setCapability("app","你的 apk 绝对路径");

    }

第四步,加入打开应用及关闭应用的相关代码:

        ...
        capabilities.setCapability("platformVersion", "4.4");
        capabilities.setCapability("app","你的 apk 绝对路径");

        // 根据 Desired Capabilities 打开应用
        AndroidDriver driver = new AndroidDriver<>(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);

        // 什么都不做,程序暂停5秒
        Thread.sleep(5000);

        // 关闭应用
        driver.quit();
    }

现在,把你的手机接到电脑或启动安卓模拟器,按照上一章要求启动 appium server ,然后试试运行这个代码,看会发生什么?