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...
相关推荐
千里马学框架4 天前
一起学 Android 14:ShellTransition 屏幕旋转过程深度剖析
android·智能手机·性能优化·framework·性能·屏幕旋转·rotation
美狐美颜SDK开放平台4 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
AFinalStone4 天前
Android7 SystemUI源码解析(七)Keyguard锁屏模块深度解析
android·systemui
致远ccc4 天前
Google Play 上架前如何测试 App?多国家 Android 环境测试
android·app测试·googleplay·多国家应用测试
ttyyttemo4 天前
Kotlin 协程中的 Job 结构化并发与取消
android
sun0077005 天前
tbox 4g/5g切换,导致wan ip 改变,导致车机旧网络不可用。需要重启车机才行
android
其实防守也摸鱼5 天前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
AFinalStone5 天前
Android7 SystemUI 源码解析(四)NavigationBar 导航栏与 SystemBars
android·systemui
JMchen5 天前
属性动画原理与高级动画实现
android·kotlin·canvas
AFinalStone5 天前
Android7 SystemUI 源码解析(二)启动流程深度解析
android·systemui