我们正在用公司设计系统中的组件替换我们的定制Reaction组件. 这些都是Web组件,它被做成了一个Reaction包装器,以使它们在Reaction中工作.

在我们的应用程序中,元素是这样呈现的:

<custom-button title="" data-test-id="save" disabled mode="primary">
    #shadow-root
        <button data-mode="primary" size="small" type="button" title="" disabled>Save</button>
</custom-button>

在Cypress ,我试着判断它是否被禁用,如下所示:

cy.getByTestId('save').should('be.disabled'); //Doesn't work, but its the way I want to do it
cy.getByTestId('save').find('button').should('be.disabled'); // Works

第一种方法不起作用,但这是我想要做的,因为这是我们今天所有测试的工作方式. 我希望不得不采用第二种方式,因为这意味着我们必须处理我们设计系统中的按钮--与常规按钮不同.

有人知道为什么第一种方法行不通吗?即使<custom-button>在DOM中应用了disabled属性?

推荐答案

差值在attributeproperty之间.

在引擎盖cy.getByTestId('save').should('be.disabled')下面判断元素是否具有property disabled.标准按钮将attribute-disabled转换为相应的属性,因此它传递上述断言.

自定义按钮显然不具有该行为,因此可能很难将custom-button等同于button.


对您的样本有效的一件事是

cy.getByTestId('save').should('have.attr', 'disabled')

这应该适用于所有出现custom-button次的情况(如果我对它的行为的假设是正确的).

如果您在使用标准button时遇到问题,您可以同时判断以下两项:

cy.getByTestId('save').should($el => {
  return $el.attr('disabled').length > 0 || $el.prop('disabled').length > 0
})

如果在任何地方编写代码都很麻烦,您可以创建自定义断言.


IMO使用.find('button')并不是最优的,因为它是custom-button的内部实现.

Javascript相关问答推荐

成帧器运动中的运动组件为何以收件箱开始?

Exceljs:我们在file.xlsx(...)&#中发现了一个问题'"" 39人;

在网页上添加谷歌亵渎词

Ember.js 5.4更新会话存储时如何更新组件变量

使用Promise.All并发解决时,每个promise 的线性时间增加?

如何在每次单击按钮时重新加载HighChart/设置HighChart动画?

在WordPress中使用带有WPCode的Java代码片段时出现意外令牌错误

正则表达式,允许我匹配除已定义的子字符串之外的所有内容

如何发送从REST Api收到的PNG数据响应

400 bad request error posting through node-fetch

钛中的onClick事件需要在两次点击之间等待几秒钟

当标题被点击时,如何使内容出现在另一个div上?

Jexl to LowerCase()和Replace()

将Singleton实例设置为未定义后的Angular 变量引用持久性行为

未找到用于 Select 器的元素:in( puppeteer 师错误)

设置复选框根据选中状态输入选中值

在范围数组中查找公共(包含)范围

在对象的嵌套数组中添加两个属性

我想为我的Reaction项目在画布上加载图像/视频,图像正在工作,但视频没有

将匿名函数附加到链接的onClick属性