Cypress UI自动化测试框架学习(3)- 元素定位,操作和断言

本文详细介绍了Cypress UI自动化测试中如何通过id、class、name定位元素,以及使用.get(), .contains(), .within()等方法进行操作,并涵盖了BDD和TDD断言的实战应用。还演示了框架内置的可视化元素定位工具和常见错误处理技巧。
摘要由CSDN通过智能技术生成

Cypress UI自动化测试框架学习(3)- 元素定位,操作和断言

元素定位

谈到UI自动化测试,不管是web端还是移动端,页面元素的各种操作在编写测试脚本时都会涉及,如果想写出高通过率和高健壮性的自动化测试用例,必须要确保正确高效的页面元素识别和使用。

cypress框架除了支持常用的元素定位,还提供了好用的JQuery css选择器.

下面会介绍常用的元素定位方法,常用的定位方式,以及框架自带可视化自助元素定位方法

常用元素定位

#id定位
  • 描述:通过元素的 id 属性来定位

  • 前提:定位的元素css样式须存在id属性且唯一

//元素前端代码示例 <input type="text" id="email" name="email" placeholder="" class="form-control">

  • 示例代码
    cy.get('#email')
.class定位
  • 描述:通过元素的class属性来定位

  • 前提:定位的元素css样式存在class属性且唯一

//元素前端代码示例 <a class="navbar-brand" href="/"><img width="150" height="28" border="0" align="default" alt="光谷社区" src="http://cdn.guanggoo.com//static/images/guanggoonew.png"></a>

  • 示例代码

cy.get('.navbar-brand')

name定位
  • 描述:通过元素name定位

  • 前提:定位的元素css样式存在name属性且唯一
    //元素前端代码示例 <input type="text" id="email" name="email" placeholder="" class="form-control">

  • 示例代码

cy.get('input[name="email"]')

常用定位方式

.get()
  • 描述:使用 get() 定位元素,定位元素用 CSS selectors ,跟 jQuery 一样
  • 示例代码

cy.get('#email')

.contains()
  • 描述:可以使用cy.contains()根据元素的内容找到元素

  • 示例代码

cy.contains(‘value’) cy.get(‘div[name=“div_name”]’).contains(‘value’)

.within()
  • 描述:可以在特定的DOM元素中找到元素

  • 示例代码

cy.get('.query-form').within(() => { cy.get('input:first').should('have.attr', 'placeholder', 'Email') cy.get('input:last').should('have.attr', 'placeholder', 'Password') })

Cypress.$
  • 描述:Cypress 也提供了 JQuery 选择器,调用Cypress.$(‘button’)会自动在您的窗口中查询元素。 换句话说,Cypress 会自动将文档设置为您当前通过 cy.visit() 导航到的任何内容,这是从开发人员工具调试时同步查询元素的好方法。

  • 示例代码

Cypress.$(selector) // other proxied jQuery methods Cypress.$.Event Cypress.$.Deferred Cypress.$.ajax Cypress.$.get Cypress.$.getJSON Cypress.$.getScript Cypress.$.post

框架自带可视化自助元素定位

  • 1.前提:demo代码已经跑起来(运行脚本:npm run cypress:open)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3yvS503M-1622772043624)(https://raw.githubusercontent.com/waitnoww/hexoblogimg/master/img/20210601152305.png)]

  • 2.点击运行调试用例,进入定位元素对应的页面

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DXtihsgk-1622772043626)(https://raw.githubusercontent.com/waitnoww/hexoblogimg/master/img/20210601152419.png)]

  • 3.在页面上选择瞄准镜标识(open selector playground)

  • 4.选择页面上的元素区域,元素的定位信息就会展示在定位信息展示区域,点击复制就可使用

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8es9nser-1622772043629)(https://raw.githubusercontent.com/waitnoww/hexoblogimg/master/img/20210601152904.png)]

元素常用操作

.click()

  • 描述: 单击

  • 示例代码

cy.get('.btn-success').click()

.type(value)

  • 描述: 输入内容

  • 示例代码
    cy.get(‘input[name=“username”]’).type(‘dengnao.123@163.com’)``

.clear()

  • 描述:清空输入内容

  • 示例代码

cy.get(‘[type=“text”]’).clear()

.submit()

  • 描述:提交表单

  • 示例代码

cy.get(‘.ant-input’).submit()

.dbclick()/.rightclick()

  • 描述:鼠标双击操作/鼠标右击操作

  • 示例代码

cy.get('.menu').rightclick() // 鼠标右击 .menu菜单元素

.select()

  • 描述:针对select元素选择一个选项

  • 示例代码

cy.get('color').select('red') // 颜色选项中选择红色

.check()/.uncheck()

  • 描述:单选或多选进行勾选/取消选中(反选)

  • 示例代码

cy.get('[type="checkbox"]').check() // 对checkbox进行选中操作 cy.get('[type="checkbox"]').uncheck() // 对checkbox进行取消选中操作

.focus()/.blur()

  • 描述:对选项进行聚焦/失焦操作

  • 示例代码

cy.get(‘input[name=“username”]’).focus() //对于用户名输入框进行聚焦操作

断言

BDD断言

断言类型
.should():
  • 描述:创建断言,断言会自动重试,直到它们通过或超时。

  • 示例代码

cy.get(‘.ant-checkbox).should(‘be.checked’)

.expect():
  • 描述:预期结果

  • 示例代码

expect(name).to.not.equal(‘dengnao.123@163.com’)

常用断言

可参考官网文档:https://docs.cypress.io/guides/references/assertions#BDD-Assertions

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zONrg0MJ-1622772043630)(https://raw.githubusercontent.com/waitnoww/hexoblogimg/master/img/20210601161229.png)]

TDD断言

断言类型
.assert():
  • 描述:断言

  • 示例代码

assert.equal(3,3,’vals equal’)

常用断言

可参考官网文档:https://docs.cypress.io/guides/references/assertions#TDD-Assertions

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kqrMwn0d-1622772043632)(https://raw.githubusercontent.com/waitnoww/hexoblogimg/master/img/20210601161926.png)]

常用断言

针对长度(length)的断言
`//重试,直到找到3个匹配的<li.selected>
cy.get('li.selected').should('have.length',3)`
针对类(Class)的断言
`//重试,直到input元素没有类被disabled为止(或者超时为止)
cy.get('from').fijd('input').should('not.have.class','disabled')`
针对值(Value)断言
`//重试,直到textarea的值为‘iTesting’
cy.get('textarea').should('have.value','iTesting')`
针对文本内容(Text Content)的断言

//重试,直到这个span不包含“click me”字样 cy.get('a').parent('span.help').should('not.contain','click me') //重试,直到这个span包含“click me”字样 cy.get('a').parent('span.help').should('contain','click me')

针对元素可见与否(Visibility)的断言

//重试,直到这个button是可为止 cy.get('button').should('be.visible')

针对元素存在与否(Existence)的断言

//重试,直到id为loading的spinner不在存在 cy.get('#loading').should('not.exist')

针对元素状态的(status)的断言
`//重试,直到这个radio button是选中状态
cy.get(':radio').should('be.checked')`
针对CSS的断言
`//重试,直到completed这个类有匹配的css为止
cy.get('.completed').should('have.css','text-decoration','line-through')`

运行出错问题记录

运行npm run cypress:open报错,提示No version of Cypress is installed
报错截图如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yewWRQUd-1622772043633)(https://raw.githubusercontent.com/waitnoww/hexoblogimg/master/img/20210601150230.png)]

修复方式

//项目根目录下运行如下命令即可解决 ./node_modules/.bin/cypress install

原因

电脑使用过清理软件,安装的cypress缓存信息被删除了,重新安装就好

运行npm run cypress:open报错,提示Cypress verification timed out
报错截图如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Tf8DJxlx-1622772043634)(https://raw.githubusercontent.com/waitnoww/hexoblogimg/master/img/20210601151647.png)]

修复方式

重新运行npm run cypress:open尝试即可

原因

电脑cypress验证超时了,一般重新操作即可恢复

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值