Cypress系列(16)- 可操作类型的命令 之 trigger()

353 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第16天,点击查看活动详情

.trigger()

在DOM元素上触发指定事件

 

语法格式

.trigger(eventName)
.trigger(eventName, position)
.trigger(eventName, options)
.trigger(eventName, x, y)
.trigger(eventName, position, options)
.trigger(eventName, x, y, options)

 

参数讲解

eventName

需要触发事件名称

 

position

每个元素都有九个 position,具体可看下图

image.png  

x , y

距离 DOM 元素左上角的坐标,x 是横轴,y 是竖轴

 

options

 

除了上述的通用 option,还有一些事件特有的 options

  

 

  • clientX、clientY:相对于浏览器左上角的距离
  • pageX、pageY:相对于整个页面左上角的距离
  • screenX、screenY:相对于电脑屏幕左上角的距离

 

正确用法

 //  在 a 标签上触发 mousedown 事件
cy.get('a').trigger('mousedown')

 

错误用法

// 不能直接通过 cy 调用
cy.trigger('mousedown')

// location 并不是 DOM 元素
cy.location().trigger('mousedown')

 

鼠标事件的栗子

前言

在 DOM 元素上触发事件之前,DOM 元素必须处于【可交互】状态(必须可见并 且不能禁用)

 

hover 的栗子

 

长按的栗子

 

不同的鼠标按钮

 

添加 options 的栗子

指定事件不应该冒泡

cy.get('#s-usersetting-top').trigger('mouseover', {bubbles: false})

默认情况下,指定的事件将在 DOM 树中冒泡。false 可以防止事件冒泡

 

设置 clientX 和 clientY

这将覆盖基于元素本身的默认自动定位(x、y),对于  mousemove  之类的事件很有用,可能需要将元素拖动到元素本身之外的地方,基于浏览器本身的X、Y坐标

cy.get('button').trigger('mousemove', { clientX: 200, clientY: 300 })

Submit 语法格式

.submit()
.submit(options)

 

正确写法

cy.get('form').submit()  

重点: 必须是 form 元素才能调用.submit()

 

错误写法

// cy 不能直接调用
cy.submit() 

// 不是 form 元素
cy.get('input').submit()

 

options

 

最简单的栗子

html 代码

<form id="contact">
  <input type="text" name="message">
  <button type="submit">Send</button>
</form>

 

测试文件代码