windows平台搭建appium自动化测试环境

前言

由于目前我们公司android测试还是纯手点 最近又闲的没事 领导让捣鼓下自动化测试 故研究研究

appium官网 appium.io/docs/en/2.1...

github github.com/appium/java...

阅读本文章 默认你了解android开发

如 android 环境 jdk 环境等 都不再赘述

如果 npm 由于网络问题无法访问 可使用 cnpm

一、 appium 服务端 安装

因为安装appium需要使用npm安装 所以需要先安装nodejs

nodejs.org/en/download

我们选windows平台的 .msi 后缀的 安装即可

安装完node后 打开 cmd 输入

npm i --location=global appium

npm 就会开始自动获取appium相关包

这里等待几分钟等appium安装完毕

出现下图所示表示安装成功

验证下 在 cmd 直接输入

appium

出现下图所示 表示appium服务启动成功

这个时候可以通过浏览器访问验证一下

http://127.0.0.1:4723

可以看到 如下提示 因为还没装驱动

{"status":9,"value":{"error":"unknown command","message":"The requested resource could not be found, or a request was received using an HTTP method that is not supported by the mapped resource","stacktrace":""}}

在 cmd 里 按 ctrl + c 退出服务 准备安装驱动

二、 安装 UiAutomator2 驱动

1. 准备环境

1) android sdk

可以在这里下载 sdk管理工具

Android SDK platform tools developer.android.com/studio/rele...

不过这里推荐直接安装 android studio 来管理 sdk

android studio developer.android.google.cn/studio?hl=z...

我这里 android studio 安装的sdk路径是

C:\Users\Administrator\AppData\Local\Android\Sdk

所以配置环境变量就是

ANDROID_HOME -> C:\Users\Administrator\AppData\Local\Android\Sdk

2) jdk

这里 appium 要求 最低 jdk 9

openjdk openjdk.org/install/

如果 android studio 会自带一个openjdk 的版本

3) 模拟器 或 真机

这里我用真机 并且 打开 开发者模式

2. UiAutomator2 驱动安装

在 cmd 里输入

appium driver install uiautomator2

出现如图所示 说明安装成功

这里安装的时候执行了20遍命令才安装成功,这里查了一波资料 只要网络没问题 感觉就是随缘吧 ~

3. 重启 appium 服务

appium

可以看到 已经装载了 uiautomator2 驱动

三、编写测试脚本

这里官方支持 多种语言编写脚本 js, Python, Java, Ruby 等

由于我是android开发 我这里就用java编写脚本了

java-client github.com/appium/java...

1. 新建测试项目

这里用 IDEA 新建一个 Java 项目 这里我使用jdk17 (官方说 最低支持到jdk 11) 使用maven依赖

2. 导入 java-client 依赖

引入jitpack

xml 复制代码
<repositories>

    <!--jitpack.io-->
    <repository>
        <id>jitpack.io</id>
        <url>https://jitpack.io</url>
    </repository>

</repositories>

依赖

xml 复制代码
<dependencies>

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


</dependencies>

这里最新版是9.0.0 这个包依赖有点多啊 耐心等待

3. 编写脚本

一个简单的案例 github.com/appium/java...

这里语法有点变动 但是文档好像还没更新 我重新写一个

java 复制代码
        //配置apk信息
        UiAutomator2Options options = new UiAutomator2Options()
                .setUdid("7XBNW18A26012407")//模拟器 或者 真机的 UDID
                .setApp(apkUrl) //你电脑上apk包的路径
                .setAppPackage("packageName") //包名
                .setAppActivity("packageName.HomeActivity");//启动页

        //配置android驱动 这里是手机连接到服务器的网络地址
        AndroidDriver driver = new AndroidDriver(new URL("http://127.0.0.1:4723"), options);

        //获取弹窗xml
        String dialogRes = driver.getPageSource();
        System.out.println("弹窗元素: "+dialogRes);

        //找元素 这里找 R.id.tv_confirm
        WebElement tv_confirm = driver.findElement(AppiumBy.id("packageName:id/tv_confirm"));

        //点击 R.id.tv_confirm
        tv_confirm.click();

        //重新获取页面xml
        String layoutRes = driver.getPageSource();
        System.out.println("页面元素: "+layoutRes);

        //找账号输入框
        WebElement et_login_account = driver.findElement(AppiumBy.id("packageName:id/et_login_account"));
        //焦点
        et_login_account.click();
        //输入账号
        et_login_account.sendKeys("123456@abc.com");
        //收起键盘
        driver.hideKeyboard();

        //设置显式等待 等待登录按钮出现
        WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10)); // 设置最大等待时间为10秒
        wait.until(ExpectedConditions.presenceOfElementLocated(AppiumBy.id("packageName:id/btn_login"))); // 等待下一个元素出现

        //找密码输入框
        WebElement et_login_password = driver.findElement(AppiumBy.id("packageName:id/et_login_password"));
        //焦点
        et_login_password.click();
        //输入密码
        et_login_password.sendKeys("1234qwer");
        //系统安全键盘 收起键盘无效 使用back
        driver.pressKey(new KeyEvent(AndroidKey.BACK));

        //设置显式等待 等待登录按钮出现
        WebDriverWait wait2 = new WebDriverWait(driver,  Duration.ofSeconds(10)); // 设置最大等待时间为10秒
        wait2.until(ExpectedConditions.presenceOfElementLocated(AppiumBy.id("packageName:id/btn_login"))); // 等待下一个元素出现

        //找登录按钮
        WebElement btn_login = driver.findElement(AppiumBy.id("packageName:id/btn_login"));
        //点击 登录按钮
        btn_login.click();

        //设置显式等待 等待设备列表刷新完成
        WebDriverWait wait3 = new WebDriverWait(driver,  Duration.ofSeconds(10)); // 设置最大等待时间为10秒
        wait3.until(ExpectedConditions.presenceOfElementLocated(AppiumBy.xpath("//*[@text='早上好']"))); // 等待下一个元素出现

        //结束脚本
        driver.quit();

这是一个 启动APP后 模拟输入 登录账户 然后等待首页数据刷新完成的脚本

  • 这里的 UDID 可以通过 adb devices -l 获取
  • AppiumBy.id("packageName:id/btn_login") 匹配id
  • AppiumBy.xpath("//*[@text='早上好']") 匹配文本
  • 获取元素定位 github.com/appium/appi...
相关推荐
小李飞飞砖2 小时前
Sophix、Tinker 和 Robust 三大主流 Android 热修复框架的详细对比
android
感觉不怎么会3 小时前
Android 12 - 部分相机横屏显示方案
android
人生游戏牛马NPC1号4 小时前
学习 Flutter (一)
android·学习·flutter
fundroid5 小时前
Swift 进军 Android,Kotlin 该如何应对?
android·ios
前端世界5 小时前
鸿蒙系统安全机制全解:安全启动 + 沙箱 + 动态权限实战落地指南
android·安全·harmonyos
June bug7 小时前
【Python基础】变量、运算与内存管理全解析
开发语言·python·职场和发展·测试
_一条咸鱼_8 小时前
Vulkan入门教程:源码级解析
android·面试·android jetpack
嘉小华8 小时前
ThreadLocal 详解
android
wkj0018 小时前
php 如何通过mysqli操作数据库?
android·数据库·php
kymjs张涛10 小时前
零一开源|前沿技术周报 #7
android·前端·ios