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...
相关推荐
xiaoshiquan120620 分钟前
as强制过滤指定依赖版本库,解决该依赖不同版本冲突
android
2501_929157682 小时前
Switch 20.5.0系统最新PSP模拟器懒人包
android·游戏·ios·pdf
用户094 小时前
Kotlin Flow的6个必知高阶技巧
android·面试·kotlin
用户094 小时前
Flutter插件与包的本质差异
android·flutter·面试
用户094 小时前
Jetpack Compose静态与动态CompositionLocal深度解析
android·面试·kotlin
聆风吟º7 小时前
【Spring Boot 报错已解决】别让端口配置卡壳!Spring Boot “Binding to target failed” 报错解决思路
android·java·spring boot
非专业程序员Ping14 小时前
HarfBuzz概览
android·ios·swift·font
Jeled15 小时前
「高级 Android 架构师成长路线」的第 1 阶段 —— 强化体系与架构思维(Clean Architecture 实战)
android·kotlin·android studio·1024程序员节
明道源码17 小时前
Kotlin 控制流、函数、Lambda、高阶函数
android·开发语言·kotlin
消失的旧时光-194319 小时前
Kotlin × Gson:为什么遍历 JsonObject 要用 entrySet()
android·kotlin·数据处理·1024程序员节