我正在try 做一些与这篇帖子非常类似的事情: https://stackoverflow.com/questions/56145926/how-to-check-if-element-exists-using-cypress-io

我正在使用类型转换.以下是我的代码:

cy.get("body").then($body => {
            if ($body.find(this.timerLocator).length > 0) {
                return cy.get(this.timerLocator);
            }
            else {
                return cy.contains('No Match Found');
            }
});

问题是,"this.timerLocator"可能要等上60秒才会出现. find个命令的文档提到我们可以传递一个选项‘Timeout’. 但在添加超时时,我收到以下错误消息:

cy.get("body").then($body => {
            if ($body.find(this.timerLocator, {timeout: 60000}).length > 0) {
                return cy.get(this.timerLocator);
            }
            else {
                return cy.contains('No Match Found');
            }
        });

Expected 1 arguments, but got 2.ts(2554)

我还try 了一些简单得多的方法,比如:

try {
    cy.get(this.timerLocator, { timeout: 60000 });            
} catch (error) {
    cy.contains('No Match Found');
}

但这并不管用.我从来没有拿到过接球支架.

有人能在这件事上帮我一下吗?

EDIT:实际上,我最终使用了多个 Select 器,它在我的情况下工作得很好.以下是我的代码:

const multiSelector = `${this.timerLocator}, :contains("No Match Found")`;
return cy.get(multiSelector, { timeout: 60000 });

推荐答案

你不能真的在超时的情况下进行条件$body.find(...).

由于您有一个/或,而且看起来它们是互斥的,所以您可以使用multiple selector

// this selector looks for either timerLocator or element with "No Match Found"
const multiSelector = `${this.timerLocator}, :contains("No Match Found")`;

cy.get(multiSelector, {timeout:60000})
  .then($timerOrNoMatch =>
    ...
  })

Typescript相关问答推荐

React Router SR:useLocate()只能在路由组件的上下文中使用

强制两个类型脚本对象具有相同的键

将对象属性转换为InstanceType或原样的强类型方法

如何在单击停止录制按钮后停用摄像机?(使用React.js和Reaction-Media-Recorder)

为什么我的Set-Cookie在我执行下一次请求后被擦除

向NextAuth会话添加除名称、图像和ID之外的更多详细信息

有条件地删除区分的联合类型中的属性的可选属性

使用打字Angular 中的通用数据创建状态管理

接口重载方法顺序重要吗?

将带点的对象键重新映射为具有保留值类型的嵌套对象

Angular 自定义验证控件未获得表单值

有没有一种方法可以确保类型的成员实际存在于TypeScript中的对象中?

如何在React组件中指定forwardRef是可选的?

如何连接属性名称和值?

map 未显示控制台未显示任何错误@reaction-google-map/api

Typescript .根据枚举输入参数返回不同的对象类型

TS不能自己推断函数返回类型

Route.ts文件中未导出HTTP方法

确保财产存在

我应该使用服务方法(依赖于可观察的)在组件中进行计算吗?