javascript - 赛普拉斯有没有办法进行反向“getBySel”或类似的事情?
问题描述
赛普拉斯有许多方法可以在 DOM 中更深入地搜索匹配元素。从某个 div 中,我可以查询它的子元素以获取匹配的元素、选择器、属性等。
对于元素的父母,有没有办法反过来做呢?举一个简单的例子,假设我有 4 个筹码,所有筹码都有不同的文字。这是一个芯片:
<div data-test="chip">
<div className="left">
<p><span className="truncate">Chip 1</span></p>
</div>
<div className="right">
<i onClick={handleRemove} data-test="remove-chip">X</i>
</div>
</div>
如果我想使用赛普拉斯移除一个芯片,我需要能够告诉它点击哪个“X”。最简单的方法是选择所有筹码,在文本上匹配,然后进行反向“get”搜索以匹配上,data-test=chip
这样我们只选择 1 个筹码而不是全部 4 个。
cy.getBySel('list-of-chips')
.contains('Chip 1')
.reverseGetBySel('chip') // does this exist??
.find('[data-test="remove-chip"]')
.click();
该parentsUntil
运算符不适用于此,因为它还返回所有父母的数组。我希望它做相反的事情,而不是在提供的选择器之前返回所有父母,我希望选择器位于父母链的末端。希望这是有道理的。
解决方案
这最终对我有用:
Cypress.Commands.add(
'reverseFindBySel',
{
prevSubject: true, // must be chained off get or find
},
(subject, selector, ...args) => {
return cy.wrap(subject).parents(`[data-test=${selector}]`, ...args);
}
);
推荐阅读
- r - 如何根据位置查找特定列的平均值
- java - JAVA 11 - 可选 - 类中的无效方法引用方法 isPresent 可选 - 不能从静态上下文引用非静态方法
- java - 使用 Query 读取 Firebase 数据库返回 null
- python - 在 VSCode 终端中获取最后一个命令
- angular - 如何知道angular2-highcharts中使用的highcharts版本
- vue.js - 如何将 vuetify 1.4 升级到 vuetify 2.0 版本
- docker - Docker(撰写)安装的卷不可写
- laravel - 如何将实时聊天安装到我已经存在的 laravel Web 应用程序中?
- java - CSRF Guard:如何从 URL 中隐藏 CSRF 令牌
- docker - Apama Docker 容器,将容器外部的值传递给 config.evt 文件