Web 自动化神器 TestCafe—页面基本操作篇

前 言


Testcafe是基于node.js的框架,以操作简洁著称,是web自动化的神器

今天主要给大家介绍一下testcafe这个框架和页面元素交互的方法。

一、互动要求

使用 TestCafe 与元素进行交互操作,元素需满足以下条件:☟

元素在 body 页面窗口或 iframe 窗口的元素内。如果某个元素在视口之外,则 TestCafe 通过滚动可以滚动到元素可见。

元素是可见的,具有以下属性:

属性

说明

display

没有设置为 none

visibility

设置为 visible(默认值)

width

> = 1 像素

height

> = 1 像素

元素不重叠。

TestCafe 动作以某个动作 offsetX 或 offsetY 选项指定的元素的中心或点为目标。如果另一个元素遮挡了目标点,则在顶部元素上执行操作(例如,t.click 操作在其上方单击该元素)。
 

二、点击操作

关于对元素进行点击操作,使用 testcafe 提供了三个方法,分别为单击、双击、鼠标右击,接下来我们一起来了解一下鼠标操作的使用方法。

1、单击

方法:t.click

在指定元素位置,鼠标单击

参数:

参数

描述

selector

双击的页面元素

例子:

test('click test', async t => {await t.click('#su');
});

2、双击

方法:t.doubleClick

在指定元素位置,鼠标双击元素

参数:

参数

描述

selector

双击的页面元素

例子:

test('doubleClic test', async t => {await t.doubleClick('#su')
});

3、右击

方法:t.rightClick

在指定元素位置,鼠标右击

参数:

参数

描述

selector

双击的页面元素

例子:

test('rightClick test', async t => {await t.rightClick('#cell-1-1')
});

三、输入操作

方法:t.typeText

输入表单元素的值

参数:

参数

描述

selector

接收输入内容的表单元素

text

输入的文本

例子:

import { Selector } from 'testcafe';fixture('Example').page('https://www.baidu.com');test('Type Text test', async t => {await t.typeText('#kw', '1')
})

四、键盘按键

在测试的操作中,如果涉及到键盘按键的操作,那么 testcafe 中也提供了很方便的方法 pressKey。

方法:t.pressKey

按键类型:

按键类型

例子

字母、数字键

'a','A','1'

修饰键

'shift','alt' 、'ctrl',

导航键和动作键

'backspace','tab','enter'

按键组合

'shift+a', 'ctrl+v'

顺序按键

使用空格分隔多个案例操作,例如,'ctrl+c ctrl+v'

例子:

test('enter test', async t => {// 按下 a 键await t.pressKey('a')// 按下 shift+a 键await t.pressKey('shift+a')// 先按下 ctrl+c复制,再按ctrl+v粘贴await t.pressKey('ctrl+c ctrl+v')});

五、文本选择

关于表单或者 textarea 这类可编辑的元素,在进行输入之前,如果要选中原有的文字内容,并进行删除操作,则需要先选择文本,然后再进行删除
 

方法:t.selectText

在各种类型的输入元素中选择文本

参数:

参数

类型

描述

selector

字串| 选择器

标识将要选择其文本的网页元素;必填参数

startPos

number

选择的开始位置,从零开始的整数;非必填,默认为 0

endPos

number

选择的结束位置;非必填,可见文本内容的长度。

例子:

import { Selector } from 'testcafe';fixture('Example').page('https://www.baidu.com');test('Type Text test', async t => {// 输入 柠檬班await t.typeText('#kw', '1')// 选中输入的文本.selectText('#kw')// 按下删除键   删除输入的文本.pressKey('delete');
})

六、鼠标悬停

方法:t.hover

将鼠标指针悬停在页面的某个元素上。

参数:

参数

描述

selector

页面元素

例子:

import { Selector } from 'testcafe';fixture('Example').page('https://www.baidu.com');test('Type Text test', async t => {// 鼠标悬停在百度页面顶部的更多菜单上await t.hover('a[name="tj_briicon"]')
});

七、强制等待

在我们执行测试时,对于某个操作后,如果需要强制等待一段时间则可以使用 t.wait 方法来进行强制等待。

方法:t.wait

代码执行到 wait 方法,进行强制等待

参数:

范围

类型

描述

timeout

数字

暂停持续时间(以毫秒为单位)。

例子:

import { Selector } from 'testcafe';fixture `百度测试`.page `https://www.baidu.com`;test('Wait test', async t => {await t// 输入柠檬班.typeText('#kw', '2')// 强制等待3秒.wait(3000)// 点击搜索.click('#su')});

八、窗口管理

1、打开新窗口

方法:openWindow

打开一个新的浏览器窗口。返回匹配的窗口描述符

参数:

参数

描述

url

打开的 URL。可以是绝对的或相对的。

例子:

import { Selector } from 'testcafe';fixture `百度测试`.page `https://www.baidu.com`;test('Wait test', async t => {// 打开一个新窗口,接收新窗口的描述符const winDesc = await t.openWindow('http://www.taobao.com')
});

2、关闭窗口

方法:closeWindow

关闭浏览器窗口。(注意点:不能使用该方法直接关闭主窗口)

参数:

参数

描述

windowDescriptor

描述目标窗口的对象。如果不传此参数,默认关闭当前活动窗口。

例子:

import { Selector } from 'testcafe';fixture `百度测试`.page `https://www.baidu.com`;test('Wait test', async t => {// 打开一个新窗口,接收新窗口的描述符const winDesc1 = await t.openWindow('http://www.taobao.com')// 关闭窗口await t.closeWindow(winDesc1)
});

九、调整窗口大小

1、窗口最大化

方法:t.maximizeWindow

把浏览器窗口设置为最大化

例子:

import { Selector } from 'testcafe';fixture `百度`.page `https://www.baidu.com`;// 窗口最大化
test('screenshot ', async t => {await t.maximizeWindow();
});

2、调整窗口大小

方法:t.resizeWindow

参数:

参数名

描述

width

新的宽度(以像素为单位)。

height

新高度,以像素为单位。

例子:

  import { Selector } from 'testcafe';const menu = Selector('#side-menu');fixture `百度测试`.page `https://www.baidu.com`;test('设置浏览器窗口大小', async t => {await t.resizeWindow(200, 100)
});

3、调整窗口大小适配设备屏幕

方法:t.resizeWindowToFitDevice

通过传入移动设备的设备名,自动调整窗口大小,以适合指定移动设备的屏幕

参数:

参数

描述

deviceName

设备的名称。比如 iphonex, iphonexr

例子:

import { Selector } from 'testcafe';const menu = Selector('#side-menu');fixture `百度测试`.page `https://www.baidu.com`;test('设置浏览器窗口大小', async t => {await t.resizeWindowToFitDevice('iphonex', {portraitOrientation: true})
});

看到这里的朋友不妨点个赞,码字不易,谢谢大家。

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

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

相关文章

怎么让NetCore接口支持Json参数

项目:NetCore Web API 接口支持Json参数需要安装Newtonsoft.Json.Linq和Microsoft.AspNetCore.Mvc.NewtonsoftJson Program代码 //支持json需要安装Microsoft.AspNetCore.Mvc.NewtonsoftJson using Newtonsoft.Json.Serialization;var builder WebApplication.Cr…

【Seata源码学习 】篇三 TM开启全局事务的过程

【Seata源码学习 】篇三 TM开启全局事务的过程 TM发送 单个或批量 消息 以发送GlobalBeginRequest消息为例 TM在执行拦截器链路前将向TC发送GlobalBeginRequest 消息 io.seata.tm.api.DefaultGlobalTransaction#begin(int, java.lang.String) Overridepublic String begin(…

媲美有线操作,支持4KHz响应和无线充电的游戏鼠标,雷柏VT3S上手

对于无线鼠标来说,操作延迟和精度对游戏操作影响很大,常见的游戏鼠标至少都有1KHz的回报率,而雷柏今年已经出了很多支持4KHz回报的鼠标了,像是我现在用的这款VT3S游戏鼠标,就搭载了旗舰级的原相3395引擎,支…

git撤销未git commit的文件

目录 一、问题描述 二、方式1:git命令撤销(更专业) 1、文件已git add,未git commit 2、本地修改,未git add (1)撤销处于unstage的文件,即删除已有变动 (2&#xff…

netty整合websocket(完美教程)

websocket的介绍: WebSocket是一种在网络通信中的协议,它是独立于HTTP协议的。该协议基于TCP/IP协议,可以提供双向通讯并保有状态。这意味着客户端和服务器可以进行实时响应,并且这种响应是双向的。WebSocket协议端口通常是80&am…

一些损失函数的学习

CrossEntropy loss 交叉熵是用来衡量两个概率分布之间的差异性或不相似性的度量交叉熵定义为两个概率分布p和q之间的度量。其中,p通常是真实分布,而q是模型预测的分布 交叉熵还等于信息熵 相对熵 这里,x遍历所有可能的事件,p(x)…

Window下如何对Redis进行开启与关闭

目录 前言1. 图文界面2. 命令行 前言 由于长期使用Linux界面,对于Window下的Redis,不知如何下手。特此记录该博文 特别注意,刚下载好的Redis,如果需要配置密码,可以再该文件进行配置:redis.windows-servi…

基于知识问答的上下文学习中的代码风格11.20

基于知识问答的上下文学习中的代码风格 摘要1 引言2 相关工作3 方法3.1 概述3.2 元函数设计3.3 推理 4 实验4.1 实验设置4.2 实施细节4.3 主要结果 摘要 现有的基于知识的问题分类方法通常依赖于复杂的训练技术和模型框架,在实际应用中存在诸多局限性。最近&#x…

Redis-高性能原理剖析

redis安装 下载地址:http://redis.io/download 安装步骤: # 安装gcc yum install gcc# 把下载好的redis-5.0.3.tar.gz放在/usr/local文件夹下,并解压 wget http://download.redis.io/releases/redis-5.0.3.tar.gz tar -zxvf redis-5.0.3.tar…

如何让bug远离你?

想让bug远离你,当然是靠佛祖保佑~ /** *************************************************************************** ******************** ********************* ******************** COPYRIGHT INFORMATION *…

09【保姆级】-GO语言的数组和切片

09【保姆级】-GO语言的数组 一、数组1.1 数组定义1.2 数组的使用1.3 数组的遍历1.4 数组的应用案例 二、切片2.1 切片的介绍2.2 切片的原理2.3 切片的三种使用 之前我学过C、Java、Python语言时总结的经验: 先建立整体框架,然后再去抠细节。先Know how&a…

如何使用SD-WAN提升物流供应链网络效率

案例背景 本次分享的物流供应链企业是一家国际性的大型企业,专注于提供全球范围内的物流和供应链解决方案。案例用户在不同国家和地区均设有多个分支机构和办公地点,以支持客户需求和业务运营。 在过去,该企业用户使用传统的MPLS网络来连接各…

基于SDN技术构建多平面业务承载网络

随着企业数字化的浪潮席卷各个行业,传统网络架构面临着更为复杂和多样化的挑战。企业正在寻找一种全面适应数字化需求的网络解决方案。随着软件定义网络(SDN)的发展,“多业务SDN一张网”解决方案为企业提供了一种全新的网络架构&a…

OpenAI 超 700 名员工联名逼宫董事会;ChatGPT 新功能“阅后即焚”丨 RTE 开发者日报 Vol.89

开发者朋友们大家好: 这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE (Real Time Engagement) 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文…

java: 无效的目标发行版: 17 问题解决

今天在写完类点击运行后显示java: 无效的目标发行版: 17 网上查询了一番,发现有几个地方需要注意。 还有一个就是设置中,下面的就是我本次问题所在,不知道为什么,他自动添加了下面的东西 一个方法是把目标字节码版本改为正确的&a…

【PCB学习】几种接地符号

声明 该图并非原创,原文出处不可考,因此在这里附加说明。 示意图

Rust开发——切片(slice)类型

1、什么是切片 在 Rust 中,切片(slice)是一种基本类型和序列类型。在 Rust 官方文档中,切片被定义为“对连续序列的动态大小视图”。 但在rust的Github 源码中切片被定义如下: 切片是对一块内存的视图,表…

ICCV 23丨3D-VisTA:用于 3D 视觉和文本对齐的预训练Transformer

来源:投稿 作者:橡皮 编辑:学姐 论文链接:https://arxiv.org/abs/2308.04352 开源代码:http://3d-vista.github.io 摘要: 3D视觉语言标定(3D-VL)是一个新兴领域,旨在将…

python查找算法_顺序查找

顺序查找(Sequential Search)是一种简单直观的搜索算法,用于在无序数组中查找特定元素。它的基本思想是逐个遍历数组中的元素,直到找到目标元素或遍历完整个数组。本文将介绍顺序查找的基本原理,并通过Python代码进行详…

HarmonyOS脚手架:快捷实现ArkTs中json转对象

前言 在上篇《HarmonyOS开发:UI开展前的阶段总结》中提到了未来的规划,既能让大家学会鸿蒙开发,也能让大家在以后的开发中如虎添翼,最终决定,便以脚手架为产出物,结合实际的业务需求,进行相关技…