前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >你不知道的Cypress系列(6) -- 多Tab的小秘密

你不知道的Cypress系列(6) -- 多Tab的小秘密

作者头像
iTesting
发布2021-04-08 20:05:54
3.6K2
发布2021-04-08 20:05:54
举报
文章被收录于专栏:iTestingiTesting

今天是你不知道的Cypress系列(6) -- 多Tab的小秘密

自从Cypress出现后,市面上Web端自动化测试框架就只剩下了两个: 一个是吊打一切的Cypress, 另一个是其它。虽然Cypress这么优秀,但它也有一些妥协和倔强,其中就包括这么一条:

  • There will never be support for multiple browser tabs.

饶是经验丰富的测试老专家,在技术选型初次接触Cypress时,听到这个消息也不免倒吸一口凉气:“什么框架,怎么连多Tab都不支持?那还能推广吗?”

被诱入歧途的多Tab测试

在微信横空出世之前,你不会觉得用手机短信聊天有什么不对,你甚至很习惯,也从来没想过改变,直到微信一巴掌扇过来。同样的,多Tab测试也是如此。

我们先来看一下多Tabs测试的典型场景:

通常页面有一个超链接,它有href属性,当你点击文本的时候,会跳转。例如下面这个例子:

代码语言:javascript
复制
<a href="https://www.helloqa.com" target="_blank">关注iTesting!</a>

很显然,当你点击“关注iTesting”,浏览器就会重新打开一个页面,页面的网址是“https://www.helloqa.com”.

在Cypress出现之前,Selenium/WebDriver, 作为Web端自动化测试的巨无霸,是这么告诉我们的,UI自动化测试要模拟真实用户,用户怎么做,你就怎么做。

于是乎,你要测试这个功能,你就要点击一下“关注iTesting”这个超链接,然后等页面跳转后,你再把句柄移到这个新页面,来判断页面的URL正确性。

这个逻辑好像挺对的,就是代码写起来好累,而且运行时还经常出错。

测试多Tab需要打开多Tab吗?

不知道你有没有想过,你费那么老大劲写代码,是为了验证如下两个事实:

  • 点击跳转这个功能正确。
  • 跳转的新页面能打开。

真正的实力在于不战而屈人之兵。同样的,真正的测试是“不真的测试”。

我们想一下,Cypress跟其它“平(yao)平(yan)无(jian)奇(huo)框架”相比,最大的特点是什么?运行在浏览器内对吧。 能够直接操作DOM元素对吧?既然如此,操练起来吧!

是时候表演真正的技术了

不废话了,看Cypress如何处理这种情况:

代码语言:javascript
复制
cy
  .contains('关注iTesting')
  .should('have.attr', 'href', 'https://www.helloqa.com')
  .should('have.attr', 'target', '_blank')

这就完了?是的,这就完了!

如果你学过一点HTML的皮毛就会知道,target=_blank这个属性就是用来保证一定会打开新页面的。 而验证href是我期待的网址,一定能说明点击它就可以访问到“https://www.helloqa.com”.

什么,你怕这个网址打不开?好说!

代码语言:javascript
复制
cy
  .contains('关注iTesting')
  .should('have.attr', 'href', 'https://www.helloqa.com')
  .should('have.attr', 'target', '_blank')
  
cy
  .contains('关注iTesting')
  .then(link => {
    cy
      .request(link.prop('href'))
      .its('status')
      .should('eq', 200)
  })

直接发接口请求看HTTP Code返回,就这么生猛。在Cypress里,你永远不会看到测试用例时好时坏。

什么?打开新页面后还有操作?

哎,蔡老师全部满足你:

代码语言:javascript
复制
cy
  .contains('关注iTesting')
  .should('have.attr', 'href', 'https://www.helloqa.com')
  .should('have.attr', 'target', '_blank')
  
cy
  .contains('关注iTesting')
  .invoke('removeAttr', 'target').click()
// 请继续你的操作,此动作将会在当前页面打开超链接

秀儿?是你么

Cypress永远不满足一种解决方案,来,看高阶版:

代码语言:javascript
复制
//spy来了,直接监视窗口打开
cy
  .window().then((win) => {
    cy.spy(win, 'open').as('newWindow')
  })

cy
  .contains('关注iTesting')
  .click()

cy
  .get('@newWindow')
  .should('be.calledWith', '_blank', 'https://www.helloqa.com')

这才是使用Cypress正确的姿势啊!使用Cypress进行自动化测试,请优先考虑走后门。毕竟,Cypress可以访问任何你的应用程序可以访问的资源,那么,不如先“监控”下window打开这件小事儿:)

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-03-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 iTesting 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 被诱入歧途的多Tab测试
  • 测试多Tab需要打开多Tab吗?
  • 是时候表演真正的技术了
  • 什么?打开新页面后还有操作?
  • 秀儿?是你么
相关产品与服务
短信
腾讯云短信(Short Message Service,SMS)可为广大企业级用户提供稳定可靠,安全合规的短信触达服务。用户可快速接入,调用 API / SDK 或者通过控制台即可发送,支持发送验证码、通知类短信和营销短信。国内验证短信秒级触达,99%到达率;国际/港澳台短信覆盖全球200+国家/地区,全球多服务站点,稳定可靠。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档