天天看点

Web自动化神器TestCafe(四)—页面交互篇(上)

前言

​ 前段时间给大家介绍了TestCafe的基本使用和元素定位。今天主要给大家介绍一下testcafe这个框架和页面元素交互的方法。

一、互动要求

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

  • 元素在

    body

    页面窗口或iframe窗口的元素内。元素对于用户可能是不可见的。如果某个元素在视口之外,则TestCafe通过滚动可以滚动到元素可见。
  • 元素是可见的,具有以下属性:
    属性 说明

    display

    没有设置为

    none

    visibility

    设置为

    visible

    (默认值)

    width

    > = 1像素

    height

  • 元素不重叠。

    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、右击

  • 在指定元素位置,鼠标右击
  • 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', '柠檬杯')
})
           

四、键盘按键

在测试的操作中,如果涉及到键盘按键的操作,那么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 选择的开始位置,从零开始的整数;非必填,默认为

    endPos

    选择的结束位置;非必填,可见文本内容的长度。
  • 案例:
import { Selector } from 'testcafe';

fixture('Example').page('https://www.baidu.com');

test('Type Text test', async t => {
	// 输入 柠檬班
    await t.typeText('#kw', '柠檬杯')
    	// 选中输入的文本
    	.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', '柠檬班')
    	// 强制等待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
            })
    });
    
               

继续阅读