javascript - 赛普拉斯:有条件地结束链
问题描述
我对赛普拉斯很陌生,但我想知道是否有某种方法可以有条件地结束命令链?我知道在柏树中应该避免条件测试,但我还是想试试这个。
我试过的
我试图通过将链传递给自定义命令来解决它,但它似乎不起作用。
Cypress.Commands.add('ifExists', { prevSubject: true }, (subject: object, element: string) => {
cy.get('body').then(($body) => {
if ($body.find(element).length) {
cy.wrap(object).end();
} else {
// something else
}
})
})
并且
Cypress.Commands.add('ifExists', { prevSubject: true }, (subject: JQuery<HTMLBodyElement>, element: string) => {
cy.wrap(subject).then(($body) => {
if ($body.find(element).length) {
return cy.wrap(subject);
} else {
return cy.wrap(subject).end();
}
})
})
只是澄清我想从这个命令中得到什么。我希望能够将它添加到这样的链中:
cy.get('body > #specialThing').ifExists().then((thing) => ...)
或这个:
cy.ifExists('body > #specialThing').then((thing) => ...)
感谢所有帮助和建议!
解决方案
我会查看关于条件测试的赛普拉斯文档,特别是关于元素存在的部分。tl;dr 是你只需要搜索一个更通用的元素,它会产生一些你可以断言的东西。
y.get('body')
.then(($body) => {
// synchronously query from body
// to find which element was created
if ($body.find('#specialThing').length) {
// input was found, do something else here
return 'input'
}
// else assume it was textarea
return 'textarea'
})
.then((selector) => {
// selector is a string that represents
// the selector we could use to find it
cy.get(selector).type(`found the element by selector ${selector}`)
})
推荐阅读
- r - 如何使用 R mutate 函数转换 NA 值?
- javascript - 使用 X-Auth 和 Bearer 令牌在登录后进行 Webscraping
- python - 如果任务失败,我如何召回“任务”?
- java - 为 Java 地图实现分页
- vue.js - 通过 vue-router 导航时组件的生命周期钩子的优先级是什么
- angular - 同一页面中的 Angular mqny 加载器
- php - Json 不存储输入文件的值
- eclipse - “Coverage As”选项不考虑 TestNG 运行/调试首选项
- flutter - 当我从 android studio 创建颤振项目时出错
- go - go: 找不到主模块;见“去帮助模块”