使用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.mzph.cn/diannao/67039.shtml

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

相关文章

uniapp小程序开发,配置开启小程序右上角三点的分享功能

直接全局配置一个分享的功能,要不然需要一个一个页面去单独配置就太麻烦了!!! 1.新建一个share.js文件,并配置代码,调用onShareMessage()和onShareTimeline()两个函数。 其中: title&#xff1…

行业案例:高德服务单元化方案和架构实践

目录 为什么要做单元化 高德单元化的特点 高德单元化实践 服务单元化架构 就近接入实现方案 路由表设计 路由计算 服务端数据驱动的单元化场景 总结 系列阅读 为什么要做单元化 单机房资源瓶颈 随着业务体量和服务用户群体的增长,单机房或同城双机房无法支持服…

ip属地什么条件会改变?多角度深入探讨

IP属地,即IP地址的归属地,是互联网上设备连接时的一个关键信息,它通常反映了设备连接互联网时的地理位置。随着社交软件及各大平台推出IP归属地显示功能,IP属地的变化问题逐渐受到广大用户的关注。那么,IP属地在什么条…

内网服务器添加共享文件夹功能并设置端口映射

参考网址 https://blog.csdn.net/Think88666/article/details/118438465 1.服务器安装smb服务,由于网路安全不允许使用默认端口(445,446),于是修改端口为62445、62446。 2.每台需要共享的电脑都要修改端口映射&#x…

【干货】交换网络环路介绍

定义 以太网交换网络中为了提高网络可靠性,通常会采用冗余设备和冗余链路,然而现网中由于组网调整、配置修改、升级割接等原因,经常会造成数据或协议报文环形转发,不可避免的形成环路。如图7-1所示,三台设备两两相连就…

Linux服务器网络丢包场景及解决办法

一、Linux网络丢包概述 在数字化浪潮席卷的当下,网络已然成为我们生活、工作与娱乐不可或缺的基础设施,如同空气般,无孔不入地渗透到各个角落。对于 Linux 系统的用户而言,网络丢包问题却宛如挥之不去的 “噩梦”,频繁…

Springboot内置Apache Tomcat 安全漏洞(CVE-2024-50379)

背景 大家都知道我们使用Springboot开发后,无需再额外配置tomcat,因为Springboot已经帮我们内置好了tomcat。 这次在线上安全团队就扫出来了我们Springboot服务的tomcat漏洞: 可以看到这是2023年的洞,Apache Tomcat 安全漏洞(…

杭州铭师堂的云原生升级实践

作者:升学e网通研发部基建团队 公司介绍 杭州铭师堂,是一个致力于为人的全面发展而服务的在线教育品牌。杭州铭师堂秉持“用互联网改变教育,让中国人都有好书读”的使命,致力于用“互联网教育”的科技手段让更多的孩子都能享有优…

qml XmlListModel详解

1、概述 XmlListModel是QtQuick用于从XML数据创建只读模型的组件。它可以作为各种view元素的数据源,比如ListView、GridView、PathView等;也可以作为其他和model交互的元素的数据源。通过XmlRole定义角色,如name、age和height,并…

使用Selenium进行网页自动化测试

在使用Selenium进行网页自动化测试时,获取网络请求数据(即network数据)并不直接由Selenium库提供。Selenium主要用于与网页内容进行交互(如点击、输入文本、获取页面元素等),但它本身不拦截或记录网络请求。…

380.O(1) 时间插入、删除和获取随机元素

实现RandomizedSet 类: RandomizedSet() 初始化 RandomizedSet 对象 bool insert(int val) 当元素 val 不存在时,向集合中插入该项,并返回 true ;否则,返回 false 。 bool remove(int val) 当元素 val 存在时&#xf…

《异步编程之美》— 全栈修仙《Java 8 CompletableFuture 对比 ES6 Promise 以及Spring @Async》

哈喽,大家好!在平常开发过程中会遇到许多意想不到的坑,本篇文章就记录在开发过程中遇到一些常见的问题,看了许多博主的异步编程,我只能说一言难尽。本文详细的讲解了异步编程之美,是不可多得的好文&#xf…

python 3个线程轮流打印A、B、C

要实现 Python 中三个线程轮流打印 A、B、C 的效果,可以使用 threading 模块和 Condition 或 Lock 来同步线程。以下是使用 Condition 的解决方案: 代码实现 import threading# 初始化条件变量 condition threading.Condition() current 0 # 共享变…

《机器学习》之K-means聚类

目录 一、简介 二、K-means聚类实现步骤 1、初始化数据点、确定K值 2、通过距离分配数据点 3、更新簇中心 4、 迭代更新 三、聚类效果评价方式 1、轮廓系数的定义 2、整体轮廓系数 3、使用场景 4、优点 5、缺点 6、代码实现方法 四、K-means聚类代码实现 1、API接…

MVC执行流程

(1)用户通过浏览器(客户端)向服务端(后端)发送请求,请求会被前端控制器DispatcherServlet拦截。 (2)DispatcherServlet拦截到请求后,会调用处理器映射器&…

springboot和vue配置https请求

项目场景: 代码发布到线上使用https请求需要配置ssl证书,前后端都需要修改。 问题描述 如图,我们在调用接口时报如下错误,这就是未配置ssl但是用https请求产生的问题。 解决方案: 前端:在vite.config.js文…

单细胞组学大模型(8)--- scGenePT,scGPT和GenePT的结合,实验数据和文本数据的交融模型

–https://doi.org/10.1101/2024.10.23.619972 研究团队和单位 Theofanis Karaletsos–Head Of AI - Science at Chan Zuckerberg Initiative (Chan Zuckerberg Initiative是扎克伯格和他妻子Chan成立的科研&教育机构) 研究简介 研究背景&…

改进萤火虫算法之八:量子萤火虫算法(Quantum-behaved Firfly Algorithm,QFA)

量子萤火虫算法(Quantum-behaved Firfly Algorithm,QFA)是对萤火虫算法的一种改进,旨在提升萤火虫个体的搜索能力。以下是对量子萤火虫算法的详细介绍: 一、萤火虫算法基础 萤火虫算法(Firefly Algorithm,FA)是一种基于群体智能的优化算法,由剑桥大学的Xin-She Yang在…

C++----STL(string)

引言:STL简介 什么是STL STL(standard template libaray-标准模板库): 是 C标准库的重要组成部分(注意:STL只是C标准库里的一部分,cin和cout也是属于C标准库的),不仅是一个可复用的组件库&…

基于“大型园区”网络设计

基于“大型园区”网络设计 目 录 第1章 项目概述1 1.1 项目背景1 1.2 公司概况1 1.3 网络现状2 第2章 需求分析4 2.1 部门需求4 2.2 配置需求4 2.3 网络功能需求5 第3章 网络设计6 3.1 建设原则6 3.2 网络拓扑结构6 3.3 IP地址和VLAN划分8 3.4 核心层设计9 3.5 …