Cypress是什么?
为现代网络打造的下一代前端测试工具。我们解决了开发人员和QA工程师在测试现代应用程序时面临的关键难点问题。
我们很容易的能够做下面的事情:
通常大家都会以为Cypress就是Selenium;
Cypress从底层和结构上都不同于Selenium。Cypress能够突破很多Selenium上的限制。
这将让你能够编写更快、更简单和更可靠的测试。
Cypress允许你编写所有类型的测试:
- 端到端测试
- 集成测试
- 单元测试
Cypress可以测试任何在浏览器中运行的内容。
特性
Cypress就像一个完整的烘烤箱,他还自带电池。 下面是一些其它测试框架无法做到的事情:
- 时间旅行: Cypress在你运行测试的时候拍摄快照。 只要将鼠标悬停在 命令日志 上就能够清楚的了解到每一步发生了什么。
- 可调式能力: 你再也不需要去猜测测试为什么失败了。 调试工具 和Chrome的调试工具差不多。 清晰的错误原因和堆栈跟踪让调试能够更加快速。
- 自动等待: 在你的测试中不再需要添加等待或睡眠函数了。在执行下一条命令或断言前Cypress会 自动等待 异步将不再是问题.
- Spies, Stubs, and Clocks: 验证和 控制 函数、服务器响应或者计时器的行为。你喜欢的单元测试的功能都掌握在你的手中。
- 网络流量控制: 非常容易的进行 控制、保存和边缘测试,而这并不需要涉及到你的服务。你可以根据需要保留网络流量。
- 一致的结果: 我们的架构不需要Selenium或者WebDriver。向快速,一致和可靠的无侵入测试看齐。
- 屏幕截图和视频: 可以查看测试失败时候系统自动截取的图片,或者整个测试的录制视频。
简介入门
describe('Post Resource', function() { it('Creating a New Post', function() { cy.visit('/posts/new') // 1. cy.get('input.post-title') // 2. .type('My First Post') // 3. cy.get('input.post-body') // 4. .type('Hello, world!') // 5. cy.contains('Submit') // 6. .click() // 7. cy.url() // 8. .should('include', '/posts/my-first-post') cy.get('h1') // 9. .should('contain', 'My First Post') }) })
- 访问
/posts/new
页面. - 找到类为
post-title
的输入框. - 输入”My First Post”.
- 找到类为
post-body
的输入框. - 输入”Hello, world!”.
- 找到含有
Submit
文本的元素. - 点击.
- 获取浏览器地址,确保地址里含有
/posts/my-first-post
. - 找到
h1
标签, 确保内容里含有”My First Post”.
查询元素
Cypress很像jQuery
如果你之前使用过 jQuery , 你可能习惯于这样查询元素:
$('.my-selector')
在Cypress,查询元素的方式是相同的:
cy.get('.my-selector')
事实上,Cypress 捆绑了jQuery并向你公开其许多DOM遍历方法,以便你可以轻松使用你已熟悉的API来处理复杂的HTML结构。
// 每个方法都等同于它的jQuery对应方法。用你所知道的! cy.get('#main-content') .find('.article') .children('img[src^="/static"]') .first()
Cypress利用jQuery强大的选择器引擎帮助现代Web开发人员熟悉和查找元素。