Chai Smoothie - Protractor 断言库 for Chai

npm version Build Status Coverage Status Dependencies semantic-release

Chai Smoothie 使您的 Protractor 驱动的自动化 Web 测试更加流畅。

该库提供了一组自定义的 Chai 断言,帮助您基于 Protractor 的 Serenity/JS 测试更好地表达其意图,赋予断言错误更多意义,并减少团队在故障排除方面花费的时间。

Chai Smoothie 附带 TypeScript 类型定义,并且与 Chai-as-PromisedSerenity/JS 和普通的 Protractor 测试兼容!


将 Chai Smoothie 添加到您的 Node.js 项目中

npm install chai-smoothie --save-dev

动机和(缺失的)上下文

假设我们想更多地了解定义为以下的 HTML 元素的状态

<h1 id="title">Chai Smoothie is delicious!</h1>

Protractor 测试中使用的 典型方法 用于检查元素是否显示,大体上类似于

expect(element(by.id('title')).isDisplayed()).to.eventually.be.true

当标识为“title” 的元素显示时,断言正常工作,不会给我们带来困扰。

但是,如果该元素决定出现,断言将失败,并告诉我们

AssertionError: expected false to be true

尽管 Chai 尽力告诉我们失败的原因,但使用这种方法,它唯一可用的信息是元素可见性的布尔状态。这种缺乏上下文导致错误消息不太有用。

Chai Smoothie 为 Chai 提供了缺失的上下文,并使断言更易读!

原生 Protractor

如果您的自动化 Web 测试使用 Protractor,您可以使用 Chai Smoothie 将上一个示例中的断言更改为更易读的内容

expect(element(by.id('title'))).to.eventually.be.displayed

如果上述断言失败,错误消息将更有信息量

AssertionError: Expected the element located By(css selector, *[id="title"]) to be displayed, but it's not.

Serenity/JS

由于 Serenity/JS 建立在 Protractor 的基础上,您可以使用类似的语法与 Serenity/JS Questions 一同使用

expect(actor.toSee(WebElement.of(Article.Title))).displayed

使用开源 Serenity/JS 库还具有许多其他好处 - 了解更多

设置

首先,如果您还没有在项目中安装 Chai,请安装它

npm install chai --save-dev

接下来,安装 Chai Smoothie

npm install chai-smoothie --save-dev

TypeScript

import chai = require('chai');
chai.use(require('chai-smoothie'));
const expect = chai.expect;

expect(element(by.css('h1'))).to.be.present;

JavaScript

var chai = require('chai');
chai.use(require('chai-smoothie'));
var expect = chai.expect;

expect(element(by.css('h1'))).to.be.present;

可用断言

Chai Smoothie 提供以下断言,每个断言都可以

  • 使用 not 运算符进行否定:expect(el).not.to.be.displayedexpect(el).not.to.be.present.eventually 等。
  • chai-as-promised 结合使用,突出显示 Chai Smoothie 断言返回承诺:return expect(el).to.eventually.be.present
断言 示例 含义 Protractor API
displayed expect(el).to.be.displayed 元素存在于 DOM 中且可见 isDisplayed()
enabled expect(el).to.be.enabled 表单控件元素,例如 input未禁用 isEnabled()
present expect(el).to.be.present 元素存在于 DOM 中,但可以隐藏 isPresent()
selected expect(el).to.be.selected 表单控件,例如 input checkbox 已选中 isSelected()
text() expect(el).to.have.text('some text')expect(el).to.contain.text('some text') 元素具有/包含给定文本 getText()

获取帮助

要询问有关 Serenity/JS 或其任何组件(如 Chai Smoothie)的使用和故障排除,请在 StackOverflow 上发布一个带有 serenity-js 标签的问题

您的反馈很重要!

您觉得 Chai Smoothie 有用吗?为它加一颗星! ★

发现错误了吗?需要某个功能?提出一个问题或提交一个拉取请求。

有反馈吗?请在 Twitter 上告诉我:@JanMolak

许可证

Chai Smoothie 库在 Apache-2.0 许可证下发布。

如果您有兴趣了解商业许可证、培训、支持或让您的团队掌握现代软件开发实践,请联系我们