cypress - 从自定义命令 cypress 返回内容
问题描述
我创建了下面的函数,但我很难从最后一个 if 块(elArr [3])返回东西。
如果我删除所有返回语句并在 if 块中说 put: cy.get(el).click() ,它工作正常,但我不想在此函数中使用该命令,而是在测试中执行,而不是像这样:
cy.traverseIFrame(['1', '2', '3'], 'myelement').click()
有人可以帮助我吗?试图让这个工作让我发疯。
Cypress.Commands.add('traverseIFrame', (elArr, searchEl) => {
return cy.iframe(elArr[0]).within((res) => {
if (res.find(searchEl).length > 0) {
console.log('true1');
cy.get(searchEl).click(150, 220, {
force: true
});
}
return cy.iframe(elArr[1]).within((res) => {
if (res.find(searchEl).length > 0) {
console.log('true2');
cy.get(searchEl).click(150, 220, {
force: true
});
}
return cy.iframe(elArr[2]).within((res) => {
if (res.find(searchEl).length > 0) {
console.log('true3');
cy.get(searchEl).click(150, 220, {
force: true
});
}
return cy.iframe(elArr[3]).within((res) => {
if (res.find(searchEl).length > 0) {
console.log('true4');
return cy.get(searchEl);
}
});
});
});
});
});
解决方案
这是因为.within()
命令不关注 inner return
,而是返回上一个主题
.within() 产生与上一个命令相同的主题。
尝试返回不同的元素 .within 回调无效
相反,等效的应该是.then()
&cy.wrap(...).find(...)
组合,
Cypress.Commands.add('traverseIFrame', (elArr, searchEl) => {
return cy.iframe(elArr[0]).then(res => {
// this find sb ok since it's jquery
if (res.find(searchEl).length > 0) {
console.log('true1');
// cy.wrap().find() here equates to .within(() => cy.get()
cy.wrap(res).find(searchEl).click(150, 220, { force: true });
}
// this nested cy.iframe may be ok - depends on internals of this command
return cy.iframe(elArr[1]).then((res) => {
...
// inner-most return
return cy.wrap(res).find(searchEl)
推荐阅读
- sql - 在一个查询中附加一对多关系的 Django 查询集
- symfony - FosUserBundle 注册后确认电子邮件
- gitlab - 在 .gitlab-ci.yml 文件中使用什么图像在 gitlab-ci 中运行 fastlane?
- node.js - 我正在尝试使用sails js从数据库中的相关表中获取数据。但我总是得到未定义的错误。谢谢
- java - Java 弹簧最大值。上传大小限制
- apache-spark - 使用 PySpark 将 Spark Dataframe 加载到 ElasticSearch
- java - 删除 recyclerView 中的所有选定项目
- javascript - 如何在角度 1 中获取所选选项的索引
- android - 将选项卡式活动中的浮动按钮链接到每个选项卡
- angularjs - 在 window.location.href 之前/期间吐司