【发布时间】:2019-12-13 14:49:42
【问题描述】:
背景:
我正在使用 Cypress 为 React Web 应用程序编写测试自动化。在应用程序中,我有一个对话框,其中有我需要单击的元素。当我尝试正常单击这些元素中的任何一个时,赛普拉斯给我一个错误,即该元素不可见because its content is being clipped by one of its parent elements, which has a CSS property of overflow: 'hidden', 'scroll' or 'auto'。因为这些 DOM 元素是由一些第 3 方 React 组件生成的,所以我无法更改它,我可以解决它的唯一方法是在 click 命令中使用 {force:true}。
问题:
因为这些元素很少,并且为了保持 DRY 原则,我想创建一个名为 forceClick 的自定义子命令,它简单地包装 subject.click({force:true})。但是,由于某种原因,当我这样做时,赛普拉斯根本不执行 click 命令!
注意:出于调试目的,我还在自定义命令中添加了一个cy.log 命令,奇怪的是,我看到这个log 命令被 执行,并且只有click 命令没有。
代码如下:
Cypress.Commands.add('forceClick', {prevSubject:'element'}, subject => {
cy.log('forceClick was called!');
subject.click({force:true})});
在我的测试中,我有以下行:
cy.get("[data-test='panel-VALUES']").forceClick();
请注意,如果我将其更改为以下行,它将按预期工作:
cy.get("[data-test='panel-VALUES']").click({force:true});
知道为什么forceClick 自定义命令不执行点击命令吗?
【问题讨论】:
标签: cypress add-custom-command