Appium 学习笔记

what's appium?

Appium是一个自动化测试开源工具,支持iOS和android平台上的移动原生应用、移动Web应用和混合应用。Appium是一个跨平台工具,它允许测试人员使用同样的接口、基于不同的平台写自动化测试代码,大大增加了测试套件间代码的复用性。

  • 移动原生应用:是指那些用iOS或者android sdk写的应用;
  • 移动web应用:是指那些使用移动浏览器访问的应用,appium支持iOS的safari和android上的chrome;
  • 混合应用:是指原生代码封装在网页视图(原生代码和web内容交互)。

背景

最近在写一个社交账号监控平台,用来监控指定好友的日常状态。考虑到多数社交平台的移动端功能更多,所以研究了一下 Appnium 这个软件。

之前写过几篇跟 WebDriver 有关的文章,Appnium 使用了 WebDriver 协议,所以很多地方你都能看到 WebDriver 的影子,学过 WebDriver 系列的更容易上手。

准备

  1. Appnium Desktop
  2. Android SDK
  3. Appnium Java Client

使用 Appnium 首先要安装它的 Server 端,我用的是 1.8 版本。
可以去官网或者Github下载 appium.io

Android sdk 下载好了 添加到 一个变量 ANDROID_HOME,然年把 /tools 和 /platform-tools 目录添加到 PATH 变量里

在 Maven 添加两个依赖

        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>LATEST</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>io.appium</groupId>
            <artifactId>java-client</artifactId>
            <version>LATEST</version>
        </dependency>

这个地方有个坑,selenium 和 appnium 版本要对应,不然会有异常。

Demo

先开启服务

1.png

然后手机连接电脑开启开发模式,或者启动 Android 模拟器。

输入命令 adb devices

List of devices attached
emulator-5554   device

emulator-5554 就是 deviceName。

然后这里我演示一下打开 QQ 然后模拟登录的过程。

过程:打开 APP > 点击登录 > 清空账号密码 > 输入账号密码 > 登录

打开 APP 需要 应用包名、activity名、device名。

device设备名称已经通过 adb 拿到了。

现在在模拟器上打开 QQ 。然后 在输入adb命令

adb shell dumpsys window w |findstr \/ |findstr name=

      mSurface=Surface(name=com.tencent.mobileqq/com.tencent.mobileqq.activity.LoginActivity)

com.tencent.mobileqq 是包名 com.tencent.mobileqq.activity.LoginActivity 是activity名。

最后需要获取 APP 中元素的 ID。

这里可以通过 Android SDK 中 tools 目录的 uiautomatorviewer 来获取。

1550743621(1).jpg

代码:

    public static void main(String[] args) throws MalformedURLException {

        AndroidDriver appium = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"),
                genCap("emulator-5554", "4.4.2", "com.tencent.mobileqq", "com.tencent.mobileqq.activity.SplashActivity", "com.tencent.mobileqq.activity.LoginActivity"));


        appium.findElementById("com.tencent.mobileqq:id/btn_login").click(); //点击登录按钮

        List<WebElement> e = appium.findElementsByClassName("android.widget.EditText");
        WebElement user = e.get(0); // 获取账号输入框
        WebElement pass = e.get(1); // 获取密码输入框
        user.clear();
        pass.clear();
        user.sendKeys("****"); //输入内容
        pass.sendKeys("****");

        appium.findElementById("com.tencent.mobileqq:id/login").click(); //点击登录按钮

    }

public static DesiredCapabilities genCap(String deviceName, String platformVersion, String appPackage, String appActivity, String appWaitActivity) throws MalformedURLException {

        DesiredCapabilities cap = new DesiredCapabilities();
        cap.setCapability(CapabilityType.BROWSER_NAME, "");
        cap.setCapability("platformName", "Android"); //指定测试平台
        cap.setCapability("deviceName", deviceName); //指定测试机的ID,通过adb命令`adb devices`获取
        cap.setCapability("platformVersion", platformVersion);
        //将上面获取到的包名和Activity名设置为值
        cap.setCapability("appPackage", appPackage);
        cap.setCapability("appActivity", appActivity);

        //A new session could not be created的解决方法
        cap.setCapability("appWaitActivity",appWaitActivity);
        //每次启动时覆盖session,否则第二次后运行会报错不能新建session
        cap.setCapability("sessionOverride", true);
        return cap;
    }

发表留言

如未标注转载则文章均为本人原创,转载前先吱声,未授权转载我就锤爆你狗头。

人生在世,错别字在所难免,无需纠正。