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.mzph.cn/news/157475.shtml

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

相关文章

专访特斯拉工程师杨硕:跟着机器人上天入地、探索地外行星丨智源独家

导读 十几岁时,他痴迷《终结者》,曾在百科全书中窥见卡内基梅隆大学机械臂的介绍,从而得知了研究机器人「圣地」的存在。 在CMU,他深耕足式机器人感知定位算法,期待未来涉足太空,走上火星。 在大疆&#xf…

瑞格心理咨询系统设置多个管理员的操作方法

使用瑞格心理咨询系统,需要设置多个admin权限的管理员账号来管理,咨询厂家答复只能有1个管理员,个人觉得不可能,于是开始折腾。 解决办法: 在没有数据字典的情况下, 通过遍历数据库,发现用户信…

『 Linux 』使用fork函数创建进程与进程状态的查看

文章目录 🖥️ 前言 🖥️🖥️ 通过系统调用获取进程标识符 🖥️💻 进程标识符PID💻 父进程标识符PPID 🖥️ 通过系统调用创建子进程 fork() 🖥️💻 那么为什么在fork()函…

线程池简介及其简单实现

如果需要频繁的创建销毁线程, 就需要想办法降低创建和销毁的开销, 而线程池就是一个很好的选择: 提前创建好一些线程, 等到需要使用线程的时候, 直接从池子里拿一个就好了, 当不再使用该线程时, 就放回到池子里. 那么此时就从 创建/销毁线程 -> 池子里取线程/将线程还到池子…

构建智能医患沟通:陪诊小程序开发实战

在医疗科技的浪潮中,陪诊小程序的开发成为改善医患沟通的创新途径之一。本文将介绍如何使用Node.js和Express框架构建一个简单而强大的陪诊小程序,实现患者导诊和医生咨询功能。 1. 安装Node.js和Express 首先确保已安装Node.js,然后使用以…

Linux procps-ng - top

procps-ng 是一个开源的进程管理工具集,它提供了一系列用于监控和管理系统进程的命令行工具。它是 procps 工具集的一个分支,旨在改进和增强原有的 procps 工具。 procps-ng 包括了一些常用的命令行工具,例如: ps:用于…

机器学习笔记 - 创建CNN + RNN + CTC损失的模型来识别图像中的文本

我们将创建一个具有CTC损失的卷积循环神经网络来实现我们的OCR识别模型。 一、数据集 我们将使用 Visual Geometry Group 提供的数据。 Visual Geometry Group - University of OxfordComputer Vision group from the University of Oxfordhttps://www.robots.ox.ac.uk/~vgg/d…

最新AIGC创作系统ChatGPT系统源码,支持最新GPT-4-Turbo模型,支持DALL-E3文生图,图片对话理解功能

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如…

leetcode:415. 字符串相加(模拟竖式计算)

一、题目 链接: 415. 字符串相加 - 力扣(LeetCode) 函数原型:char* addStrings(char* num1, char* num2) 二、思路: 本题本质是将两个字符型数字相加,字符型数字相加就一定需要进行字符与数字的相互转换 详…

秋招JAVA面经总结

面试的范围是Java基础+Java并发+Java框架+mysql+网络。 Java基础 重载与重写有什么区别? 重载(Overloading)指的是在同一个类中,可以有多个同名方法,它们具有不同的参数列表(参数类型、参数个数或参数顺序不同),编译器根据调用时的参数类型来决定调用哪个方法。 重写…

笔试强训2

目录 &#x1f449;&#x1f3fb;字符串反转&#x1f449;&#x1f3fb;公共子串计算 &#x1f449;&#x1f3fb;字符串反转 mycode:100% #include <iostream> #include<algorithm> using namespace std;int main() {string s;cin>>s;reverse(s.begin(),s.…

Java(五)(Object类,克隆,Objects类,包装类,StringBuilder,StringJoiner,BigDecimal)

目录 Object类 Object类的常见方法: 克隆 浅克隆 深克隆 Objects类 包装类 StringBuilder StringJoiner BigDecimal Object类 Object类是java中的祖宗类,因此,Java中所有的类的对象都可以直接使用object类提供的一些方法 Object类的常见方法: public String toStrin…

23111701[含文档+PPT+源码等]计算机毕业设计javaweb点餐系统全套餐饮就餐订餐餐厅

文章目录 **项目功能简介:****点餐系统分为前台和后台****前台功能介绍&#xff1a;****后台功能介绍&#xff1a;** **论文截图&#xff1a;****实现&#xff1a;****代码片段&#xff1a;** 编程技术交流、源码分享、模板分享、网课教程 &#x1f427;裙&#xff1a;77687156…

智能座舱架构与芯片- (8) 视觉篇

一、概述 相比起用于ADAS感知系统的摄像头&#xff0c;用于智能座舱内部的摄像头&#xff0c;其功能特性和性能要求相对简单。例如&#xff0c;OMS乘客监控摄像头&#xff0c;一般达到5MP即可有良好的效果。同时&#xff0c;OMS也可应用于车内会议系统&#xff0c;还应用于车内…

微服务 Spring Cloud 8,开源RPC框架如何选型?

目录 一、开源RPC框架有哪些&#xff1f;1、跟语言平台绑定的开源RPC框架2、跨语言平台的开源RPC框架 二、跟语言平台绑定的开源RPC框架 -- Dubbo1、Dubbo的架构主要包含四个角色2、Dubbo的调用框架是如何实现的&#xff1f; 三、如何选择&#xff1f;四、跨语言平台的开源RPC框…

UI for Apache Kafka

文章Overview of UI Tools for Monitoring and Management of Apache Kafka Clusters | by German Osin | Towards Data Science中介绍了8种常见的kafka UI工具,这些产品的核心功能对比信息如下图所示, 通过对比发现 UI for Apache Kafka 功能齐全且免费,因此可以作为我们的首…

Kubernetes容器状态探测的艺术

在Kubernetes集群中维护容器状态更像是一种艺术&#xff0c;而不是科学。原文: The Art and Science of Probing a Kubernetes Container[1] 在Kubernetes集群中维护容器状态更像是一种艺术&#xff0c;而不是科学。 本文将带你深入理解容器探测[2]&#xff0c;并特别关注相对较…

Linux安装ErLang(亲测可用)

注&#xff08;我这里安装完成后显示的是中文&#xff0c;有的是显示的英文&#xff09; 1.下载er wget https://packages.erlang-solutions.com/erlang-solutions-1.0-1.noarch.rpm2.安装er yum -y install epel-release截图截不全&#xff0c;就只截安装完成的部分了 rp…

2023年中国语言大模型行业发展趋势分析:预计未来行业将迎来高速增长[图]

自然语言处理&#xff08;NLP&#xff09;大模型是一种利用深度学习技术来理解、解释和生成人类语言的高参数模型。语言大模型通过编码解码的方式模仿人类处理语言的过程从而达到进行自然语言文本输出的能力。 语言大模型主要组成部分 资料来源&#xff1a;共研产业咨询&#…

STM32出现 Invalid Rom Table 芯片锁死解决方案

出现该现象的原因为板子外部晶振为25M&#xff0c;而程序软件上以8M为输入晶振频率&#xff0c;导致芯片超频锁死&#xff0c;无法连接、下载。 解决方案 断电&#xff0c;将芯片原来通过10k电阻接地的BOOT0引脚直接接3.3V&#xff0c;硬件上置1上电&#xff0c;连接目标板&am…