使用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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Uniapp-Vue3】showLoading加载和showModal模态框示例

一、showLoading加载 uni.showLoading({ title:"标题", // 其他配置 }); uni.hideLoading(); showLoading开启后不会自动关闭,只能手动配置uni.hideLoading() 来关闭加载框。 二、showModel模态框 uni.showModel({ title:"标题", // 其他配置 …

UML系列之Rational Rose笔记八:类图

一、新建类图 首先依旧是新建要绘制的类图;选择class diagram; 修改命名; 二、工作台介绍 正常主要就是使用到class还有直接关联箭头就行; 如果不要求规范,直接新建一些需要的类,然后写好关系即可&#…

HTML应用指南:利用GET请求获取星巴克门店数据

本篇文章,我们将探究GET请求的实际应用,我们使用Python的requests库通过GET请求抓取星巴克门店信息。星巴克作为全球知名的咖啡连锁品牌,其门店分布广泛,获取这些门店的信息对于数据分析、市场研究以及商业决策都具有重要意义。我…

RV1126+FFMPEG推流项目(3)VI模块视频编码流程

视频编码的流程: 本章节讲的是RV1126视频编码的流程,在整个项目之中视频编码功能是核心之一。视频编码流程主要分三步:VI的初始化、VENC的初始化(硬件编码)、绑定VI和VENC节点、开启VENC线程进行视频编码的采集,注意一下这里的…

SimpleFOC01|基于STM32F103+CubeMX,移植核心的common代码

导言 如上图所示,进入SimpleFOC官网,点击Github下载源代码。 如上图所示,找到仓库。 comom代码的移植后,simpleFOC的移植算是完成一大半。simpleFOC源码分为如下5个部分,其中communication是跟simpleFOC上位机通讯&a…

【2025最新】机器学习类计算机毕设选题80套,适合大数据,人工智能

【2025最新】机器学习类型计算机毕设选题 1-10套 基于Spring Boot的物流管理系统的设计与实现 基于机器学习的虚假招聘信息的分析与预测 基于机器学习的影响数据科学家职业变动因素的分析与预测 基于Spring Boot的历史文物交流平台的设计与实现 基于机器学习的肥胖影响因素的分…

金融项目实战 02|接口测试分析、设计以及实现

目录 ⼀、接口相关理论 二、接口测试 1、待测接口:投资业务 2、接口测试流程 3、设计用例理论 1️⃣设计方法 2️⃣工具 4、测试点提取 5、测试用例(只涉及了必测的) 1️⃣注册图⽚验证码、注册短信验证码 2️⃣注册 3️⃣登录 …

C++:string

一、string概念 之前介绍过通过字符数组保存字符串,然后对字符数组中的字符串做各种操作;为了更加简单方便,在C中,又增加了 string 来处理字符串。 char str[20] "hello world"; string 字符串其实是一种更加高级的封…

STORM:从多时间点2D图像中快速重建动态3D场景的技术突破

随着计算机视觉和机器学习技术的迅猛发展,我们已经能够利用AI来解决许多复杂的问题。然而,在处理大规模室外动态3D场景重建时,现有的方法往往面临着诸多挑战,如需要大量人工标注数据、处理速度慢以及难以准确捕捉移动物体等。为了解决这些问题,研究者们开发了STORM(Spati…

C#使用OpenTK绘制3D可拖动旋转图形三棱锥

接上篇,绘制着色矩形 C#使用OpenTK绘制一个着色矩形-CSDN博客 上一篇安装OpenTK.GLControl后,这里可以直接拖动控件GLControl 我们会发现GLControl继承于UserControl //// 摘要:// OpenGL-aware WinForms control. The WinForms designer will always call the default//…

Vue2+OpenLayers使用Overlay实现点击获取当前经纬度信息(提供Gitee源码)

目录 一、案例截图 二、安装OpenLayers库 三、代码实现 关键参数: 实现思路: 核心代码: 完整代码: 四、Gitee源码 一、案例截图 二、安装OpenLayers库 npm install ol 三、代码实现 覆盖物(Overlay&#xf…

浅谈云计算12 | KVM虚拟化技术

KVM虚拟化技术 一、KVM虚拟化技术基础1.1 KVM虚拟化技术简介1.2 KVM虚拟化技术架构1.2.1 KVM内核模块1.2.2 用户空间工具(QEMU、Libvirt等) 二、KVM虚拟化技术原理2.1 硬件辅助虚拟化2.2 VMCS结构与工作机制 三、KVM虚拟化技术面临的挑战与应对策略3.1 性…

【2024年华为OD机试】(C卷,100分)- 分割均衡字符串 (Java JS PythonC/C++)

一、问题描述 题目描述 均衡串定义:字符串中只包含两种字符,且这两种字符的个数相同。 给定一个均衡字符串,请给出可分割成新的均衡子串的最大个数。 约定:字符串中只包含大写的 X 和 Y 两种字符。 输入描述 输入一个均衡串…

【update 更新数据语法合集】.NET开源ORM框架 SqlSugar 系列

系列文章目录 🎀🎀🎀 .NET开源 ORM 框架 SqlSugar 系列 🎀🎀🎀 文章目录 系列文章目录前言 🍃一、实体对象更新1.1 单条与批量1.2 不更新某列1.3 只更新某列1.4 NULL列不更新1.5 无主键/指定列…

项目概述、开发环境搭建(day01)

软件开发整体介绍 软件开发流程 第1阶段: 需求分析 需求规格说明书, 一般来说就是使用 Word 文档来描述当前项目的各个组成部分,如:系统定义、应用环境、功能规格、性能需求等,都会在文档中描述。产品原型,一般是通过…

数据仓库基础常见面试题

1.数据仓库是什么 ‌数据仓库(Data Warehouse)是一个面向主题的、集成的、非易失的、随时间变化的数据集合,用于支持企业的管理决策‌。它不同于传统的操作型数据库,后者主要用于处理日常业务交易和实时查询,而数据仓库…

shell脚本回顾1

1、shell 脚本写出检测 /tmp/size.log 文件如果存在显示它的内容,不存在则创建一个文件将创建时间写入。 一、 ll /tmp/size.log &>/dev/null if [ $? -eq 0 ];then cat /tmp/size.log else touch /tmp/size.log echo date > /tmp/size.log fi二、 if …

【C++】PP5015 [NOIP2018 普及组] 标题统计

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯题目背景题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 样例 #2样例输入 #2样例输出 #2 提示数据规模与约定 💯方法分析方法1:我的做法实…

【C++第三方库】快速上手---轻量级数据库SQLite和单元测试工具Gtest

每日激励,“驾驭命运的舵是奋斗。不抱有幻想,不放弃一点机会,不停止一日努力。” 绪论​: 本篇文章将写道如何快速的上手Gtest和SQLite第三方库,这两个第三方库都是在项目编写过程中非常重要的。 —————— 话不多说…

《机器学习》——贝叶斯算法

贝叶斯简介 贝叶斯公式,又称贝叶斯定理、贝叶斯法则,最初是用来描述两个事件的条件概率间的关系的公式,后来被人们发现具有很深刻的实际意义和应用价值。该公式的实际内涵是,支持某项属性的事件发生得愈多,则该属性成…