Cypress总结回顾

此篇博客是Cypress框架部分的最后一篇。首先,会回顾cypress框架特点,接着会介绍cypress框架的局限性,通过这些信息让大家更好的选择适合项目的测试框架。为了完成此次课程目标拆分了2个task。

  • 回顾Cypress框架特点
  • 使用Cypress框架时的局限性

回顾Cypress框架特点

通过前面的博客,可以发现如果选用Cypress框架,调试脚本即高效又方便。另外,框架内置的自动等待算法让定位和操作页面元素成功率非常高,基本无需用户增加额外的等待处理语句。调用接口或者查询数据库准备测试数据方面也支持的很好。故如果被测应用只需测试chrome或者firfox浏览器,那么Cypress是一个不错的选择。

上面重点列举了Cypress框架的突出优势,那么此框架有局限性么?当然有,比如不支持IE浏览器就是局限性之一,下面让我们看看如果选用Cypress框架还会存在哪些局限性。

使用Cypress框架时的局限性

  • 1.不支持浏览器多个Tab页面间操作,即便提供了workround方式,但有局限性,前面章节专门做过介绍,这里不再重复说明。

  • 2.不支持同时操作多个浏览器,例如打开了两个chrome浏览器,并发执行测试案例。此局限性影响不大,因为可以通过在CICD平台上配置多条流水线并发运行测试案例,缩短反馈时间。例如jenkins上配置多个job并发运行自动化案例。

  • 3.同一个测试用例中不支持跨域操作,如果被测应用中存在大量点击某个连接或者按钮后会跳转到新的域页面,那么需要考虑是否选择该框架。

  • 4.不支持hover操作。对于hover操作,官网提供了三种workaround方式:通过trigger('mouseEvent')模拟hover操作;通过click({froce:true})跳过校验直接点击目标元素;将需要hover才能显示的目标元素调用invoke('show')方法强行显示后再进行点击。下面是使用第一种和第三种workaround方式模拟hover操作的脚本。Test Runner上选择“hover_spec.js”即可运行下面的脚本。

    describe("hover demo", () => {
        it("should click successfully", () => {
            Cypress.on('uncaught:exception', (err, runnable) => {
                return false
            });
            cy.visit('https://chercher.tech/practice/popups');
            cy.get('a[href="https://google.com"]').click({force: true})
            //跳过校验点击需要hover操作后才显示的跳转菜单
        })
        it.only("should hover successfully", () => {
            Cypress.on('uncaught:exception', (err, runnable) => {
                return false
            });
            cy.visit('https://chercher.tech/practice/popups');
            cy.get('#sub-menu').focus();
            ['mouseover', 'mouseout', 'mouseenter', 'mouseleave'].forEach((event) => {
                cy.get('#sub-menu').trigger(`${event}`)
                //模拟hover操作,但发现未生效
            });
            cy.wait(3000);
            cy.get('a[href="https://google.com"]').click()
            //因为前面hover操作未生效,故点击此元素时会失败,提示目标元素不是visible状态
        });
    });

    执行脚本发现,第一个测试脚本通过强制点击方式确实能点击到目标元素,但第一种方式无法check hover操作本身。第二个脚本通过调用trigger(eventname)方式模拟hover操作,但未生效,即页面上没有真正进行hover操作。执行结果如下图所示。总结而言,Cypress框架目前对hover操作支持有限,但官网上有说明未来会支持hover操作。

    虽然Cypress框架有一些局限性,但相比后面介绍的Puppeteer框架和TestCafe框架,Cypress框架的明显优势是提供了Test Runner,通过Test Runner可快速修复失败的案例。提升了调试效率,就等于极大程度降低了自动化脚本维护成本。故如果被测应用中只有极少量的多tab页间切换场景或者跨域访问业务场景,那么是可以考虑牺牲掉自动化测试覆盖率的。即选用Cypress框架,少量场景不添加到UI层自动化案例中,从而避免遇到框架不支持的测试场景。 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Cypress是一个JavaScript端到端测试框架,它提供了一组API来编写端到端测试,可以在浏览器中运行这些测试。以下是Cypress的一些基本概念和用法: 1. 安装Cypress ```shell npm install cypress --save-dev ``` 2. 运行Cypress ```shell npx cypress open ``` 运行上述命令后,Cypress Test Runner会启动,你可以在其中运行测试用例。 3. 编写测试用例 在Cypress中,测试用例被称为“规范”(spec)。规范是一个JavaScript文件,其中包含一组测试用例。以下是一个简单的规范示例: ```javascript describe('My First Test', () => { it('Does not do much!', () => { expect(true).to.equal(true) }) }) ``` 在上述示例中,我们定义了一个规范,其中包含一个测试用例。测试用例使用`it`函数定义,其中包含一些断言,这些断言用于验证测试用例的正确性。 4. 运行特定的规范文件 如果你只想运行特定的规范文件,可以使用以下命令: ```shell npx cypress run --spec path/to/spec.js ``` 在上述命令中,`path/to/spec.js`是规范文件的路径。 5. 使用cy.fixture()加载测试数据 Cypress提供了一个`cy.fixture()`函数,用于加载测试数据。你可以将测试数据存储在JSON文件中,并使用`cy.fixture()`函数加载它们。以下是一个示例: ```javascript describe('My First Test', () => { beforeEach(() => { cy.fixture('example.json').as('example') }) it('loads example data', function () { cy.visit('https://example.com') cy.get('#username').type(this.example.username) cy.get('#password').type(this.example.password) cy.get('#submit').click() }) }) ``` 在上述示例中,我们使用`cy.fixture()`函数加载了一个名为`example.json`的JSON文件,并将其存储为别名`example`。在测试用例中,我们使用`this.example`访问加载的测试数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

taoli-qiao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值