使用WebdriverIO和Appium测试App

1.新建项目

打开Webstorm新建项目

打开终端输入命令

npm init -y
npm install @wdio/cli allure-commandline --save-dev
npx wdio config

然后在终端依次选择如下:

然后在终端输入命令:

npm install @wdio/local-runner@latest @wdio/mocha-framework@latest appium-uiautomator2-driver --save-dev

如果图中"run 'npm install'"这一步选择了yes,则不用执行上述命令

2.编写脚本

test/pageobjects/page.js

module.exports = class Page {
    get loginWidget() {
        let xpath = '//*[@content-desc="Login"]'
        return $(xpath);
    }
}

test/pageobjects/login.page.js

const Page = require('./page');

class LoginPage extends Page {
    get btnSignUpContainer() {
        let xpath = '//*[@content-desc="button-sign-up-container"]'
        return $(xpath);
    }

    get inputEmail() {
        return $('~input-email');
    }

    get inputPassword() {
        return $('~input-password');
    }

    get inputRepeatPassword() {
        return $('~input-repeat-password');
    }

    get btnSignUp() {
        let xpath = '//*[@content-desc="button-SIGN UP"]'
        return $(xpath);
    }

    get popupSignupSuccessMessage() {
        let xpath = '//*[@resource-id="android:id/message"]'
        return $(xpath);
    }

    async signUp(email, password) {
        await super.loginWidget.click();
        await this.btnSignUpContainer.click();
        await this.inputEmail.setValue(email);
        await this.inputPassword.setValue(password);
        await this.inputRepeatPassword.setValue(password);
        await this.btnSignUp.click();
    }
}

module.exports = new LoginPage();

test/specs/test.e2e.js

const LoginPage = require('../pageobjects/login.page')

describe('Login/Sign Up Form', () => {
    it('should signup with valid credentials', async () => {
        await LoginPage.signUp('testing123@mailnator.com', 'SuperSecretPassword!')
        await expect(LoginPage.popupSignupSuccessMessage).toBeExisting()
        const text = await LoginPage.popupSignupSuccessMessage.getText();
        expect(text).toContain('You successfully signed up!');
    })
})

package.json

{
  "name": "appdemo",
  "version": "1.0.0",
  "main": "index.js",
  "scripts": {
    "test": "npx wdio wdio.conf.js",
    "report": "npx allure generate allure-results --clean && npx allure open"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "description": "",
  "devDependencies": {
    "@wdio/allure-reporter": "^9.2.14",
    "@wdio/appium-service": "^9.4.1",
    "@wdio/cli": "^9.4.1",
    "@wdio/local-runner": "^9.4.1",
    "@wdio/mocha-framework": "^9.2.8",
    "@wdio/spec-reporter": "^9.2.14",
    "allure-commandline": "^2.32.0",
    "appium-uiautomator2-driver": "^3.9.1"
  }
}

wdio.conf.js

exports.config = {
    runner: 'local',
    specs: [
        './test/specs/**/*.js'
    ],
    maxInstances: 10,
    services: [
        ['appium', {
            command: 'appium',
            logPath: './logs/'
        }]
    ],
    capabilities: [{
        platformName: 'Android',
        'appium:platformVersion': '12',
        'appium:udid': '09714153AO000853',
        'appium:autoGrantPermissions': true,
        'appium:automationName': 'UiAutomator2',
        'appium:appPackage': 'com.wdiodemoapp',
        'appium:appActivity': 'com.wdiodemoapp.MainActivity',
    }],
    reporters: ['spec', ['allure', {
        outputDir: './allure-results',
        disableWebdriverStepsReporting: true,
        disableWebdriverScreenshotsReporting: false,
    }]],
    logLevel: 'info',
    bail: 0,
    waitforTimeout: 10000,
    connectionRetryTimeout: 120000,
    connectionRetryCount: 3,
    framework: 'mocha',
    mochaOpts: {
        ui: 'bdd',
        timeout: 60000
    },
}

3.运行测试

运行之前需安装对应库

npm install --save-dev @wdio/appium-service
npm install --save-dev @wdio/spec-reporter
npm install --save-dev @wdio/allure-reporter

安装完成后下载对应apk

apk下载地址:https://github.com/webdriverio/native-demo-app/releases

然后在终端输入命令执行测试

npm test

4.测试报告

执行命令生成报告

npm run report

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/954544.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【opencv】第7章 图像变换

7.1 基 于OpenCV 的 边 缘 检 测 本节中,我们将一起学习OpenCV 中边缘检测的各种算子和滤波器——Canny 算子、Sobel 算 子 、Laplacian 算子以及Scharr 滤波器。 7.1.1 边缘检测的一般步骤 在具体介绍之前,先来一起看看边缘检测的一般步骤。 1.【第…

浙江安吉成新照明电器:Acrel-1000DP 分布式光伏监控系统应用探索

安科瑞吕梦怡 18706162527 摘 要:分布式光伏发电站是指将光伏发电组件安装在用户的建筑物屋顶、空地或其他适合的场地上,利用太阳能进行发电的一种可再生能源利用方式,与传统的大型集中式光伏电站相比,分布式光伏发电具有更灵活…

Linux检查磁盘占用情况

1.检查使用情况 df -h发现是/dev/vda1占用很高 2.查看/dev/vda1文件夹 cd /dev/vda1发现不是文件夹 3.继续查看使用情况 df -h *4.原因可能是文件已经删除但是进程还在,没有释放空间 5.查看删除操作的进程 lsof -n | grep deleted6.杀死进程 kill -9 PID

向量数据库Milvus详解

向量数据库Milvus详解 0. 什么是向量数据库? 在现实世界中,并非所有数据都可以整齐地放到行和列中。在处理图像、视频和自然语言等复杂的非结构化数据时尤其如此。这就是向量数据库的用武之地。 向量数据库是一种以高维向量的形式来存储数据的数据库,这些向量本质上是表示…

海豚调度DolphinScheduler-3.1.9配置windows本地开发环境

源代码下载地址https://dolphinscheduler.apache.org/zh-cn/docs/3.1.9 1.Zookeeper安装与使用 如图下载解压zookeeper安装包,并创建data和log目录 下载地址 https://archive.apache.org/dist/zookeeper/zookeeper-3.6.4/apache-zookeeper-3.6.4-bin.tar.gz 进入…

springCloudGateway+nacos自定义负载均衡-通过IP隔离开发环境

先说一下想法,小公司开发项目,参考若依框架使用的spring-cloud-starter-gateway和spring-cloud-starter-alibaba-nacos, 用到了nacos的配置中心和注册中心,有多个模块(每个模块都是一个服务)。 想本地开发,…

大模型训练_硬件微调知识增强

目录 关键硬件 大模型类型 垂域训练技术 微调技术 领域大模型训练trick 知识增强 关键硬件 GPU GPU擅长处理图形渲染和数据并行任务,可以同时处理大量的矩阵运算,在科学计算、人工智能、游戏开发等领域应用广泛。 显卡 显卡是一种完整的硬件设…

linux分配磁盘空间命令

使用命令lsblk查询linux磁盘空间时,发现空间并没有被分配完 如图,600G,但实际分配了一共199G,剩余500G,我们需要通过命令进行剩余存储的分配。 思路:创建新的分区->更新内核分区表->初始化新分区作…

【运维自动化-作业平台】魔法变量到底如何使用之主机列表类型

蓝鲸作业平台,以下简称作业平台或JOB平台 魔法变量:JOB平台执行引擎提供的特有的变量能力用法 脚本中使用,并且需要事先声明:job_import {{变量名}} 声明后,同样是使用 dollar 符 大括号:${变量名}来取值…

Windows重装后NI板卡LabVIEW恢复正常

在重新安装Windows系统后,NI(National Instruments)板卡能够恢复正常工作,通常是由于操作系统的重新配置解决了之前存在的硬件驱动、兼容性或配置问题。操作系统重装后,系统重新加载驱动程序、清理了潜在的冲突或损坏的…

Docker启动达梦 rman恢复

目录标题 1. 主库备份2. Docker启动备库3. 备库修改属组4. 开始恢复5. 连接数据库配置归档 & Open6. 检查数据 关于达梦数据库(DMDBMS)的主库备份、Docker启动备库、恢复备份以及配置归档和打开数据库的详细步骤。 1. 主库备份 # 使用达梦数据库备…

【C语言】_字符串拷贝函数strcpy

目录 1. 函数声明及功能 2. 使用示例 3. 注意事项 4. 模拟实现 4.1 第一版:基本功能判空const修饰 4.2 第二版:优化对于\0的单独拷贝 4.3 第三版:仿strcpy的char*返回值 1. 函数声明及功能 char * strcpy ( char * destination, cons…

XML序列化和反序列化的学习

1、基本介绍 在工作中,经常为了调通上游接口,从而对请求第三方的参数进行XML序列化,这里常使用的方式就是使用JAVA扩展包中的相关注解和类来实现xml的序列化和反序列化。 2、自定义工具类 import javax.xml.bind.JAXBContext; import javax.x…

js使用qrcode与canvas生成带logo的二维码

qrcode库 文档 https://www.npmjs.com/package/qrcode 安装 npm i qrcode 使用 errorCorrectionLevel: H // 容错率(H是最高,其它看文档) width: 200 // 大小 margin: 2 // 边距 import QRCode from qrcodeconst testFn async () > {c…

【计算机网络】lab5 ARP协议

🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀计算机网络_十二月的猫的博客-CSDN博客 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前言 2.…

【React】脚手架进阶

目录 暴露webpack配置package.json的变化修改webpack.config.js配置less修改域名、端口号浏览器兼容处理处理跨域 暴露webpack配置 react-scripts对脚手架中的打包命令进行封装,如何暴露这些打包配置呢?上篇写到在package.json中的scripts配置项中有eje…

java项目之现代企业人力资源管理系统设计与实现(源码+文档)

大家好我是风歌,今天要和大家聊的是一款基于ssm的现代企业人力资源管理系统设计与实现。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 现代企业人力资源管理系统设计与实现的主要使用者分为管理员、经理和普通员工三个角…

2025.1.15——三、报错注入

一、基本操作:整理已知信息,本题为报错注入,需进一步确认回显方式 二、用updatexml()解题步骤 step 1:依据回显方式判断题目类型 键入:1、1 and 11 、id2-1 得到:查询正确的回显 键入:1’、…

【IDEA 2024】学习笔记--文件选项卡

在我们项目的开发过程中,由于项目涉及的类过多,以至于我们会打开很多的窗口。使用IDEA默认的配置,个人觉得十分不便。 目录 一、设置多个文件选项卡按照文件字母顺序排列 二、设置多个文件选项卡分行显示 一、设置多个文件选项卡按照文件字…

自己动手搭建“接入 AI Agent 的数字人”

前言 本文的实战案例来自于开源项目:https://github.com/wan-h/awesome-digital-human-live2d。该项目可以运用Dify编排框架和Live2D驱动模型搭建智能数字人,实现智能对话并动态交互,大家可以自行部署尝试,项目效果如下。 开源&a…